Tool · For nonprofits and funders

Cost-Effectiveness Model Kit

Build a cost-per-outcome model with a low, likely and high value for every input, run 5,000 simulated draws in your browser, and see the range of results and which inputs drive them.

Live

Build a cost-effectiveness model

5,000 simulated draws, run in your browser. Nothing is sent anywhere.

Name one unit of the outcome, like “meal served” or “extra school day attended”.
Total program cost ($)

Everything the program spends, including staff, systems and overhead.

People reached (people)

How many people the program reaches.

Chance it works as intended (%)

From 0 to 100. Your estimate that the program has its effect at all.

Effect per person, per year (outcome units)

Units of the outcome each person gains in each year the effect lasts.

Years the effect lasts (years)

For a one-time outcome, enter 1 in all three boxes.

Share that would have happened anyway (%)

From 0 to 99. How much of the outcome would have happened without the program.

One value. How much less each later year of effect counts: at 4%, the second year counts about 96% as much as the first. Enter 0 to count every year the same. Whether the future should count less at all is Open Problem 13.
The same seed always gives the same draws. Change it to see how much the results move by chance alone.

Enter a low, likely and high value for every input, or load the example, then run the model.

How it works. Cost per outcome = total cost ÷ (people reached × chance it works × effect per person per year × discounted years × the share that would not have happened anyway). Each draw picks every ranged input from a triangular distribution between your low and high values, peaking at likely. The first year of effect counts in full and each later year counts 1 ÷ (1 + discount rate) as much as the one before.

Its limits.

  • The interval only reflects the uncertainty you entered. Ranges that are too narrow give an interval that is too narrow.
  • Inputs are drawn independently. In real programs some move together, such as cost and people reached, which can make the true range wider or narrower.
  • The chance it works scales the outcome, so the result is an expected value. It hides the real chance of achieving nothing.
  • It counts one outcome. Side effects, harms and benefits to people the program doesn’t reach directly are left out.
  • Work at the source end of the depth scale rarely fits a model like this: Open Problem 3, Measuring the Source.

How it works

A cost-effectiveness model asks one question: how much does each unit of good cost? The kit breaks that question into parts you can reason about, and asks for a low, likely and high value for each:

  • total program cost
  • people reached
  • the chance the program works as intended
  • the effect per person, per year, in an outcome unit you name
  • how many years the effect lasts
  • the share of the outcome that would have happened anyway

One more input, the annual discount rate, takes a single value.

The kit then runs the model 5,000 times. Each run, or draw, picks every input at random between its low and high values, most often near likely. The spread of the 5,000 answers shows how uncertain the result is, given what you entered.

You can save models in your browser, load them again, download the inputs and results as a CSV file, or start from a clearly fictional example.

The method

The formula. Cost per outcome = total cost ÷ (people reached × chance it works × effect per person per year × discounted years × the share that would not have happened anyway).

Discounting. The first year of effect counts in full. Each later year counts 1 ÷ (1 + rate) as much as the one before, so at 4% the second year counts about 96% as much as the first. A rate of 0 counts every year the same. Whether future outcomes should count less at all is Open Problem 13, Discounting the Future.

The draws. Each input follows a triangular distribution: it never falls below low or above high, and it is most likely near likely. Draws come from a seeded random number generator, so the same inputs and seed always give exactly the same results, and anyone can reproduce your numbers. Changing the seed shows how much the results move by chance alone.

The outputs. The headline is the median cost per outcome, the middle of the 5,000 draws, with a 90% interval: 90% of draws fall between its two ends. The histogram shows how the draws spread. The sensitivity chart takes one input at a time from its low to its high value, with every other input at likely, and shows how far the cost per outcome moves. The longest bar is the input where better evidence would help most.

What it isn’t

It isn’t a measurement. The model can only be as good as its inputs, and the interval only reflects the uncertainty you put in. Ranges that are too narrow give results that look surer than they are.

It makes simplifications you should know about. Inputs are drawn independently, though in real programs some move together. The chance of working is treated as a scaling factor, so the result is an expected value that hides the real chance of achieving nothing. It counts one outcome, so side effects, harms and spillovers to other people are left out.

A cost per outcome also isn’t the whole picture. Overhead ratios tell you even less, which is the Overhead Myth, but cost-effectiveness favors what can be counted. Work at the source end of the depth scale rarely fits a model like this one. That is the Measurement Gap at its widest, and Open Problem 3, Measuring the Source.