The Fire Calculator — Calculation Methodology
All projections are in real terms (today's £). Inflation 2.5% is used only to deflate nominal mortgage flows into today's £. All other figures are real.
1. FIRE Number
The FIRE Number is the pot you need at retirement to fund your chosen retirement
spend for a finite horizon and leave a chosen legacy. It is the present value
of two streams discounted at your expected real drawdown return r
(default 4%):
N = lifeExpectancy − targetRetirementAge
spendPV = nonMortgageAnnualSpend × (1 − (1 + r)^−N) / r
legacyPV = legacyFloor / (1 + r)^N
FIRE Number = spendPV + legacyPV
The mortgage is not added as a lump in the target. It is funded through
the monthly drawdown in retirementCashOutflow until payoff — including it
here as well would double-count.
If you wanted to leave your entire pot untouched and live off 4% returns forever, you'd need roughly 25× your annual non-mortgage spend (
nonMortgageAnnualSpend / 0.04). We don't plan that way by default because most people don't want to leave their entire pot untouched.
2. Per-account growth (accumulation)
For each enabled account, with real return r and annual contribution C
(employee + employer combined):
balance_{y+1} = balance_y × (1 + r) + C × (1 + r)^0.5
The (1 + r)^0.5 term approximates monthly contributions earning, on
average, half a year of growth — a closer match to reality than assuming all
contributions arrive at year-end.
C is hiked annually by annualHikePct (real, above-inflation pay rise) to
model contribution growth.
Scenario nudges adjust every account's r by ±1% (conservative / base /
optimistic).
3. Drawdown (retirement years)
From the target retirement age onwards, contributions stop and the engine withdraws actual cash outflow each year:
cashOutflow(y) = nonMortgageAnnualSpend
+ monthlyPayment × 12 (only while mortgage > 0)
Withdrawals are proportional across eligible accounts. Pensions (SIPP,
workplace pension) are locked until pensionAccessAge (default 57). Before
that age, only ISA / LISA / GIA / Cash are eligible. After it, the full pot
is drawn down.
Balances are floored at zero for display, but any unfunded shortfall during the locked-pension years is captured (see Bridge Gap below).
4. Freedom Day
For each year y* where age ≥ targetRetirementAge, the engine projects the
pension forward to access age and adds the accessible pot today:
pensionAtAccess = pensionBalance × (1 + r_pen)^bridgeYears
totalPV = accessibleBalance + pensionAtAccess
Freedom Day = the first y* where totalPV ≥ FIRE Number.
Whether the accessible pot actually lasts through the bridge years before pensions unlock is a separate check — see Bridge Gap below. It is a warning, not a gate on Freedom Day.
5. Bridge Gap warning
If during projection the accessible pot runs dry before pensionAccessAge
(i.e. the year's withdrawal cannot be funded from non-pension accounts), the
engine records the age at which this happens (bridgeGapAge) and surfaces a
loud warning on the dashboard. Balances are not silently floored at zero in
the calculation — only in display.
6. Savings rate
Numerator: employee contributions only — the money the user is actively redirecting. Employer pension contributions are excluded because they are not a saving the user chooses each month; they grow the pot but are not part of the household's discretionary saving decision.
Denominator: household net (take-home) monthly income, including partner take-home in couple mode and any other monthly income.
savingsRate = employeeMonthlyContribution / householdNetMonthly
7. Real-return assumptions
Defaults (annual, real / after-inflation):
| Account | Default real return | Source |
|---|---|---|
| S&S ISA / SIPP / LISA / GIA | 5.5% | Barclays Equity Gilt Study, UBS Global Returns Yearbook, Vanguard UK 10-yr |
| Workplace Pension | 4.5% | Lifecycle blended fund with de-risking glide path |
| Cash / Premium Bonds | 0.5% | Long-run cash real return |
The same underlying asset class produces the same gross real return; tax wrappers (ISA / SIPP / LISA / GIA) change tax treatment, not market growth.
8. What we don't model (yet)
- Home equity in net worth (no home-value input)
- Tax on drawdown: SIPP 25% tax-free, marginal income tax
- LISA 25% government bonus on contributions
- State pension at age 67
- Sequence-of-returns risk / Monte Carlo
GIA dividend tax and CGT are approximated as a 1% real-return haircut (5.5% → 4.5%). Cash interest tax is approximated as a 0.2% haircut (0.5% → 0.3%). These assume a higher-rate taxpayer. Actual tax depends on your marginal rate, dividend yield, allowances used, and disposal timing — override the per-account real return if your situation differs.