Estimation under uncertainty
Give a range with its assumptions, narrow it by settling unknowns, and calibrate the next one with this one's actuals.
Predict first
Before you read: predict
ExamHall's operations lead must decide whether a seat-map view for the proctor console can ship before the spring exam season, and asks Omar how long it will take. His notes list what nobody knows yet: whether the exam centres' floor plans exist as files, how many rooms the largest centre has, and whether the map must update live during an exam.
Which reply gives the lead what the SWEBOK Guide and McConnell ask of an estimate?
The 30-second version
An estimate predicts an unknown quantity so that someone can decide. The work varies, so give a range and the assumptions that hold its ends. The range narrows as decisions and spikes remove that variation; more estimating does not narrow it. Afterwards, divide each actual by its estimate, and apply the spread of those ratios to the next estimate.
Give a range with its assumptions, narrow it by settling unknowns, and calibrate the next one with this one's actuals.
How it works
Step 1 of 13
Analogy: A well driller quoting a borehole (water-well drilling)
A householder asks a well driller how deep the new borehole will go, since drilling is priced by the metre. With no drilling log for the plot, she quotes 30 to 90 metres and names her assumption: the water sits in the same gravel as the next-door well. Re-reading the geological map that evening would not narrow the quote; a narrow test hole that finds the top of the gravel would. Her notebook pairs every past quote with the depth actually drilled, and in this valley she has gone deeper than quoted every time.
| At the borehole | In an estimate |
|---|---|
| 30 to 90 metres, "if the gravel is the neighbour's" | a range and its assumption (step 3) |
| re-reading the same map | more estimating with no decision (step 6) |
| the test hole | a spike on one unknown (step 7) |
| quoted depth beside drilled depth | actual ÷ estimate, logged (step 11) |
| deeper than quoted, every time, in this valley | parts leaning one way (step 12) |
Breaks down when: the rock does not change while she drills, but a product can be redefined mid-project. Wrong inference: "once the test hole is in, the range can only shrink." A redefined scope widens it again (step 8). A borehole also has one depth, while an estimate adds many parts, each with its own range.
In real terms: each estimate carries its low end, its high end and the assumptions behind them, and each closed task adds one actual-over-estimate ratio to the log.
Examples, run for real
EXH-2600 is a synthetic estimate of Arabic right-to-left support for the ExamHall candidate app, split into four parts in working days.
EXH-2600 · Arabic right-to-left support, candidate app · working days · ends summed
layout mirroring 3–4 known: logical CSS properties are already used
code snippets in Arabic text 2–10 open: how a snippet displays inside right-to-left text
date formats 1–4 open: which formats the exam centres want
PDF export 2–8 open: whether the PDF library joins Arabic letters
kickoff total 8–26 days (high ÷ low 3.25)
decision: one date format date formats 1–4 -> 1–2 · total 8–24 days (high ÷ low 3.00)
2-day spike on snippets code snippets in Arabic text 2–10 -> 2–4 · total 8–18 days (high ÷ low 2.25)
widest part left: PDF export 2–8; the low end assumes the library joins the letters
At kickoff three of the four parts are open, so the range runs from 8 to 26 days. Deciding one date format is a decision, not more estimating, and it trims the top. The spike settles the snippet question, and the range narrows again. Lina announces 8–18 days and names the PDF assumption that holds the low end.
MR !2900 adds the work to the team's estimate log: five closed tasks, each estimate beside its actual.
MR !2900 · estimate log, five closed tasks · working days, estimate -> actual (actual ÷ estimate)
seat-map filter 3 -> 4 (1.33) · proctor notes 5 -> 6 (1.20) · timer banner 2 -> 3 (1.50) · locale switcher 8 -> 10 (1.25) · alert sound 4 -> 5 (1.25)
over 5 of 5 · under 0 · summed plan 22 -> 28 (1.27): no overrun is offset
RTL support · announced 8–18 after the spike · actual 15 · inside the range
Every task ran over, so adding them did not cancel anything: the summed plan ran over too. The ratio column, not one remembered task, is what the next estimate is calibrated with. The script replays fixture figures; it does not measure a real team.
Try it
Answer first, then check. Nothing is saved.
Question 1 of 5
A payments-ledger team estimates multi-currency settlement in four parts, in working days: currency tables 2–3, posting rules 4–6, the bank's FX rate file import 3–15 (nobody had seen the file), and the reconciliation report 2–4. A two-day spike on a sample file, now finished, puts the import at 2–9.
What range does the team now give for the remaining work?
Question 2 of 5
A ledger team's range for replacing its reconciliation engine was 6–24 weeks at kickoff, and three months later it is still 6–24 weeks. The team has built a prototype in that time, while the matching rules, the bank file formats and the cut-over plan are still under discussion. The finance director offers the lead a full week, free of all other work, to rework the estimate and bring the range within a month either way.
What does McConnell's account of the cone of uncertainty say about the offer?
Question 3 of 5
A ledger team logs its last six features of one kind, all estimated the same way, as estimate → actual in working days: 5 → 6, 4 → 6, 4 → 5, 10 → 13, 6 → 9 and 5 → 8. A seventh feature of that kind is estimated, the same way, at 10 days. Figures are to one decimal place.
Using the log, what should the team give for the seventh feature?
Question 4 of 5
A ledger team estimates its statement export in four parts, in working days. At kickoff, when nobody had seen the bank's file format, the file writer was put at 3–13. The bank then agreed to take CSV, a format the team has written before, so the team put the CSV writer at 2–4 and announced 9–16 for the export: the statement query 3–5, the CSV writer 2–4, the delivery job 2–3 and the audit trail 2–4. Before any of it is built, the bank withdraws that agreement: it will take only its own XML format, which nobody on the team has seen.
What range does the team now give for the export?
Question 5 of 5
Four lines from a payments-ledger team's weekly estimate notes.
Which line goes against what the SWEBOK Guide or McConnell says?
Go deeper
Pro tip
Keep the estimate log where tasks close: add an "estimated" field to the ticket, and when the ticket closes, record its actual beside it. Read the ratio column before the next planning session.
Related lessons
Checked against the tools and docs as of 2026-10-02.