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.

640 runs of one scenario

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

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

07

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.

08

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.

09

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.

+60%price down 30%price up 60%profit

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.

What happens if we lose our largest customer

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

Run the same scenario both ways

Reproducibility

A simulation you cannot reproduce is an anecdote

640 runs of one scenario
Every random draw in the engine comes from one small seeded generator, and nothing calls the system random number function. Replication one uses the scenario seed, replication two uses that seed plus a fixed stride, and so on. The same twin, the same levers and the same seed give the identical answer next week, next month, and on somebody else's server.

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.

How the bands are set

month 0month 12best tenthworst tenth

Fidelity

Two modes, one set of equations

FullFast
Used byA scenario run you are going to readSweeps and side by side comparison
BaselineYes, the same twin doing nothing on the same seedsOne shared baseline for the whole set, not one per scenario
Agent dialogue logRecorded on the first replicationNot recorded
Events and frequenciesFull list, ranked by frequency times severityTop few only, or none
ReplicationsTwo hundred by defaultFewer, because there are thousands of points
EquationsIdenticalIdentical

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

20
Metrics captured each month
Revenue, cost of goods, gross profit, operating cost, operating profit, cash, customers, churn, new logos, price, competitor price, quality, satisfaction, headcount, reps, utilisation, morale, share, runway and margin
3
Numbers per metric per month
The median across replications, the tenth percentile and the ninetieth
1
Seed per run
Stored with the run, so the answer can be reproduced exactly

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.

Build a twinThe method behind the equations