Product · Engine

How a decision is compiled and simulated

StoneIR compares the options of a business decision on a team's own figures. Each figure is justified before the run, each option runs on the same simulated worlds, and the result carries its precision.

Steps

Describe, give your figures, simulate, decide

1 · Describe
the decision and the options you are weighing; keeping things as they are can be one of them
2 · Give your figures
for each option, a low case and a high case of monthly net result; the gap between the two is your doubt
3 · Simulate
the options run on the same simulated worlds
4 · Decide
the winning option, the bad, median and good case of each, and how sure the engine is

Example

Hire a salesperson, or stay solo

The chart runs both options from the same starting MRR over the same horizon. The parameters are illustrative.

Hire a salesperson: monthly recurring revenue over 12 monthsBands from the 5th to the 95th and from the 25th to the 75th percentile of 2,048 simulations, 60 sample paths, the median, and a dashed line at the target of 20k EUR. At month 12: 5th percentile 6.4, median 19.7, 95th percentile 60.7k EUR.Hire a salesperson0246810120255075100MRR (k EUR)Month
Stay solo: monthly recurring revenue over 12 monthsBands from the 5th to the 95th and from the 25th to the 75th percentile of 2,048 simulations, 60 sample paths, the median, and a dashed line at the target of 20k EUR. At month 12: 5th percentile 7.0, median 15.5, 95th percentile 34.2k EUR.Stay solo0246810120255075100MRR (k EUR)Month
P(Hire a salesperson ahead of Stay solo at month 12) = 86%221 of 256, over 256 paired simulationsHire a salespersonMonth 12: P5 6.4 · P50 19.7 · P95 60.7k EURP(MRR ≥ 20k) = 49%over 2,048 simulationsStay soloMonth 12: P5 7.0 · P50 15.5 · P95 34.2k EURP(MRR ≥ 20k) = 30%over 2,048 simulationsP5–P95P25–P75MedianTarget 20k EUR60 of 256 exported paths drawn per option · seed 25 · Illustrative parameters
Data table
MRR in k EUR by month, percentiles over 2,048 simulations
MonthOptionP5P25P50P75P95
0Hire a salesperson8.08.08.08.08.0
0Stay solo8.08.08.08.08.0
1Hire a salesperson6.27.68.69.811.9
1Stay solo6.77.78.59.310.6
2Hire a salesperson5.87.79.311.214.9
2Stay solo6.47.98.910.212.4
3Hire a salesperson5.77.910.012.717.7
3Stay solo6.38.09.411.214.0
4Hire a salesperson5.78.210.814.220.4
4Stay solo6.48.210.012.115.6
5Hire a salesperson5.78.511.615.923.8
5Stay solo6.48.510.513.117.4
6Hire a salesperson5.78.912.517.727.5
6Stay solo6.48.811.114.219.3
7Hire a salesperson5.69.513.519.232.4
7Stay solo6.49.211.815.021.7
8Hire a salesperson5.810.014.621.336.8
8Stay solo6.59.512.416.223.8
9Hire a salesperson5.910.515.723.642.2
9Stay solo6.69.913.117.526.2
10Hire a salesperson5.911.116.925.948.4
10Stay solo6.710.313.918.729.0
11Hire a salesperson6.111.818.328.354.8
11Stay solo6.810.814.720.031.7
12Hire a salesperson6.412.319.731.560.7
12Stay solo7.011.215.521.634.2

Language

A closed language of assignments

A StoneIR decision is a short list of assignments, evaluated over simulated worlds and months. The line that defines cash, the monthly net flow, is mandatory.

Line 1
units = logit_choice(wtp, price, sens, alpha) * traffic
Line 2
clients = stock_flow(units, churn)
Line 3
cash = clients * (price - unit_cost) - fixed_cost - where(t == 0, investment, 0)

An expression is built from arithmetic, one comparison at a time, names and calls to a listed function. Attribute access, subscripts, lambdas and imports are refused with FORBIDDEN_SYNTAX. A name that is neither a declared figure, an option parameter nor a computed variable is refused with UNKNOWN_NAME.

Functions

28 language functions a program can call

The list holds elementary arithmetic and business mechanics: customer stock and flow, cohort survival, a buyer facing a price, adoption, queues and contagion.

exp, log, sqrt, abs, minimum, maximum, clip, where, floor, ceil, stock_flow, bass, logit_choice, erlang_c, mean_wait, abandon_below, scale_above, cumsum_t, sum_t, lag_t, ltv, poisson_pmf, sir_new, p_up_before_down, sbg_survival, sbg_churn, sbg_ltv, sbg_stock

The workspace of The Cairn offers 16 business functions, such as cash runway, a price change or a hire, grouped by area of the company.

The Cairn →

Laws

28 laws for an uncertain figure

16 laws describe a single value, such as a range, a most likely value or a heavy tail. 12 describe a monthly path, such as a random walk, regimes, jumps or your own series resampled by blocks. A law outside the list is refused with LAW_UNKNOWN.

Justification

What justifies a number before the run

A validator walks the numeric leaves of the decision and asks each for one justification. A figure without one is refused by name, including a figure that looks reasonable. A number written inside the program is refused with LITERAL_NUMBER, apart from small structural constants.

A quote
the figure is copied from what the client wrote, times a declared conversion such as a percentage.
A dated source
a field of an entry in the source store, dated no later than the decision.
A declared default
a product default of the frame of the decision, such as the horizon, stated to the client.
A grid
an option parameter on a declared grid around another justified figure; a winner at the edge is flagged.
A logical bound
zero or one as the bound of a share, or as the switch that tells two options apart.

A missing figure is declared as unknown and stays a question to the client. Figures come from you, and results from the simulation. StoneIR reports count zero language model calls.

Dates

A decision dated, and replayed as computed

A decision can carry its date. A series point dated after it is refused, so a past result replays as it was computed.

Limits

A result depends on the ranges you declare

A range that is too narrow hides your doubt, and a range that is too wide leaves no winner. The spread of your figures is separate from predictive accuracy. How we process your data is in the privacy policy.

How precision is shown →

The proof protocol →