The 25× rule and the 4% rule are the same rule written in two directions. The value of a FIRE model is what it does about the rule's known limitations.
The FIRE model — financial independence, retire early — has one job: given a picture of a user's saving rate, current portfolio, expected return, and target annual expenses, produce an estimate of when the portfolio will support the expenses indefinitely. The math is a projection with a target multiple at its terminus. The intellectual work is in the assumptions the spec names and the sensitivities it lets a caller test.
The inputs
The current spec accepts seven inputs. Current age, current savings, annual income, annual expenses, savings rate, expected return, and withdrawal rate. Two derived numbers fall out immediately: annual savings equals annual income times savings rate, and target portfolio equals annual expenses divided by withdrawal rate. Every subsequent projection is a compounding of the current savings and annual savings toward the target.
The withdrawal rate deserves attention. The conventional value is four percent — the Bengen-derived rule and the Trinity Study conclusions from the mid-1990s.[1] The spec permits any withdrawal rate between two and six percent, and the model returns a target portfolio proportional to the reciprocal. A three-percent withdrawal rate implies a target of thirty-three times annual expenses; a five-percent rate implies twenty.
fire_number = annual_expenses / withdrawal_rate; balance_next_year = balance × (1 + r) + annual_savings; retirement_age = first age at which balance ≥ fire_number (sentinel: 100 if never reached)
No closed form — the model runs the projection year by year from current age to 100. A retirementAge of 100 means the target was not reached by then, and the response's sentinels array says so; never read the 100 as a plan.
What the spec says the model does not do
Three exclusions matter most. First, the model uses a geometric mean return and does not simulate sequence-of-returns risk. Two portfolios with the same average annual return over thirty years can produce different terminal wealth depending on the order in which the returns arrive, and the difference in early-retirement contexts can be large. The spec notes that Monte Carlo bands are a separate model, outside this spec's scope.
Second, the model does not model taxes on withdrawals. A four-percent withdrawal rate applied to a tax-deferred portfolio funds less lifestyle than the same rate applied to a taxable brokerage. The spec leaves taxes entirely to the caller; the withdrawal rate means whatever the caller means by it, and a tax-deferred portfolio funds less lifestyle at the same rate. A caller that ignores this will systematically overestimate financial independence readiness.
Third, the model does not model healthcare-cost inflation separately from general inflation. This is a real omission in the early-retirement case, where pre-Medicare healthcare is a material variable expense. Healthcare is simply part of the annual-expenses input — the spec does not treat it separately, and the caller can inflate it.
The sensitivity the model does support
Callers can and should re-run the model with a range of withdrawal rates, expected returns, and savings rates to produce a sensitivity band. Nothing stops a caller from re-running the model across a grid. A properly built FIRE UI presents not one number but a small grid — three-and-a-half, four, four-and-a-half percent withdrawal rates across five, six, seven percent expected returns — showing how the years-to-FI answer moves. The user learns something the single-number answer cannot teach.
“A single FIRE number invites belief. A sensitivity grid invites judgment.”
The response envelope
The response returns the FIRE number, the projected retirement age (with 100 doubling as the not-reached sentinel, annotated in the sentinels array), years to FIRE, the derived annual savings, and a year-by-year projected portfolio with balances rounded to whole dollars — the model's only rounding. It returns the spec version, an assumptions array naming that version, an empty facts array (the FIRE model uses no tax-year constants directly), and a record.sha256 hash covering the model name, spec version, inputs, and outputs in canonical key-sorted JSON. The hash is what makes the answer reproducible a year later, regardless of whether the spec has moved on to a new version in the meantime.
How this model relates to the retirement pack
The FIRE model is a projection model, not a retirement adequacy model. The retirement pack — released as part of the retirement & tax models — contains adjacent computations: required minimum distributions with the SECURE 2.0 cohort ages, the Roth conversion ladder, and capital gains. Callers building a retirement-planning experience typically compose FIRE with one or more of those, using the FIRE output as an accumulation-phase target and the retirement-pack models to interrogate the drawdown phase. Each model is separately specced; composing them is the caller's decision, and each model's response carries the version that produced it.
Two failure modes the spec exists to prevent
The first is the nominal-return trap. A user who enters an eight-percent expected return without deflating for inflation produces a target-date years earlier than reality warrants. The spec's known-issues section is explicit about it: the FIRE number is in today's dollars while growth compounds at whatever rate the caller supplies, so callers should supply a real (inflation-adjusted) return for a consistent read. A UI that displays the years-to-FI answer without saying which kind of return produced it is inviting the trap.
The second is the constant-savings-rate trap. A user contributing thirty-five percent of income today may not sustain that rate through a job change, a family transition, or a housing purchase. The spec assumes a constant savings rate and does not attempt to model life-stage variation. Callers who want to model variable savings can call the model multiple times with different rates over successive periods and stitch the results; each call is stateless, and each envelope records the inputs that produced its segment.
A note on withdrawal-rate history
The four-percent framing has aged. Later work by Pfau and others has revisited the Trinity conclusions in the context of lower-yield environments and longer retirement horizons, and the resulting withdrawal-rate literature is a decade-long argument the spec does not attempt to adjudicate.[3] The FIRE model treats withdrawal_rate as caller-supplied precisely so that a UI can present the argument without hard-coding a side of it. A user who reads current retirement-income research and prefers a three-and-a-half-percent rate is served by the same model as a user who accepts the four-percent convention, and both answers carry the assumption that produced them.
Sources
- [1] Bengen, W.P. (1994). Determining Withdrawal Rates Using Historical Data. Journal of Financial Planning.
- [2] Cooley, P., Hubbard, C., & Walz, D. (1998). Retirement Savings: Choosing a Withdrawal Rate That Is Sustainable. AAII Journal (Trinity Study).
- [3] Pfau, W.D. (2011). Safe Savings Rates: A New Approach to Retirement Planning over the Life Cycle. Journal of Financial Planning.
- [4] Worthune fire model spec. https://worthune.com/docs/models/fire
- [5] Worthune roadmap. https://worthune.com/roadmap