Fermi Estimation
Decomposes a complex unknown into components that can each be estimated, then combines them into a rapid order-of-magnitude answer with explicit upper and lower bounds. It produces a defensible ballpark and a record of every assumption behind it. It does not produce precision: when a decision needs better than a factor of two, collect real data instead.
When to Use
- Making a quick estimate: market sizing, resource planning, a feasibility check.
- Bounding an unknown with upper and lower limits before deciding.
- Sanity-checking a strategic assumption or someone else's number.
- Building a structural estimate to compare against a base rate in a forecast.
- The user mentions Fermi estimation, back-of-envelope calculation, order of magnitude, ballpark estimate, or triangulation.
Example
Question: How many piano tuners are in Chicago?
Decomposition:
- Chicago ~3M people / 3 per household = 1M households
- ~1 in 20 has a piano = 50,000 pianos, tuned once a year
- Tuner: 250 days/year x 4 tunings/day = 1,000/year
- 50,000 / 1,000 = ~50 piano tuners (actual: ~80-100, within an order of magnitude)
Procedure
Copy this checklist and track progress:
Fermi Estimation Progress:
- [ ] Step 1: Clarify the question and define the metric
- [ ] Step 2: Decompose into estimable components
- [ ] Step 3: Estimate components using anchors
- [ ] Step 4: Bound with upper/lower limits
- [ ] Step 5: Calculate and sanity-check
- [ ] Step 6: Triangulate with an alternate path
Step 1: Clarify the question and define the metric
Restate the question precisely (units, scope, timeframe). Identify what decision hinges on the estimate (is a directional answer enough? an order of magnitude?). See templates/template.md for the clarification framework.
Step 2: Decompose into estimable components
Break the unknown into a product or quotient of knowable parts. Choose a decomposition strategy (top-down, bottom-up, dimensional analysis). See templates/template.md for decomposition patterns.
Step 3: Estimate components using anchors
Ground each estimate in a known quantity (population, physical constants, market sizes, direct experience). Prefer a searched figure to a remembered one: one or two web_search queries per component, source recorded. State assumptions explicitly. See references/methodology.md for anchor sources and calibration.
Step 4: Bound with upper and lower limits
Calculate optimistic (upper) and pessimistic (lower) bounds to bracket the answer. Check whether the decision changes across the range. See references/methodology.md for constraint-based bounding.
Step 5: Calculate and sanity-check
Compute the estimate and round to 1-2 significant figures. Sanity-check against reality: does the answer pass the smell test? See templates/template.md for validation criteria.
Step 6: Triangulate with an alternate path
Re-estimate using a different decomposition. Check whether both paths land in the same order of magnitude. Score the work against assets/evaluators/rubric_estimation_fermi.json. Minimum standard: average score >= 3.5.
Common Patterns
Pattern 1: Market sizing (TAM/SAM/SOM)
- Decomposition: Total population -> Target segment -> Addressable -> Reachable -> Price point
- Anchors: Census data, industry reports, analogous markets, penetration rates
- Bounds: Optimistic (high penetration, premium pricing) vs pessimistic (low penetration, discount pricing)
- Sanity check: Compare to public company revenues in the space and to VC market-size estimates
- Example: E-commerce TAM = US population x online shopping % x average spend/year
Pattern 2: Infrastructure capacity
- Decomposition: Users -> Requests per user -> Compute/storage per request -> Overhead
- Anchors: Similar services, known capacity (instance limits), load-testing data
- Bounds: Peak (Black Friday) vs average load; growth trajectory (2x/year vs 10x/year)
- Sanity check: Cost per user should be < LTV; compare to public cloud bills at similar scale
- Example: Servers needed = (DAU x requests/user x ms/request) / (instance capacity x utilization)
Pattern 3: Staffing and headcount
- Decomposition: Work to be done (features, tickets, customers) -> Productivity per person -> Overhead (meetings, support)
- Anchors: Industry benchmarks (engineers per X users, support agents per Y customers), team velocity, hiring timelines
- Bounds: Experienced team (high productivity) vs new team (ramp time); aggressive timeline vs sustainable pace
- Sanity check: Headcount growth should track the revenue growth curve; compare to peers at similar scale
- Example: Engineers needed = (story points in roadmap / velocity per engineer) + 20% overhead
Pattern 4: Financial projections
- Decomposition: Revenue = Users x Conversion rate x ARPU; Costs = COGS + Sales/Marketing + R&D + G&A
- Anchors: Cohort data, industry CAC/LTV benchmarks, comparable company metrics, historical growth
- Bounds: Bull case (high growth, efficient scaling) vs bear case (slow growth, rising costs)
- Sanity check: Margins should approach industry norms at scale; growth should follow an S-curve, not an exponential forever
- Example: Year 2 revenue = Year 1 revenue x (1 + growth rate) x (1 - churn)
Pattern 5: Impact assessment
- Decomposition: Total impact = Units affected x Impact per unit x Duration
- Anchors: Emission factors (kg CO2/kWh), conversion rates (program -> behaviour change), precedent studies
- Bounds: Conservative (low adoption, small effect) vs optimistic (high adoption, large effect)
- Sanity check: Impact should scale linearly or sub-linearly (diminishing returns); compare to similar interventions
- Example: Carbon saved = (Users switching x Miles driven/year x Emissions/mile) - Baseline
Guardrails
- State assumptions explicitly. Every Fermi estimate rests on assumptions. Make them visible ("assuming 250 workdays/year", "if conversion is ~3%"). Unstated assumptions create false precision.
- Aim for order of magnitude, not precision. The goal is 10^X, not X.XX. Round to 1-2 significant figures (50 not 47.3, 3M not 2,847,291). If the decision needs precision, get real data instead.
- Decompose until components are estimable. Break down until you reach quantities you can estimate from knowledge and experience. If a component is still "how would I know that?", decompose further.
- Use multiple paths (triangulation). Estimate the same quantity via different decompositions (top-down vs bottom-up, supply-side vs demand-side). If paths agree within a factor of 3, confidence increases. If they differ by 10x or more, investigate which decomposition is flawed.
- Bound the answer. Calculate optimistic and pessimistic cases to bracket reality. If the decision holds across the range, the bounds matter less. If the decision flips, invest in a better estimate.
- Sanity-check against reality. Compare to known quantities, use dimensional analysis (units should cancel), and check extreme cases (what if everyone did X? does it break physics?).
- Calibrate on known problems. Practise on questions with verifiable answers to find personal biases (overestimating? underestimating? anchoring?).
- Acknowledge uncertainty ranges. Express estimates as ranges when appropriate ("10-100k users", "likely $1-5M").
Pitfalls
- Anchoring on the wrong number: an irrelevant or biased starting point. If someone asks "Is it 1 million?" you anchor there for no reason.
- Double-counting: including the same quantity twice in the decomposition (counting both businesses and employees when businesses already include employees).
- Unit errors: mixing per-day and per-year, confusing millions and billions, wrong currency conversion. Always check units.
- Survivor bias: estimating from successful cases (average startup revenue from unicorns, ignoring failures).
- Linear extrapolation: assuming linear growth when it is exponential, or vice versa. Growth rates change over time.
- Ignoring constraints: physical limits and economic limits (a market cannot grow faster than GDP forever).
Quick Reference
Key resources:
- templates/template.md: clarification framework, decomposition strategies, estimation template, sanity-check criteria
- references/methodology.md: anchoring techniques, bounding methods, triangulation approaches, calibration exercises
- assets/evaluators/rubric_estimation_fermi.json: quality criteria for decomposition, assumptions, bounds, sanity checks
Common anchors:
- Demographics: US population ~330M, households ~130M, labour force ~165M; world population ~8B, urban ~55%, internet users ~5B
- Business: Fortune 500 revenue $100k to $600B (median ~$30B); startup valuations seed ~$5-10M, Series A ~$30-50M, unicorn >$1B; SaaS CAC ~$1-5k, LTV/CAC >3, churn <5%/year
- Technology: a cloud VM ~10k requests/sec, object storage ~$0.023/GB/month; mobile app ~5-10 screens/day per user, 50-100 API calls/session; website ~2-3 pages/session, 1-2 min sessions
- Physical: person ~70kg, 2000 kcal/day, 8 hours sleep; car ~25 mpg, 12k miles/year, $30k new, 200k-mile lifetime; house ~2000 sq ft, $300k median US, 30-year mortgage
- Conversion factors: 1 year ~ 250 workdays ~ 2000 work hours; 1 million seconds ~ 11.5 days, 1 billion seconds ~ 32 years; 1 mile ~ 1.6 km, 1 kg ~ 2.2 lb, 1 gallon ~ 3.8 litres
Decomposition strategies:
- Top-down: start with the total population and filter down (US population -> car owners -> EV buyers)
- Bottom-up: start with a unit and scale up (one store's revenue x number of stores)
- Rate x Time: flow rate x duration (customers/day x days/year)
- Density x Area/Volume: concentration x space (people/sq mile x city area)
- Analogous scaling: a known similar system, adjusted for size (competitor revenue x our market share)
Typical estimation time: simple question (1-2 levels) 3-5 minutes; market sizing (3-4 levels) 10-15 minutes; complex business case (several metrics, triangulation) 20-30 minutes.
When to escalate: the decision needs better than a factor-of-2 uncertainty; the estimate spans more than two orders of magnitude even with bounds; no reasonable decomposition path exists; stakeholders need confidence intervals and statistical rigour. Then invest in data collection, detailed modelling, or expert consultation.
Inputs required: the question (units, scope), the decision context (required precision), known anchors.
Outputs produced: estimation-fermi.md with question, decomposition, assumptions, calculation, bounds, sanity check, triangulation, and the final estimate with its range.
Verification
Two checks close the step: the two triangulation paths agree within a factor of 3 (if they differ by 10x or more, one decomposition is wrong; find which before handing anything forward), and the self-score against assets/evaluators/rubric_estimation_fermi.json averages 3.5 or higher.
1---2name: estimation-fermi-23description: Decompose an unknown into parts and bound the estimate.4license: MIT5---6# Fermi Estimation78Decomposes a complex unknown into components that can each be estimated, then combines them into a rapid order-of-magnitude answer with explicit upper and lower bounds. It produces a defensible ballpark and a record of every assumption behind it. It does not produce precision: when a decision needs better than a factor of two, collect real data instead.910## When to Use1112- Making a quick estimate: market sizing, resource planning, a feasibility check.13- Bounding an unknown with upper and lower limits before deciding.14- Sanity-checking a strategic assumption or someone else's number.15- Building a structural estimate to compare against a base rate in a forecast.16- The user mentions Fermi estimation, back-of-envelope calculation, order of magnitude, ballpark estimate, or triangulation.1718## Example1920**Question**: How many piano tuners are in Chicago?2122**Decomposition**:231. Chicago ~3M people / 3 per household = 1M households242. ~1 in 20 has a piano = 50,000 pianos, tuned once a year253. Tuner: 250 days/year x 4 tunings/day = 1,000/year264. 50,000 / 1,000 = **~50 piano tuners** (actual: ~80-100, within an order of magnitude)2728## Procedure2930Copy this checklist and track progress:3132```33Fermi Estimation Progress:34- [ ] Step 1: Clarify the question and define the metric35- [ ] Step 2: Decompose into estimable components36- [ ] Step 3: Estimate components using anchors37- [ ] Step 4: Bound with upper/lower limits38- [ ] Step 5: Calculate and sanity-check39- [ ] Step 6: Triangulate with an alternate path40```4142**Step 1: Clarify the question and define the metric**4344Restate the question precisely (units, scope, timeframe). Identify what decision hinges on the estimate (is a directional answer enough? an order of magnitude?). See [templates/template.md](templates/template.md#clarification-template) for the clarification framework.4546**Step 2: Decompose into estimable components**4748Break the unknown into a product or quotient of knowable parts. Choose a decomposition strategy (top-down, bottom-up, dimensional analysis). See [templates/template.md](templates/template.md#decomposition-strategies) for decomposition patterns.4950**Step 3: Estimate components using anchors**5152Ground each estimate in a known quantity (population, physical constants, market sizes, direct experience). Prefer a searched figure to a remembered one: one or two `web_search` queries per component, source recorded. State assumptions explicitly. See [references/methodology.md](references/methodology.md#anchoring-techniques) for anchor sources and calibration.5354**Step 4: Bound with upper and lower limits**5556Calculate optimistic (upper) and pessimistic (lower) bounds to bracket the answer. Check whether the decision changes across the range. See [references/methodology.md](references/methodology.md#bounding-techniques) for constraint-based bounding.5758**Step 5: Calculate and sanity-check**5960Compute the estimate and round to 1-2 significant figures. Sanity-check against reality: does the answer pass the smell test? See [templates/template.md](templates/template.md#sanity-check-template) for validation criteria.6162**Step 6: Triangulate with an alternate path**6364Re-estimate using a different decomposition. Check whether both paths land in the same order of magnitude. Score the work against [assets/evaluators/rubric_estimation_fermi.json](assets/evaluators/rubric_estimation_fermi.json). **Minimum standard**: average score >= 3.5.6566## Common Patterns6768**Pattern 1: Market sizing (TAM/SAM/SOM)**69- **Decomposition**: Total population -> Target segment -> Addressable -> Reachable -> Price point70- **Anchors**: Census data, industry reports, analogous markets, penetration rates71- **Bounds**: Optimistic (high penetration, premium pricing) vs pessimistic (low penetration, discount pricing)72- **Sanity check**: Compare to public company revenues in the space and to VC market-size estimates73- **Example**: E-commerce TAM = US population x online shopping % x average spend/year7475**Pattern 2: Infrastructure capacity**76- **Decomposition**: Users -> Requests per user -> Compute/storage per request -> Overhead77- **Anchors**: Similar services, known capacity (instance limits), load-testing data78- **Bounds**: Peak (Black Friday) vs average load; growth trajectory (2x/year vs 10x/year)79- **Sanity check**: Cost per user should be < LTV; compare to public cloud bills at similar scale80- **Example**: Servers needed = (DAU x requests/user x ms/request) / (instance capacity x utilization)8182**Pattern 3: Staffing and headcount**83- **Decomposition**: Work to be done (features, tickets, customers) -> Productivity per person -> Overhead (meetings, support)84- **Anchors**: Industry benchmarks (engineers per X users, support agents per Y customers), team velocity, hiring timelines85- **Bounds**: Experienced team (high productivity) vs new team (ramp time); aggressive timeline vs sustainable pace86- **Sanity check**: Headcount growth should track the revenue growth curve; compare to peers at similar scale87- **Example**: Engineers needed = (story points in roadmap / velocity per engineer) + 20% overhead8889**Pattern 4: Financial projections**90- **Decomposition**: Revenue = Users x Conversion rate x ARPU; Costs = COGS + Sales/Marketing + R&D + G&A91- **Anchors**: Cohort data, industry CAC/LTV benchmarks, comparable company metrics, historical growth92- **Bounds**: Bull case (high growth, efficient scaling) vs bear case (slow growth, rising costs)93- **Sanity check**: Margins should approach industry norms at scale; growth should follow an S-curve, not an exponential forever94- **Example**: Year 2 revenue = Year 1 revenue x (1 + growth rate) x (1 - churn)9596**Pattern 5: Impact assessment**97- **Decomposition**: Total impact = Units affected x Impact per unit x Duration98- **Anchors**: Emission factors (kg CO2/kWh), conversion rates (program -> behaviour change), precedent studies99- **Bounds**: Conservative (low adoption, small effect) vs optimistic (high adoption, large effect)100- **Sanity check**: Impact should scale linearly or sub-linearly (diminishing returns); compare to similar interventions101- **Example**: Carbon saved = (Users switching x Miles driven/year x Emissions/mile) - Baseline102103## Guardrails1041051. **State assumptions explicitly.** Every Fermi estimate rests on assumptions. Make them visible ("assuming 250 workdays/year", "if conversion is ~3%"). Unstated assumptions create false precision.1062. **Aim for order of magnitude, not precision.** The goal is 10^X, not X.XX. Round to 1-2 significant figures (50 not 47.3, 3M not 2,847,291). If the decision needs precision, get real data instead.1073. **Decompose until components are estimable.** Break down until you reach quantities you can estimate from knowledge and experience. If a component is still "how would I know that?", decompose further.1084. **Use multiple paths (triangulation).** Estimate the same quantity via different decompositions (top-down vs bottom-up, supply-side vs demand-side). If paths agree within a factor of 3, confidence increases. If they differ by 10x or more, investigate which decomposition is flawed.1095. **Bound the answer.** Calculate optimistic and pessimistic cases to bracket reality. If the decision holds across the range, the bounds matter less. If the decision flips, invest in a better estimate.1106. **Sanity-check against reality.** Compare to known quantities, use dimensional analysis (units should cancel), and check extreme cases (what if everyone did X? does it break physics?).1117. **Calibrate on known problems.** Practise on questions with verifiable answers to find personal biases (overestimating? underestimating? anchoring?).1128. **Acknowledge uncertainty ranges.** Express estimates as ranges when appropriate ("10-100k users", "likely $1-5M").113114## Pitfalls115116- **Anchoring on the wrong number**: an irrelevant or biased starting point. If someone asks "Is it 1 million?" you anchor there for no reason.117- **Double-counting**: including the same quantity twice in the decomposition (counting both businesses and employees when businesses already include employees).118- **Unit errors**: mixing per-day and per-year, confusing millions and billions, wrong currency conversion. Always check units.119- **Survivor bias**: estimating from successful cases (average startup revenue from unicorns, ignoring failures).120- **Linear extrapolation**: assuming linear growth when it is exponential, or vice versa. Growth rates change over time.121- **Ignoring constraints**: physical limits and economic limits (a market cannot grow faster than GDP forever).122123## Quick Reference124125**Key resources:**126127- **[templates/template.md](templates/template.md)**: clarification framework, decomposition strategies, estimation template, sanity-check criteria128- **[references/methodology.md](references/methodology.md)**: anchoring techniques, bounding methods, triangulation approaches, calibration exercises129- **[assets/evaluators/rubric_estimation_fermi.json](assets/evaluators/rubric_estimation_fermi.json)**: quality criteria for decomposition, assumptions, bounds, sanity checks130131**Common anchors:**132133- Demographics: US population ~330M, households ~130M, labour force ~165M; world population ~8B, urban ~55%, internet users ~5B134- Business: Fortune 500 revenue $100k to $600B (median ~$30B); startup valuations seed ~$5-10M, Series A ~$30-50M, unicorn >$1B; SaaS CAC ~$1-5k, LTV/CAC >3, churn <5%/year135- Technology: a cloud VM ~10k requests/sec, object storage ~$0.023/GB/month; mobile app ~5-10 screens/day per user, 50-100 API calls/session; website ~2-3 pages/session, 1-2 min sessions136- Physical: person ~70kg, 2000 kcal/day, 8 hours sleep; car ~25 mpg, 12k miles/year, $30k new, 200k-mile lifetime; house ~2000 sq ft, $300k median US, 30-year mortgage137- Conversion factors: 1 year ~ 250 workdays ~ 2000 work hours; 1 million seconds ~ 11.5 days, 1 billion seconds ~ 32 years; 1 mile ~ 1.6 km, 1 kg ~ 2.2 lb, 1 gallon ~ 3.8 litres138139**Decomposition strategies:**140141- **Top-down**: start with the total population and filter down (US population -> car owners -> EV buyers)142- **Bottom-up**: start with a unit and scale up (one store's revenue x number of stores)143- **Rate x Time**: flow rate x duration (customers/day x days/year)144- **Density x Area/Volume**: concentration x space (people/sq mile x city area)145- **Analogous scaling**: a known similar system, adjusted for size (competitor revenue x our market share)146147**Typical estimation time:** simple question (1-2 levels) 3-5 minutes; market sizing (3-4 levels) 10-15 minutes; complex business case (several metrics, triangulation) 20-30 minutes.148149**When to escalate:** the decision needs better than a factor-of-2 uncertainty; the estimate spans more than two orders of magnitude even with bounds; no reasonable decomposition path exists; stakeholders need confidence intervals and statistical rigour. Then invest in data collection, detailed modelling, or expert consultation.150151**Inputs required:** the question (units, scope), the decision context (required precision), known anchors.152153**Outputs produced:** `estimation-fermi.md` with question, decomposition, assumptions, calculation, bounds, sanity check, triangulation, and the final estimate with its range.154155## Verification156157Two checks close the step: the two triangulation paths agree within a factor of 3 (if they differ by 10x or more, one decomposition is wrong; find which before handing anything forward), and the self-score against `assets/evaluators/rubric_estimation_fermi.json` averages 3.5 or higher.