The Tech Lead Handbook · Quality and Delivery

Forecasting Delivery Honestly

Replace single-date guesses with probabilistic forecasts from the team's own throughput, using a Monte Carlo simulation you can run.

Scenario

Example team: product asks the payments team when the 60 remaining items of a migration will be done. The tech lead adds up estimates and says "eight weeks". It takes fourteen. The next time, the lead pads the estimate to sixteen weeks; product goes around the team.

What you see on the team

  • Single-date commitments that are usually missed.
  • Estimates padded or argued down depending on politics.
  • Long estimation meetings for every item.
  • Loss of trust between engineering and product.

The common mistake

Giving a single date from summed estimates, as if every item will go to plan, instead of a range with a probability.

Why it happens

Summing estimates ignores variation: some items take far longer, new work appears, people are interrupted. Single numbers sound confident, so they get requested and given. A forecast based on what the team actually finished in past weeks already includes all of that messiness.

The playbook

Use throughput history. Count items finished per week over the last 10–20 weeks.

Run a Monte Carlo simulation: many times, randomly sample past weeks until the remaining work is done, and record how many weeks each run took. The Monte Carlo method turns your history into a distribution of outcomes:

Monte Carlo: when will 60 items be done?Try it yourself
import random

random.seed(42)
# Items finished per week, last 14 weeks (example data)
history = [5, 7, 3, 6, 8, 4, 6, 2, 7, 5, 6, 9, 4, 5]
remaining = 60
growth = 0.10   # expect ~10% extra items to be discovered along the way

def one_run():
    todo = remaining * (1 + growth)
    weeks = 0
    while todo > 0:
        todo -= random.choice(history)
        weeks += 1
    return weeks

runs = sorted(one_run() for _ in range(10_000))
for p in (50, 70, 85, 95):
    print(f"{p}% likely done within {runs[int(len(runs) * p / 100) - 1]} weeks")
print(f"\nSummed-estimate answer the lead gave: 8 weeks -> "
      f"chance of hitting it: {sum(r <= 8 for r in runs) / len(runs):.0%}")

Output

50% likely done within 12 weeks
70% likely done within 13 weeks
85% likely done within 14 weeks
95% likely done within 14 weeks

Summed-estimate answer the lead gave: 8 weeks -> chance of hitting it: 0%

Communicate a range with confidence levels: "50% likely within 12 weeks; 85% likely within 14."

Re-forecast weekly as work finishes and scope changes — it costs seconds.

Reduce variation to tighten forecasts: smaller items, fewer items in parallel, less unplanned work.

What to say

To product:

"Based on the last 14 weeks, there's a 50% chance we finish within 12 weeks and an 85% chance within 14. If you need a date to commit externally, I'd use the 14-week date. I'll update this every Friday — if scope grows, you'll see it move."

Trade-offs

  • Needs stable history; for a new team, use a range from a similar team and update quickly.
  • Item sizes must be roughly comparable; slicing work thinly (previous lesson) helps.
  • Some stakeholders want one date; give the high-confidence date and explain it's a commitment level, not a guess.

Signals it's working

  • Commitments are made at a stated confidence and are usually met.
  • Estimation meetings get shorter; the team spends time slicing, not arguing points.
  • Product checks the weekly forecast instead of asking for new estimates.
  • Forecast ranges narrow as the team's flow becomes more predictable.

Key points

  • Summed estimates ignore variation and are usually optimistic.
  • Use the team's own throughput history and Monte Carlo simulation to forecast a range.
  • Communicate dates with confidence levels; re-forecast weekly.
  • Tighten forecasts by reducing variation: smaller items, less work in progress, less unplanned work.

Practice questions

Why do summed estimates tend to produce missed dates?

Answer

They assume each item goes to plan and ignore variation, interruptions and newly discovered work; real delivery has a long tail, so the sum is closer to a best case than a likely case.

Describe how a Monte Carlo delivery forecast works in two sentences.

Answer

Take the team's weekly throughput history and, thousands of times, randomly sample past weeks until the remaining work is done, recording how many weeks each run needed. The distribution of results gives dates at chosen confidence levels, e.g. 50% and 85%.

Product needs one date for a customer. What do you give them?

Answer

A high-confidence date from the forecast (e.g. the 85th percentile), stated as a commitment level, plus a weekly re-forecast so changes in scope or progress are visible early.

Open in the app to mark lessons complete, take notes and track your progress.