The engine
Nine stages, twelve months, two hundred times
The simulator is a mechanical model of a company with agents sitting on top of it. Price moves demand, demand meets capacity, capacity is people, people cost money, money is cash. The agents watch a noisy and lagged version of that and act on their own objectives.
The ledger it draws fromThe agents on top of it
No API key. No network call. Same seed, same answer, every time.
Every month runs the same nine stages in the same order, and the order is part of the answer.
Competitors resolve before customers decide, so this month's comparison is against a price that already moved. The books close before morale is worked out, so a bad month reaches people through utilisation rather than by magic. Change the order and you change the result, which is why it is written down rather than left to whichever function happened to be called first.
One simulated month
What happens, in order
The levers land
Any lever whose start month is this month is applied now. A price move multiplies both the price existing customers face and the price new business is quoted, and records an event saying that contracted revenue will not see it until its term ends. A hire adds cost immediately and a ramping rep who carries no quota yet. A department cut removes its cost, its people, and the weight it carried on quality and on selling.
Management reacts
Effects already running tick along, and then your executives look at their own numbers. This is optional per scenario. With it on, the company answers back; with it off, you see the mechanical response on its own.
Competitors resolve queued moves
A competitor does not match you every month. It decides once how far it intends to follow in total, commits the part it has not already committed, and that commitment lands a few months later. The size depends on its reaction assumption and its aggression. The delay shortens as aggression rises.
Suppliers drift
Input cost moves a little and noisily every month, on top of anything a supplier lever did. It is small, it compounds, and it is the reason a twelve month margin forecast is never flat.
Customers churn and new logos arrive
Segments move as mass, with only the part of each segment whose term has come up able to act on a price change. Named accounts decide one at a time, on their own contract clock. New business is worked out separately from marketing, selling power, quality, satisfaction, market growth and price.
Sales capacity and ramp
Ramping reps age by a month and start carrying quota when they finish. Attainment is what was booked against quota times reps. Three months under target starts a streak, and a rep who cannot reach the number is more likely to leave. Replacing one costs money now and a full ramp before it costs nothing.
The books close
Revenue is accounts times revenue per account times the price each is actually paying, plus surviving named accounts, less whatever a drifting channel partner took with them. Cost of goods is volume times one minus gross margin times the supplier index. Operating cost is people plus marketing plus retention plus product spend plus compliance. Then operating profit, then cash.
People, morale and attrition
Utilisation is revenue against what the current headcount can carry. Strain pulls quality down, quality pulls satisfaction down behind it, morale follows workload and pay, and attrition follows morale. Leavers are backfilled unless the scenario froze hiring, and the backfill costs money before it restores capacity.
The watchers check their thresholds
Regulator, investor and partners do nothing at all until a line is crossed. Then a review opens and takes further price moves off the table, or the funding conversation changes, or a partner quietly starts leading with somebody else.
The part everybody gets wrong
Elasticity is split forty sixty, and that is not an arbitrary choice
When you raise price you lose two different things. You lose some of the customers you have, and you fail to win some of the customers you would have won. Most models collapse both into one number and then wonder why the first year looks nothing like the steady state.
Counterfirm splits it. Existing customers carry forty percent of the stated elasticity, and they carry it through churn. New business carries the other sixty percent, because a buyer with no switching cost to pay is the most price sensitive person in the market.
The two halves reproduce the elasticity you stated in the long run, because a customer base settles where new business divided by churn settles. Raise price, churn rises a little and new logos fall a lot, and the account count drifts to the new equilibrium over a year or more. That is why the profit line and the customer line in a price brief point in opposite directions for the first few months.
Contracts
Only the customers whose term came up can react
A segment does not repay a price rise the month you announce it. Each month, the share of that segment whose term has come up moves to the new price, and the rest keep paying what they were paying. The average price actually being paid is tracked separately from the price on your list.
The same applies to churn. A locked share of revenue cannot act at all this month, and what is left responds to the gap between what it pays and what the alternatives cost, damped by switching cost. A price led segment has a higher elasticity multiplier, lower switching cost and shorter contracts, so it moves first and hardest. An anchored segment argues and stays.
One consequence worth saying out loud: the churn multiplier is built to be exactly one at today's conditions. The churn figure you gave the ledger is the churn the model starts from, and only the deviation from today moves it.
- New customers pay today's price, which drags the average paid up or down over time
- Quality relative to competitors and satisfaction relative to where it started both push churn independently of price
- The monthly churn rate reported back to you is accounts lost over accounts at the start of the month, not an assumption echoed back
Named accounts
Concentration becomes a month, not a slope
Named accounts are carved out of the segments so no revenue is counted twice. Each one carries its own contract clock, started at a random point in its cycle so they do not all renew in the same month.
When the clock runs out the account weighs what it now pays against what else is on the table, adjusted for quality, its own satisfaction, its switching cost and how much weight its personality puts on the existing relationship. That produces a probability of leaving, and the run draws against it.
If it stays but the probability was high, it renews and pushes back, which costs a few percent of its revenue. That is the renegotiation nobody models and everybody has lived through.
The adaptive switch
A company is not a spreadsheet that sits still while you change one cell
With adaptive management on, your own executives watch their numbers and act. Every action is gated three ways: whether the seat that owns it has the authority, whether that person's personality makes them act this early, and a cooldown so nobody pulls the same lever twice in a month.
These moves are not in your scenario. They are what this company does at these numbers, and in a price brief they are very often the reason the answer is not what the arithmetic said.
- Runway falls below the finance lead's threshold, so headcount and marketing are cut before the scenario asked for it
- Churn runs half again over baseline for two months, so the chief executive puts money into retention
- The field is three months under quota and has discount authority, so new business starts landing below list and nobody decided to cut price
- Utilisation is over one hundred and twelve percent for two months and there is cash, so operations hires
- Supplier cost is up and the pass through assumption says part of it goes to customers, so price rises again on its own
Reproducibility
A simulation you cannot reproduce is an anecdote
Monte Carlo
Each replication is a different draw from your own uncertainty
Before a replication starts it walks the ledger. For every numeric assumption with a band, it draws a value using a triangular distribution: lowest possible at the bottom of the band, most likely at the value in the ledger, highest at the top. A row with no band, or a band of zero width, is used as it stands.
A triangular draw is used on purpose. It respects the fact that you know roughly where the number sits and roughly how far it could be wrong, without pretending you know the shape of a distribution you have never measured. It also stays strictly inside the band, so a run can never quietly use a margin your record says is impossible.
That is where the tenth and the ninetieth come from. They are not error bars added to a point estimate afterwards. They are the spread of two hundred companies, each of which lived a slightly different but internally consistent year.
Fidelity
Two modes, one set of equations
| Full | Fast | |
|---|---|---|
| Used by | A scenario run you are going to read | Sweeps and side by side comparison |
| Baseline | Yes, the same twin doing nothing on the same seeds | One shared baseline for the whole set, not one per scenario |
| Agent dialogue log | Recorded on the first replication | Not recorded |
| Events and frequencies | Full list, ranked by frequency times severity | Top few only, or none |
| Replications | Two hundred by default | Fewer, because there are thousands of points |
| Equations | Identical | Identical |
The last row is the point. A sweep and a run go through exactly the same code, so they cannot disagree about the same point on the curve. Fast mode drops bookkeeping, not physics.
Per month, per replication
What is recorded
Events are collected across every replication and reported with a frequency, which is the share of runs in which the thing happened at all. A competitor match that shows up in nine runs out of ten is a plan. One that shows up in two is a risk. The brief never reports an event without that number next to it.
Point it at your own numbers
The engine is the same whether it is running on the invented example or on your profit and loss. The difference is how much of the ledger is standing on defaults, and that is the first thing the overview tells you.