Fermi Estimation
Table of Contents
Example
Question: How many piano tuners are in Chicago?
Decomposition:
- Chicago ~3M people ÷ 3/household = 1M households
- ~1 in 20 has piano = 50,000 pianos, tuned once/year
- Tuner: 250 days/year × 4 tunings/day = 1,000/year
- 50,000 ÷ 1,000 = ~50 piano tuners (Actual: ~80-100, within order of magnitude)
Workflow
Copy this checklist and track your progress:
Fermi Estimation Progress:
- [ ] Step 1: Clarify the question and define 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 alternate path
Step 1: Clarify the question and define metric
Restate question precisely (units, scope, timeframe). Identify what decision hinges on estimate (directional answer sufficient? order of magnitude?). See resources/template.md for question clarification framework.
Step 2: Decompose into estimable components
Break unknown into product/quotient of knowable parts. Choose decomposition strategy (top-down, bottom-up, dimensional analysis). See resources/template.md for decomposition patterns.
Step 3: Estimate components using anchors
Ground estimates in known quantities (population, physical constants, market sizes, personal experience). State assumptions explicitly. See resources/methodology.md for anchor sources and calibration.
Step 4: Bound with upper/lower limits
Calculate optimistic (upper) and pessimistic (lower) bounds to bracket answer. Check if decision changes across range. See resources/methodology.md for constraint-based bounding.
Step 5: Calculate and sanity-check
Compute estimate, round to 1-2 significant figures. Sanity-check against reality (does answer pass smell test?). See resources/template.md for validation criteria.
Step 6: Triangulate with alternate path
Re-estimate using different decomposition to validate. Check if both paths yield same order of magnitude. Validate using resources/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 space, VC market size estimates
- Example: E-commerce TAM = US population × online shopping % × avg spend/year
Pattern 2: Infrastructure Capacity
- Decomposition: Users → Requests per user → Compute/storage per request → Overhead
- Anchors: Similar services (Instagram, Twitter), known capacity (EC2 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 of similar scale
- Example: Servers needed = (DAU × requests/user × ms/request) ÷ (instance capacity × utilization)
Pattern 3: Staffing/Headcount
- Decomposition: Work to be done (features, tickets, customers) → Productivity per person → Overhead (meetings, support)
- Anchors: Industry benchmarks (engineer per X users, support agent per Y customers), team velocity, hiring timelines
- Bounds: Experienced team (high productivity) vs New team (ramp time), Aggressive timeline (crunch) vs Sustainable pace
- Sanity check: Headcount growth should match 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 × Conversion rate × 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 rate should follow S-curve not exponential forever
- Example: Year 2 revenue = Year 1 revenue × (1 + growth rate) × (1 - churn)
Pattern 5: Impact Assessment
- Decomposition: Total impact = Units affected × Impact per unit × Duration
- Anchors: Emission factors (kg CO2/kWh), conversion rates (program → behavior 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 × Miles driven/year × Emissions/mile) - Baseline
Guardrails
State assumptions explicitly: Every Fermi estimate rests on assumptions. Make them visible ("Assuming 250 workdays/year", "If conversion rate ~3%"). Unstated assumptions create false precision.
Aim for order of magnitude, not precision: 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/experience. If a component is still "how would I know that?", decompose further.
Use multiple paths (triangulation): Estimate same quantity via different decompositions (top-down vs bottom-up, supply-side vs demand-side). If paths agree within factor of 3, confidence increases. If they differ by 10x+, investigate which decomposition is flawed.
Bound the answer: Calculate optimistic and pessimistic cases to bracket reality. If the decision holds across the range, 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 correctly), and check extreme cases (what if everyone did X? does it break physics?).
Calibrate on known problems: Practice on questions with verifiable answers to identify personal biases (overestimate? underestimate? anchoring?).
Acknowledge uncertainty ranges: Express estimates as ranges when appropriate ("10-100k users", "likely $1-5M").
Common pitfalls:
- ❌ Anchoring on the wrong number: Using irrelevant or biased starting point. If someone says "Is it 1 million?" you anchor there even if no reason to.
- ❌ Double-counting: Including same quantity twice in decomposition (counting both businesses and employees when businesses already includes employees).
- ❌ Unit errors: Mixing per-day and per-year, confusing millions and billions, wrong currency conversion. Always check units.
- ❌ Survivor bias: Estimating based on successful cases (average startup revenue from unicorns, not including failures).
- ❌ Linear extrapolation: Assuming linear growth when exponential (or vice versa). Growth rates change over time.
- ❌ Ignoring constraints: Physical limits (can't exceed speed of light), economic limits (market can't grow faster than GDP forever).
Quick Reference
Key resources:
- resources/template.md: Clarification framework, decomposition strategies, estimation template, sanity-check criteria
- resources/methodology.md: Anchoring techniques, bounding methods, triangulation approaches, calibration exercises
- resources/evaluators/rubric_estimation_fermi.json: Quality criteria for decomposition, assumptions, bounds, sanity checks
Common Anchors:
Demographics:
- US population: ~330M, Households: ~130M, Labor 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 metrics: CAC ~$1-5k, LTV/CAC ratio >3, Churn <5%/year
Technology:
- AWS EC2 instance: ~10k requests/sec, S3 storage: $0.023/GB/month
- Mobile app: ~5-10 screens/day per user, 50-100 API calls/session
- Website: ~2-3 pages/session, 1-2min session duration
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 lbs, 1 gallon ≈ 3.8 liters
Decomposition Strategies:
- Top-down: Start with total population, filter down (US population → Car owners → EV buyers)
- Bottom-up: Start with unit, scale up (1 store revenue × Number of stores)
- Rate × Time: Flow rate × Duration (Customers/day × Days/year)
- Density × Area/Volume: Concentration × Space (People/sq mile × City area)
- Analogous scaling: Known similar system, adjust for size (Competitor revenue × Our market share)
Typical estimation time:
- Simple question (1-2 levels of decomposition): 3-5 minutes
- Market sizing (3-4 levels): 10-15 minutes
- Complex business case (multiple metrics, triangulation): 20-30 minutes
When to escalate:
- Decision requires precision (< factor of 2 uncertainty)
- Estimate spans >2 orders of magnitude even with bounds
- No reasonable decomposition path (too many unknowns)
- Stakeholders need confidence intervals and statistical rigor
→ Invest in data collection, detailed modeling, expert consultation
Inputs required:
- Question (what are we estimating? units? scope?)
- Decision context (what decision hinges on this estimate? required precision?)
- Known anchors (what related quantities do we know?)
Outputs produced:
estimation-fermi.md: Question, decomposition, assumptions, calculation, bounds, sanity check, triangulation, final estimate with confidence range
1---
2name: estimation-fermi
3description: Decomposes complex unknowns into estimable components to produce rapid order-of-magnitude answers with bounded uncertainty. Use when making quick estimates (market sizing, resource planning, feasibility checks), bounding unknowns with upper/lower limits, sanity-checking strategic assumptions, or when user mentions Fermi estimation, back-of-envelope calculation, order of magnitude, ballpark estimate, or triangulation.
4---
5
6# Fermi Estimation
7
8## Table of Contents
9- [Workflow](#workflow)
10- [Common Patterns](#common-patterns)
11- [Guardrails](#guardrails)
12- [Quick Reference](#quick-reference)
13
14## Example
15
16**Question**: How many piano tuners are in Chicago?
17
18**Decomposition**:
191. Chicago ~3M people ÷ 3/household = 1M households
202. ~1 in 20 has piano = 50,000 pianos, tuned once/year
213. Tuner: 250 days/year × 4 tunings/day = 1,000/year
224. 50,000 ÷ 1,000 = **~50 piano tuners** (Actual: ~80-100, within order of magnitude)
23
24## Workflow
25
26Copy this checklist and track your progress:
27
28```
29Fermi Estimation Progress:
30- [ ] Step 1: Clarify the question and define metric
31- [ ] Step 2: Decompose into estimable components
32- [ ] Step 3: Estimate components using anchors
33- [ ] Step 4: Bound with upper/lower limits
34- [ ] Step 5: Calculate and sanity-check
35- [ ] Step 6: Triangulate with alternate path
36```
37
38**Step 1: Clarify the question and define metric**
39
40Restate question precisely (units, scope, timeframe). Identify what decision hinges on estimate (directional answer sufficient? order of magnitude?). See [resources/template.md](resources/template.md#clarification-template) for question clarification framework.
41
42**Step 2: Decompose into estimable components**
43
44Break unknown into product/quotient of knowable parts. Choose decomposition strategy (top-down, bottom-up, dimensional analysis). See [resources/template.md](resources/template.md#decomposition-strategies) for decomposition patterns.
45
46**Step 3: Estimate components using anchors**
47
48Ground estimates in known quantities (population, physical constants, market sizes, personal experience). State assumptions explicitly. See [resources/methodology.md](resources/methodology.md#anchoring-techniques) for anchor sources and calibration.
49
50**Step 4: Bound with upper/lower limits**
51
52Calculate optimistic (upper) and pessimistic (lower) bounds to bracket answer. Check if decision changes across range. See [resources/methodology.md](resources/methodology.md#bounding-techniques) for constraint-based bounding.
53
54**Step 5: Calculate and sanity-check**
55
56Compute estimate, round to 1-2 significant figures. Sanity-check against reality (does answer pass smell test?). See [resources/template.md](resources/template.md#sanity-check-template) for validation criteria.
57
58**Step 6: Triangulate with alternate path**
59
60Re-estimate using different decomposition to validate. Check if both paths yield same order of magnitude. Validate using [resources/evaluators/rubric_estimation_fermi.json](resources/evaluators/rubric_estimation_fermi.json). **Minimum standard**: Average score ≥ 3.5.
61
62## Common Patterns
63
64**Pattern 1: Market Sizing (TAM/SAM/SOM)**
65- **Decomposition**: Total population → Target segment → Addressable → Reachable → Price point
66- **Anchors**: Census data, industry reports, analogous markets, penetration rates
67- **Bounds**: Optimistic (high penetration, premium pricing) vs Pessimistic (low penetration, discount pricing)
68- **Sanity check**: Compare to public company revenues in space, VC market size estimates
69- **Example**: E-commerce TAM = US population × online shopping % × avg spend/year
70
71**Pattern 2: Infrastructure Capacity**
72- **Decomposition**: Users → Requests per user → Compute/storage per request → Overhead
73- **Anchors**: Similar services (Instagram, Twitter), known capacity (EC2 instance limits), load testing data
74- **Bounds**: Peak (Black Friday) vs Average load, Growth trajectory (2x/year vs 10x/year)
75- **Sanity check**: Cost per user should be < LTV, compare to public cloud bills of similar scale
76- **Example**: Servers needed = (DAU × requests/user × ms/request) ÷ (instance capacity × utilization)
77
78**Pattern 3: Staffing/Headcount**
79- **Decomposition**: Work to be done (features, tickets, customers) → Productivity per person → Overhead (meetings, support)
80- **Anchors**: Industry benchmarks (engineer per X users, support agent per Y customers), team velocity, hiring timelines
81- **Bounds**: Experienced team (high productivity) vs New team (ramp time), Aggressive timeline (crunch) vs Sustainable pace
82- **Sanity check**: Headcount growth should match revenue growth curve, compare to peers at similar scale
83- **Example**: Engineers needed = (Story points in roadmap ÷ Velocity per engineer) + 20% overhead
84
85**Pattern 4: Financial Projections**
86- **Decomposition**: Revenue = Users × Conversion rate × ARPU, Costs = COGS + Sales/Marketing + R&D + G&A
87- **Anchors**: Cohort data, industry CAC/LTV benchmarks, comparable company metrics, historical growth
88- **Bounds**: Bull case (high growth, efficient scaling) vs Bear case (slow growth, rising costs)
89- **Sanity check**: Margins should approach industry norms at scale, growth rate should follow S-curve not exponential forever
90- **Example**: Year 2 revenue = Year 1 revenue × (1 + growth rate) × (1 - churn)
91
92**Pattern 5: Impact Assessment**
93- **Decomposition**: Total impact = Units affected × Impact per unit × Duration
94- **Anchors**: Emission factors (kg CO2/kWh), conversion rates (program → behavior change), precedent studies
95- **Bounds**: Conservative (low adoption, small effect) vs Optimistic (high adoption, large effect)
96- **Sanity check**: Impact should scale linearly or sub-linearly (diminishing returns), compare to similar interventions
97- **Example**: Carbon saved = (Users switching × Miles driven/year × Emissions/mile) - Baseline
98
99## Guardrails
100
1011. **State assumptions explicitly**: Every Fermi estimate rests on assumptions. Make them visible ("Assuming 250 workdays/year", "If conversion rate ~3%"). Unstated assumptions create false precision.
102
1032. **Aim for order of magnitude, not precision**: 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.
104
1053. **Decompose until components are estimable**: Break down until you reach quantities you can estimate from knowledge/experience. If a component is still "how would I know that?", decompose further.
106
1074. **Use multiple paths (triangulation)**: Estimate same quantity via different decompositions (top-down vs bottom-up, supply-side vs demand-side). If paths agree within factor of 3, confidence increases. If they differ by 10x+, investigate which decomposition is flawed.
108
1095. **Bound the answer**: Calculate optimistic and pessimistic cases to bracket reality. If the decision holds across the range, bounds matter less. If the decision flips, invest in a better estimate.
110
1116. **Sanity-check against reality**: Compare to known quantities, use dimensional analysis (units should cancel correctly), and check extreme cases (what if everyone did X? does it break physics?).
112
1137. **Calibrate on known problems**: Practice on questions with verifiable answers to identify personal biases (overestimate? underestimate? anchoring?).
114
1158. **Acknowledge uncertainty ranges**: Express estimates as ranges when appropriate ("10-100k users", "likely $1-5M").
116
117**Common pitfalls:**
118
119- ❌ **Anchoring on the wrong number**: Using irrelevant or biased starting point. If someone says "Is it 1 million?" you anchor there even if no reason to.
120- ❌ **Double-counting**: Including same quantity twice in decomposition (counting both businesses and employees when businesses already includes employees).
121- ❌ **Unit errors**: Mixing per-day and per-year, confusing millions and billions, wrong currency conversion. Always check units.
122- ❌ **Survivor bias**: Estimating based on successful cases (average startup revenue from unicorns, not including failures).
123- ❌ **Linear extrapolation**: Assuming linear growth when exponential (or vice versa). Growth rates change over time.
124- ❌ **Ignoring constraints**: Physical limits (can't exceed speed of light), economic limits (market can't grow faster than GDP forever).
125
126## Quick Reference
127
128**Key resources:**
129
130- **[resources/template.md](resources/template.md)**: Clarification framework, decomposition strategies, estimation template, sanity-check criteria
131- **[resources/methodology.md](resources/methodology.md)**: Anchoring techniques, bounding methods, triangulation approaches, calibration exercises
132- **[resources/evaluators/rubric_estimation_fermi.json](resources/evaluators/rubric_estimation_fermi.json)**: Quality criteria for decomposition, assumptions, bounds, sanity checks
133
134**Common Anchors:**
135
136**Demographics:**
137- US population: ~330M, Households: ~130M, Labor force: ~165M
138- World population: ~8B, Urban: ~55%, Internet users: ~5B
139
140**Business:**
141- Fortune 500 revenue: $100k to $600B (median ~$30B)
142- Startup valuations: Seed ~$5-10M, Series A ~$30-50M, Unicorn >$1B
143- SaaS metrics: CAC ~$1-5k, LTV/CAC ratio >3, Churn <5%/year
144
145**Technology:**
146- AWS EC2 instance: ~10k requests/sec, S3 storage: $0.023/GB/month
147- Mobile app: ~5-10 screens/day per user, 50-100 API calls/session
148- Website: ~2-3 pages/session, 1-2min session duration
149
150**Physical:**
151- Person: ~70kg, 2000 kcal/day, 8 hours sleep
152- Car: ~25 mpg, 12k miles/year, $30k new, 200k mile lifetime
153- House: ~2000 sq ft, $300k median US, 30-year mortgage
154
155**Conversion factors:**
156- 1 year ≈ 250 workdays ≈ 2000 work hours
157- 1 million seconds ≈ 11.5 days, 1 billion seconds ≈ 32 years
158- 1 mile ≈ 1.6 km, 1 kg ≈ 2.2 lbs, 1 gallon ≈ 3.8 liters
159
160**Decomposition Strategies:**
161
162- **Top-down**: Start with total population, filter down (US population → Car owners → EV buyers)
163- **Bottom-up**: Start with unit, scale up (1 store revenue × Number of stores)
164- **Rate × Time**: Flow rate × Duration (Customers/day × Days/year)
165- **Density × Area/Volume**: Concentration × Space (People/sq mile × City area)
166- **Analogous scaling**: Known similar system, adjust for size (Competitor revenue × Our market share)
167
168**Typical estimation time:**
169- Simple question (1-2 levels of decomposition): 3-5 minutes
170- Market sizing (3-4 levels): 10-15 minutes
171- Complex business case (multiple metrics, triangulation): 20-30 minutes
172
173**When to escalate:**
174
175- Decision requires precision (< factor of 2 uncertainty)
176- Estimate spans >2 orders of magnitude even with bounds
177- No reasonable decomposition path (too many unknowns)
178- Stakeholders need confidence intervals and statistical rigor
179→ Invest in data collection, detailed modeling, expert consultation
180
181**Inputs required:**
182
183- **Question** (what are we estimating? units? scope?)
184- **Decision context** (what decision hinges on this estimate? required precision?)
185- **Known anchors** (what related quantities do we know?)
186
187**Outputs produced:**
188
189- `estimation-fermi.md`: Question, decomposition, assumptions, calculation, bounds, sanity check, triangulation, final estimate with confidence range