Department setup

Every value here is editable — distributions open a percentile editor, single values are typed directly. Changes save instantly.

Equation try-it variables ?

month: tenureMonths: clientCount: globalCoachCount: globalActiveClients:
Coaches
Expenses
Simulation horizon
Event Listeners

Simulation

Run once for a quick preview, or run the full engine across parallel workers. Both always add to the current session's sample count as long as settings haven't changed since it started.

% / yr
Parameters changed since this run — results below are dimmed but kept. Run again to refresh.
Samples
Time to generate
Median NPV
Mean NPV
P(profitable)
Break-even

NPV distribution across runs

Over time — median with 25th–75th percentile band

Monthly cashflow discounted to today; bar & line height ∝ √|amount| — hover for line items

Scale Zoom
Revenue Expense Net (this period) Cumulative profit click to toggle a series and rescale

Coach & client timeline representative run — closest to median NPV

Sort by
Zoom
Coach (brighter = higher quality score) Client Software client

A "+N" at the center of a client's bar marks referrals they generated (total across their tenure); italic means at least one of those referred clients was redirected to a different coach (their own was at capacity) — that's why it may not appear on this same row. A "×" before a client's join date (in its tooltip) marks a coach-generated (direct) lead.

Monthly event log

from the representative run, above

Debug log every cashflow, new client, new coach, and referral — one row each, from the representative run

Comma-separated: Day, Who, By Whom, What, How Much. Paste directly into Excel or a text editor to filter/sort.

C# simulation code a single, self-contained .cs file that reproduces this simulation's Monte Carlo run

Generated fresh from your current Setup settings. Needs only the .NET SDK, no extra packages -- run via dotnet run in a new console project (drop this file in, replacing Program.cs), dotnet-script, or any online C# compiler. Number and distribution modes are reproduced exactly. Equation-mode fields are converted to real C# by simple text substitution (Math.exp/min/max/round/floor/ceil, and JS's ===/!==) -- not parsed or evaluated, so ordinary arithmetic, comparisons, and ternary ?: come through as-is. Anything else (Math.pow, Math.sqrt, Math.random, ...) is left as a placeholder that deliberately won't compile, with the original JS shown right above it as a //JS: comment for you to translate by hand.

Sensitivity Analysis

Sweep one parameter from a "before" state to an "after" state across evenly-spaced steps, running a full batch at each step, then automatically compare all of them.

Parameter to sweep

% of current value
Batch — sweep every variable

Runs a full sweep on every checked variable in one pass. To keep this from exhausting local storage, only the output metrics, NPV distribution, and sensitivity chart are kept per variable — not full simulation detail, so results land in SA Reports rather than Simulation Results.

%
VariableCurrentBeforeAfter

Simulation Reports

Every run is saved automatically. Load one back up, export it, or select two or more to build a comparison report.

Name Saved ↓ Time since run Samples Horizon Median NPV Mean NPV P(profit)
No saved simulations yet. Run one from the Simulation tab.

Comparison report

The baseline is always shown in black — switch which run is baseline from its chip below without reordering columns. Runs saved at different discount rates are recomputed live at whichever rate you set, using each run's saved undiscounted cashflows.

Select two or more runs from Results to compare.

Compare Reports

Saved comparison reports. Load one back up to revisit it, or delete it.

SA Reports

One row per variable batch-swept from the Sensitivity Analysis tab. Each row is self-contained — output metrics, NPV distribution, and the sensitivity chart, without full simulation detail.

No SA reports yet — run a batch sensitivity analysis to populate this page.

Solver

Pick a target metric and value, choose which Setup variables it's allowed to move, and let it search for a combination that hits the target while minimizing total effort.

Target

Levers — variables the solver can move

Check which variables the solver may adjust. Leave a bound blank for unbounded on that side. Distributions are moved as a single scaler on their whole curve (1.0 = unchanged). Difficulty is relative cost: a variable at difficulty 2 costs twice as much per % moved as one at difficulty 1. Cost rises fast the further any one variable is pushed, so the solver spreads the required change across several cheaper variables rather than maxing out just one.

% of current value
Variable Current Lower bound Upper bound Difficulty /10% change
Search
Saved solver results
No saved solver results yet.

Settings

Whole-app data management.

Data management

Export everything

Downloads one JSON file containing your current settings, every saved simulation, and every saved comparison report.

Import everything

Replaces everything currently stored with the contents of a previously exported file.

Delete everything

Permanently clears settings (back to defaults), all saved simulations, and all saved reports. Asks for confirmation twice.

Delete reports only

Clears Simulation Results, Compare Reports, and SA Reports to free up storage space — leaves your Setup settings untouched. Asks for confirmation twice.