Every formula the planner uses, with worked examples that produce the exact numbers the tool shows. Open a spreadsheet, type these in, and you should land on the same figures to the dollar. If you don't, one of us has a bug — and we'd like to know.
Each holding compounds once a year at its own rate. Contributions land after growth.
closing = opening × (1 + rate) + (monthly contribution × 12)Worked example. $100,000 in one fund at 10% a year, adding $1,000 a month:
| Year | Opening | Growth (10%) | Added | Closing |
|---|---|---|---|---|
| 2026 | $100,000 | $10,000 | $12,000 | $122,000 |
| 2027 | $122,000 | $12,200 | $12,000 | $146,200 |
| 2028 | $146,200 | $14,620 | $12,000 | $172,820 |
| 2029 | $172,820 | $17,282 | $12,000 | $202,102 |
Spreadsheet: =B2*1.1+12000 down a column. If your sheet compounds monthly you will land a few percent higher — that is the difference between the two conventions, not an error.
You type spending in today's money. It compounds at your inflation rate from today, not from the retirement year, because prices don't wait for you to retire.
lifestyle cost in year Y = spend × (1 + inflation)^(Y − current year)Worked example. $100,000 a year at 5% inflation, retiring in 2028 (two years from a 2026 start): 2028 costs $100,000 × 1.05² = $110,250; 2029 costs $115,763; 2030 costs $121,551.
To put a dollar in your pocket you have to sell more than a dollar. One flat rate applies to every withdrawal.
gross sold = net needed ÷ (1 − rate) tax = gross − netWorked example. $1,000,000 in a fund at 0% growth, 20% flat tax, spending as in section 2:
| Year | Lifestyle cost | Gross sold | Tax | Net spent | Closing |
|---|---|---|---|---|---|
| 2028 | $110,250 | $137,813 | $27,563 | $110,250 | $862,188 |
| 2029 | $115,763 | $144,703 | $28,941 | $115,763 | $717,484 |
| 2030 | $121,551 | $151,938 | $30,388 | $121,551 | $565,546 |
Check the first row: 110,250 ÷ 0.8 = 137,812.5. ✓
Each holding sits in an account. Roth withdrawals cost nothing. Pre-tax (401k/IRA) withdrawals are taxed in full at your income rate. Brokerage withdrawals are taxed only on the profit slice, at your capital-gains rate:
gain fraction = (value − cost basis) ÷ value effective rate = gain fraction × capital-gains rate gross sold = net needed ÷ (1 − effective rate)Worked example. A $1,000,000 position you paid $400,000 for, 15% capital-gains rate, need $100,000 net: gain fraction = 600,000 ÷ 1,000,000 = 60%; effective rate = 60% × 15% = 9%; gross = 100,000 ÷ 0.91 = $109,890.11; tax = $9,890.11. ✓ matches the tool to the cent.
When you sell part of a position, the same fraction of your cost basis goes with it, so the gain fraction stays honest in later years. Money you contribute raises the basis in full — you already paid tax on it. Leave the basis blank and the tool assumes you bought at today's price, so only future growth is taxed.
Tax-smart sells brokerage first, then pre-tax, and leaves Roth for last — because Roth growth is never taxed, it benefits most from being left alone. Pro-rata sells a slice of everything each year.
Worked example. $200,000 brokerage (no gain) + $800,000 Roth, spending $100,000 a year, no growth:
| Year | Tax-smart | Pro-rata | ||
|---|---|---|---|---|
| Brokerage | Roth | Brokerage | Roth | |
| 2027 | $100,000 | $800,000 | $180,000 | $720,000 |
| 2028 | $0 | $800,000 | $160,000 | $640,000 |
| 2029 | $0 | $700,000 | $140,000 | $560,000 |
Same holdings, same spending. The difference shows up as tax the moment either account has a gain — on the planner's example portfolios the gap has run to hundreds of thousands over a plan.
Worked example. $197 today, target $575 by end of 2030 from 2026: 5 compounding years; (575 ÷ 197)^(1/5) − 1 = 2.919^0.2 − 1 = 23.89%. The projection then lands the price at $575 in 2030. If you take a growth rate off someone else's sheet, it was worked out on their horizon — enter their price target instead and the planner will hit that price in that year.
Each holding grows at its own rate through its fast-growth year, then at the "after" rate. Nothing compounds at 50% forever. Bear and Bull scenarios scale the rate by your multipliers (Bear pushes a negative rate further from zero, never toward it).
rate in year Y = own rate if Y ≤ fast-growth year, else after-rate bear = rate − |rate| × (1 − bear multiplier); bull = rate + |rate| × (bull multiplier − 1)A schedule sells a fixed percentage of the shares you hold today each year, valued at that year's price. A ladder sells a percentage of today's shares the first year the price reaches each rung. Tax is charged on the sale (section 4) and the net proceeds are moved into the holding you choose, raising its cost basis by the amount moved.
amount sold in year Y = today's value × % × (price in Y ÷ price today)Worked example. 1,000 shares at $100 growing 26% a year; ladder 25% at $200, 25% at $400. Price passes $200 in 2028 → sells 250 shares × $200 = $50,009 (the tiny excess is the price being $200.04 that year); passes $400 in 2031 → 250 shares × $400 = $100,038. A rung the price never reaches never sells; Monte Carlo reports how often that happens.
An Income row (pension, Social Security, rent) is not capital. It pays a yearly amount from its start year, growing at its own rate from today, and reduces what the portfolio must fund. Income before retirement, or above spending, is invested into your largest diversified holding in an already-taxed account.
portfolio must fund = max(0, lifestyle cost − income) surplus invested = max(0, income − lifestyle cost)The Future $ / Today's $ switch changes units only, never the plan. Every figure is divided by the inflation factor for that year:
today's $ = future $ ÷ (1 + inflation)^(Y − current year)A useful check: in today's dollars your spending reads the same number every year, because it is the same lifestyle. If it slopes, something is wrong.
The crash test replaces the growth rate with −X% for the first N years of retirement and re-runs everything. The guardrail line then searches for the spending level that would survive that crash (bisection on spending), and separately for the first later retirement year that would survive at your planned spending.
Each run re-plays the whole projection with returns drawn at random around your rates. Three things to know:
Your rate is a CAGR — a geometric rate — so the median simulated path equals the deterministic one. The yearly return is exp(ln(1 + rate) + σ·z) − 1 with z a standard normal draw. (Some tools subtract σ²/2 here; that preserves the arithmetic mean instead and quietly turns a 10% index fund into a 5% median path. We don't.)
Holdings move together. Each year one shared market shock is drawn, plus one private shock per holding: z = √ρ · market + √(1−ρ) · own, so every holding still has unit variance but they are correlated at ρ (Mostly = 0.8, Somewhat = 0.6, Barely = 0.3). Treating a tech-plus-crypto portfolio as independent makes it look far safer than it is.
Volatility calms down after fast growth. Past a holding's fast-growth year its volatility is capped at 30% (an ordinary share). Otherwise crypto-level swings compounded for forty years produce "lucky" outcomes in the billions that nobody should plan around. Defaults: equity 30%, crypto 70%, custom 20%; the Calm/Typical/Wild control scales them ×0.7 / ×1 / ×1.4; any holding can be set by hand.
Success rate = share of 1,000 runs that never run short of spending. Percentiles are the ending balance.
"Yours after tax" is what you would keep if you sold everything today: each holding's value less the tax on its gain (section 4) at today's rates. It is the number your statement doesn't show you.
Found a number that doesn't reconcile? That is exactly the kind of thing we want to hear about.