Skip to content
RetireRange

Methodology & Assumptions

Planner-facing reference for how RetireRange produces its results. Every default below is editable in the app — these are starting points, not constraints baked into the engine.


1. How the engine works

RetireRange treats the future as unknowable but bounded. Instead of projecting one "expected" path, it generates thousands of plausible multi-decade paths, each with its own random sequence of returns and inflation, and reports the distribution of how the plan fares across them.

For each month of each simulation, in order:

  1. Contributions for the month are added to the relevant accounts.
  2. Withdrawals are computed: the lifestyle target (per the strategy and current spending phase) + medical costs + any scheduled lump sums.
  3. Withdrawals are allocated across tax types per the strategy, cascading to other types when a bucket is depleted. Medical is drawn first from VEBA → HSA, overflowing to the general pool only if both are exhausted.
  4. Within a tax type, accounts are drawn pro-rata by balance (or in strict priority order, if the strategy is Ordered).
  5. Returns are applied to remaining balances from a correlated random draw for that month.
  6. Taxes accrue in a monthly accumulator; a full year-end (December) calculation books federal + state tax, Social Security taxability, and sets up the following year’s IRMAA lookback.
  7. RMDs are tracked per account per owner; a forced December top-up is booked if voluntary draws fell short of the requirement.
  8. Mortality events (if enabled) may fire — flipping filing status to Single, recomputing Social Security to the survivor benefit, and reassigning account ownership for future RMDs.

The defining property is sequence-of-returns risk: two paths with identical long-run average returns can end very differently if the bad years cluster early (when balances are high and withdrawals large). Monte Carlo captures this automatically; an average-return spreadsheet cannot.

Shared seeds. When comparing named strategies, all strategies run against the same set of random sequences, so any difference in outcome is attributable to the strategy, not the draw. (Proof: comparing a strategy against an identical copy of itself yields identical numbers.)


2. Assumptions catalog (defaults)

Return & inflation assumptions

Every figure in this section is a default the user can change on the Assumptions tab — return, volatility, and inflation are all editable, so a given plan may run on different numbers than those shown here.

Asset class Annual return Annual volatility
Stocks 7.5% 18.0%
Bonds 4.5% 6.0%
Cash / equivalents 3.0% 1.0%
VEBA 5.33% 8.29%
Inflation 2.7% 1.2%

Return type is per-asset-class: CAGR (default — the engine applies a variance-drag correction so the realized compound return targets the input) or Arithmetic Mean (no correction; realized compound return runs lower than the input because of volatility drag). Most published return figures are arithmetic means; CAGR is closer to what a long-horizon investor experiences, and it keeps results comparable to CAGR-stated 4%-rule figures.

Return generation mode: Stochastic (parametric) draws each month from a normal distribution (default), or Block Bootstrap resamples blocks of actual historical returns (1928–present, default 5-year blocks), preserving real autocorrelation. The Historical Backtest tab is a third cross-check using literal historical sequences.

Correlation: stock/bond default −0.20 (mild negative, long-run average); all other pairs 0. Correlated draws use Cholesky decomposition for stocks/bonds; cash, VEBA, and inflation are drawn independently. Correlation is constant — it does not rise in crises the way real correlations do.

Annual → monthly: monthlyReturn = ln(1 + annualReturn) / 12; monthlyVol = annualVol / √12 (standard log-normal conversion).

Inflation tagging: every cash flow (contributions, spending target, medical, lump sums, pensions/annuities) is tagged None (fixed nominal), Full CPI, or 80% CPI. Medical inflation and SS COLA can optionally each be modeled as a separate stochastic process layered on general CPI.

Withdrawal strategy defaults

Field Default
Method Classic (Bengen-style, hold real spending flat)
Target type % of portfolio at retirement
Target rate 4%
Inflation adjustment Full CPI
Guardrail bounds 5% upper / 3% lower (Guardrails method only)
Medical expense $1,200/month (today’s dollars)
Net-of-medical Off (medical stacks on top of lifestyle)
Cash reserve / downturn rules / Roth conversions / spending phases Off / none by default

Tax treatment

Source Treatment
Traditional 401(k)/IRA withdrawals 100% ordinary income
Roth withdrawals 100% tax-free (5-year and 59½ rules not enforced)
Taxable withdrawals Modeled as 100% ordinary income — overstates tax vs. real LTCG/qualified-dividend rates
Roth conversions 100% taxable in the conversion year
Social Security IRS Pub 915 three-tier worksheet; up to 85% taxable, ceiling enforced
Federal brackets MFJ / Single per filing status, inflated forward via simulated CPI
State brackets All 50 states + DC; inflated forward only for states that formally CPI-index
IRMAA Prior-year MAGI drives the current-year Part B/D surcharge; thresholds inflated by CPI

Heir rates (after-tax legacy), Assumptions-tab defaults (three inputs): Heir’s Federal Ordinary Rate 25%, State Rate 0%, LTCG Rate 15%. See §3, "Taxes."

Social Security, RMDs, mortality, plan settings

  • SS actuarial factors: early-claim reduction 5/9 of 1%/month (first 36) then 5/12 of 1%/month; delayed credits 8%/year to 70; spousal 50% of the other’s FRA benefit (higher of own/spousal paid). Survivor benefit uses the SSA age-graded factor — 71.5% at age 60 rising to 100% at the survivor’s FRA (full 100% at/after FRA), paid as the larger of the survivor’s own benefit or the deceased’s × factor. WEP/GPO not modeled (repealed for benefits payable Jan 2024+).
  • RMDs: IRS Uniform Lifetime Table (Pub 590-B Table III); cohort onset 73 (born 1951–1959) / 75 (born 1960+), selected per account owner; applies to Traditional 401(k)/IRA only.
  • Mortality: None (default) / Deterministic / Stochastic (SSA 2021 Period Life Table).
  • Plan: end age 100 (younger person); 5,000 simulations (raise to 10,000 for close calls); filing status MFJ, auto-flips to Single on first death.

3. Methodology by topic

Returns and inflation

Returns are drawn from normal distributions per asset class, independent across months. Real markets have fat tails and regime shifts the parametric model doesn’t reproduce; sustained inflationary regimes (1970–82) appear only as a long run of high draws. Cross-check tail behavior with Block Bootstrap and the Historical Backtest. No transaction costs, expense ratios, or rebalancing drag are modeled.

Withdrawal methods

  • Classic — set the target at retirement (% of portfolio or fixed dollar), then hold it flat in real terms. Stable income; can leave large legacy in good markets or sustain shortfalls in prolonged downturns.
  • Dynamic — recompute (current % × current portfolio) each month. Never mathematically zeroes; income swings with markets.
  • Guardrails — Classic with automatic cuts above an upper spending-rate bound and raises below a lower bound. Preferred for most households.

Target types: % of portfolio at retirement; fixed monthly dollar; or % + fixed dollar. A fourth option, Net-of-Tax (Dollar), is now a legacy alias for fixed monthly dollar — retained so older saved scenarios still load. Under Engine V2 it no longer grosses up draws: V2 already pays the actual tax bill from the portfolio under every target, so the old gross-up would double-count tax.

Target convention — read this before benchmarking against a standard Safe Withdrawal Rate (SWR) study. The withdrawal target is a total household spending target, not a portfolio-only draw. Guaranteed income — Social Security, pensions, and annuities — is subtracted from the gross target dollar for dollar each month, and the portfolio funds only the remainder (gt = max(0, gt − SS − pension − annuity)). This applies to every method and every target type; there is no setting that changes it.

This differs from the Bengen/Trinity convention, where the 4% is a portfolio-only withdrawal and Social Security is additive on top. A "4%" target in RetireRange is therefore not directly comparable to a published 4%-rule result: it is a lower effective portfolio draw once benefits begin, and a higher one before. To reproduce the Bengen convention, set the target to spending net of guaranteed income.

Two consequences worth flagging to clients:

  • Claiming-age analysis is symmetric. Delaying Social Security raises portfolio draws during the delay years (the portfolio funds 100% of the target), so the model captures the drawdown cost of waiting, not just the larger later benefit. Delay is not assumed to be optimal.
  • Guaranteed income raises the force-drawn share of the RMD. Because benefits shrink voluntary withdrawals, less of the RMD is satisfied by ordinary draws; the balance is force-distributed (spread evenly across the year under always-on smoothing) and any excess over the lifestyle target is redeposited gross to Taxable. Only account withdrawals satisfy an RMD — benefits do not.

Allocation: Proportional (percentage weights per tax type, cascade when depleted) or Ordered (strict priority list). Within a type, pro-rata by balance. Downturn-aware withdrawals (optional): when the trailing 12-month stock return falls below a threshold, switch to priority drainage of Cash → Bonds → VEBA → Stocks to preserve equity; revert on recovery. Cash reserve target (optional): hold N months of gross expenses in cash — the floor is monthsOfExpenses × gross monthly spending, sized on the full lifestyle target before Social Security / pension / annuity income is netted out, not the post-income net portfolio draw. An optional recovery refill tops it back up from equity gains when the trailing 12-month stock return exceeds a threshold (default +10%), rebalancing within a tax type only.

Taxes

The monthly accumulator drives the Tax Summary chart, the IRMAA lookback, and SS taxability. Engine V2 draws the realized federal + state tax bill from the portfolio at each year-end (December), via the normal allocation/cascade, with no target-type check — so realized tax reduces balances (and ending legacy) under every withdrawal target, and Filing State / a planned move affect the legacy number under every target, not just one special mode. Federal brackets, state brackets (all 50 + DC, with per-state SS treatment), and IRMAA are all modeled; capital-gains rates, qualified dividends, AMT, NIIT, and QCDs are not (see limitations).

Heir tax / after-tax legacy. After-tax legacy applies tax to inherited balances by account type and by beneficiary. Each account’s Beneficiary setting (spouse / non-spouse) drives the haircut: a spouse inherits Traditional and HSA with tax-advantaged status preserved (no haircut); a non-spouse heir takes them as ordinary income at the heir’s rate + optional state rate (an HSA at full balance, per IRS Pub 969). Roth, Taxable, and VEBA pass at full value regardless (Taxable via step-up in basis). The SECURE-Act 10-year drawdown bracket math on inherited Traditional and the capital-gains drag on inherited Taxable growth are not modeled — today the haircut is a flat ordinary+state rate on the ending balance.

Social Security, pensions, annuities

Benefits are entered per person in today’s dollars at 62 / FRA / 70 from the SSA statement; the engine interpolates other claim ages with standard actuarial factors. SSA statements assume continued earnings until claiming — a household retiring before claiming should enter reduced figures; the engine cannot detect this. Pensions and annuities are modeled as income streams with COLA, survivor %, QLAC deferral, and (annuities) an exclusion ratio; they carry a start date but no end date, and buying a new annuity mid-plan is not a modeled transaction.

RMDs

Annual RMD = prior year-end balance ÷ Uniform Lifetime factor for the owner’s age; cohort onset 73/75. Voluntary draws count toward the requirement; any shortfall is spread evenly across the year (RMD smoothing is always on — there is no December-lump mode or toggle). Any RMD exceeding the lifestyle target is redeposited to the owner’s chosen Taxable account. The Joint Life Table (Table II) is intentionally not populated — it applies only when the sole-beneficiary spouse is >10 years younger; a lookup would throw as a safety net.

Medical costs & Medicare

Base medical expense (default $1,200/month, inflated by medical or general CPI) is drawn VEBA → HSA → general pool; VEBA/HSA are never touched by the general withdrawal loop (a tested invariant). Because this base medical expense is added on top of the withdrawal target by default, the withdrawal target should represent non-medical living spending — medical is not part of it and isn’t double-counted. The Net-of-Medical toggle flips this: medical then comes out of the total target instead of adding to it. Optional Medicare Part B/D base premiums start at 65 per person, plus any Medigap supplement. The pre-Medicare bridge is a chain of 1–5 sequential coverage periods (COBRA → ACA → retiree) per person, each with a premium and growth rate, running to Medicare eligibility. The HSA "stealth IRA" option defers HSA drawdown so it compounds tax-free, with reimbursements pulled later under the IRS unlimited-lookback rule.

Mortality & surviving spouse

Three modes (None / Deterministic / Stochastic). Use Deterministic for Compare — shared seeds + shared death timing isolates strategy as the only variable. On a death: filing flips to Single, ownership transfers to the survivor, SS becomes the higher of own/survivor (via the SSA age-graded survivor factor, up to 100% at FRA), future RMDs use the survivor’s age. On the last death the plan terminates that month and balances freeze — the ending balance / after-tax legacy is measured at the death month, not plan end.

Roth conversions

Annual Traditional → Roth conversions by year range and amount, taxable in the conversion year and potentially triggering IRMAA two years later. The engine assumes conversion taxes are paid from outside the portfolio — if paid from portfolio funds, reduce the entered amount to net-of-tax. Conversions do not satisfy RMDs.

Sensitivity analysis

Methodology. A tornado sweep: stockReturn, bondReturn, inflation each ±1% and withdrawalTarget ±10%, one dimension at a time — 8 perturbations + baseline = 9 full Monte Carlo passes. All nine passes share one common random-number stream (a single seeded draw sequence), so each bar is a true marginal sensitivity rather than a mix of signal and sampling noise. The baseline pass reuses the exact 32-bit seed stamped on the client’s last Run Simulation, so the tornado’s baseline column reproduces the Results-tab run bit-for-bit and cannot contradict the headline numbers. Each bar is the perturbed metric minus the baseline metric (median / P10 legacy, success rate, shortfall, after-tax legacy). Perturbations are relative to the client’s own assumptions — it nudges their inputs, not a standardized set. It isolates marginal contributions and does not model interactions between inputs.

Benefit. Ranks which market/spending inputs the plan is most exposed to, so stress-testing and client conversations focus on the levers that actually move the outcome rather than the ones that merely feel important. Note it is deliberately a fixed four-input sweep — it does not test decisions (SS claiming age, allocation, Roth conversions, healthcare costs, retirement date); use the Optimizer or a Compare set for those, and don’t read a decision’s absence from the chart as insensitivity.

Sampling noise. Because every pass replays the same draw stream, common random numbers (above) cancel between-pass noise: a perturbation moves the metric only through the input that changed, so the bars are monotonic in the perturbation direction. Residual sampling error still applies to the absolute metric levels (as everywhere), but not to the differences the tornado is built from — so a client can even lower the simulation count for a quick read rather than raising it to fight noise. This is the same shared-seed principle the Compare tab applies across strategies.

Optimizer

Searches a configurable decision space (allocation, withdrawal target/method, guardrails, SS claim ages, Roth amounts, contributions, filing state, move year) via Grid / Latin Hypercube / Random, runs as a background worker, and emails results. Result precision is ±1–2 points: candidates share seeds within a candidate but not across candidates, so a 1–2-point success-rate gap between nearby candidates can be noise — confirm close finalists on the Compare tab, which uses identical seeds across candidates. Under Engine V2 the Filing-State/Move-Year dimensions produce a legacy signal under every target (V2 draws actual tax from the portfolio regardless of target), so the old Net-of-Tax gate is gone. Some dimensions appear only when relevant to the plan (e.g., contribution dimensions require an account with a contribution rule).


4. Interpreting the results

  • Success Rate — share of simulations with the portfolio still positive at plan end. 90%+ is typically solid; higher is not automatically better (99% on a long horizon can signal over-caution or over-optimistic inputs — sanity-check against the backtest).
  • Shortfall Rate — share of simulations where the spending target was unmet for at least one month. A more sensitive income-reliability measure than success rate; a "successful" run can still have had a lean stretch.
  • Percentile ending balances (P10/P50/P90) — P10 is the bad-luck floor, P50 the median, P90 the good-luck ceiling. The P10–P90 width itself signals sensitivity to luck.
  • After-Tax Legacy (P50) — median legacy after heir tax by account type (see §3). The realistic legacy figure and the right one for Roth-vs-Traditional comparisons.
  • Ruin-probability (by year)when failures occur, which success rate alone can’t tell you: early-clustered failures (sequence risk) are a very different problem from late ones, even at the same success rate.
  • Sampling error — at 5,000 sims the standard error on success rate is ~±0.7pp (~±0.5pp at 10,000). Treat sub-1-point differences as noise.
  • Real vs. nominal — nominal for comparison to statements; real (deflated to plan-start dollars) to judge whether purchasing power holds.
  • Lifetime Taxes Paid caution — never minimize it on its own: at high withdrawal rates taxes fall simply because the portfolio depletes faster. Find the high-success-rate region first, then compare taxes within it.

5. Cross-checks & verification

  • Historical Backtest — replays the plan against actual 1928–2025 sequences (98 start years, deterministic). Worst starts to watch: 1929, 1966, 2000. Limitations: 98 data points (wider CI than Monte Carlo); U.S. large-cap + Treasuries only; late start years wrap to 1928 (flagged).
  • Block Bootstrap — a middle ground that resamples real historical blocks while still randomizing.
  • What-If Quick Calculator — a deterministic, zero-volatility single path for instant directional checks ("which way does this change push the outcome?"). Not a substitute for Monte Carlo.
  • Test suite — the engine’s unit/integration tests target silent forecast errors: finite-number assertions on every result field, histogram bins summing to the simulation count, medical-account isolation (VEBA/HSA never drawn by the general pool), rate fields bounded in [0,1], cascade correctness, and SS-taxability worksheet coverage across all three Pub 915 tiers.

6. Limitations

The model’s approximations and gaps — mapped to the accounts, assets, and income sources a household actually holds, each flagged conservative or optimistic — are in Model limitations, by portfolio inventory. The items that lean optimistic are the ones to weigh most carefully with a client: long-term care (not modeled), investment fees (not deducted), and cash-value life-insurance drag.

Scroll to Top