Probability of success
This is the 95% confidence interval from Monte Carlo sampling error. It narrows as you raise the number of simulations.
-year retirement
Balance over time
Percentile bands across all simulations, in today's dollars.
Show data table
Sequence-of-returns risk
How much of the failure risk is the order of returns — and when you're past the danger.
How is this calculated?
Every simulated life produces a specific sequence of yearly returns. We run each one twice: once with the returns in their actual order (what the rest of the tool does), and once smoothed — every year replaced by that same path's geometric-mean return, so the total compound growth over the whole plan is identical and only the ordering is removed.
Each failing path is then sorted into one of two causes:
• Sequence failure — fails in the real order but
survives when smoothed. The returns were adequate; the bad order (a poor early stretch
hitting the portfolio while you withdraw) is what sank it.
• Magnitude failure — fails both ways. The returns were simply
too low for the spending, so no reordering could have saved it.
The headline figure is sequence failures ÷ all failures, and the bar above shows the same split across every outcome (survives / magnitude / sequence). A few paths do the reverse — fail smoothed but survive in their real order because the ordering happened to help; those are set aside, not counted as failures.
When can you breathe easy? Success probability at each age in retirement, given your inflation-adjusted balance is still at or above .
Show data table
Sensitivity sweep
Vary one assumption across a range; hold the rest constant.
Show data table
What moves the needle most
Each bar shows how far success swings if that one assumption is off by a plausible amount, everything else held fixed. Longest bar = your biggest lever.
How to read this
For each assumption I nudge it to a plausible worse and better value — dollars by ±15%, ages by a few years, allocation by ±15 points, tax/fees/floor by a small amount — and re-run the simulation, holding everything else at your current plan. The bar spans the two resulting success rates (the amber side is worse, the blue side better), split at your current "now" line. The small numbers at each end are the input values that produced them. Bars are sorted by swing, so the top row is what your plan is most sensitive to. Rankings depend on those assumed ± ranges — treat it as a guide to relative leverage, not exact magnitudes.
Show data table
Success surface
Two assumptions at once. Each cell is the success probability; the amber line is your target frontier.
Show data table
Step-up ladder
Not one retire/don't-retire number — a rung per lifestyle tier. Each tier holds the target success rate fixed and solves for the other half: name a spend and get the earliest age, or name an age and get the most you could spend.
Tiers
Name the rungs of your own ladder. Each one is anchored on whichever half you actually have an opinion about; the other is solved for.
Scenarios
Variations on what you earn after stopping. Dates measured relative to retirement slide with every age the solver tries — that's what makes "a break, then part-time" one line instead of one per age.
Get a written reading of this plan
The charts say what your success probability is. They can't say whether it's the right thing to steer by, what the failure fraction would actually cost you, or which of your assumptions is doing the most work. These build a prompt carrying everything computed above — the plan, the ladder, the sensitivity ranking — and ask an AI chat model for the reading. The numbers come from here; only the interpretation comes from the model.
Read this before you paste. With amounts puts your real balance, spending and income into a third-party service, where it may be stored or logged. Ratios only says everything as multiples of your balance and percentages of it, the way private mode renders the page: the whole analysis works in those terms and none of it needs dollars. Even so, the ratios variant still carries your ages, your retirement date and the shape of your income — much less than the first, but not nothing.
Show the prompt text
How to read this
Every rung fixes your target success probability and solves for one number. A tier anchored on spend asks "at this lifestyle, when is the earliest I could stop and still clear the target?"; one anchored on age asks "if I stop then, what's the most I could spend?" Both are found by bisecting the actual simulation — the same engine as everything else, narrowed to the crossing point rather than read off a grid, so the figure is exact to a year or a few hundred dollars rather than to the width of a heatmap cell.
Each tier carries one dot per scenario, joined by a line: the line's length is the finding — how much those assumptions are worth to that rung of the ladder.
By default the axis spans the answers, not the whole search. Retiring in your thirties and planning through 110 means seventy-eight years are searched to answer within about twelve of them, and an axis drawn to the search bounds would pile every rung against the left edge. The range actually searched is stated in words just under the boxes above, and the Chart axis box there can show that full range instead — a fitted axis magnifies small gaps between rungs, which is the right default but not the only honest view.
A hollow, dashed dot means there was no crossing to find, and the figure beside it says which way. "Already, at 55" — the target is met from the first age searched, so there is nothing to wait for. "Not by 94" — no age in range reaches it. "Over $210k" — the spending search hit its own ceiling, so raise the box above rather than reading it as an answer. "Not at any spend" — the plan misses the target even spending nothing, so the shortfall is somewhere other than lifestyle. Those markers sit at whichever end of the axis they ran off, which is usually past the fitted range — so read the figure beside them, not the position.
The pale band — switched on from Arrival range above — is where that rung's answer actually lands. The dot is today's forecast; the band re-solves the rung at the 10th, 50th and 90th percentile of the balance you might reach its date with, so it spans what the market can still do between now and then. Hover a rung for all three figures, or read the low draw columns in the data table, which give the 10th-percentile answer and what it costs against the dot — +3 yrs, or so many thousand a year less. That cost is the honest content of a failure probability: not ruin, but a mid-course correction you would see coming.
Two things follow from how the question is asked. On an age panel the band is one-sided — you cannot stop earlier than the date you asked about, so a good draw sits on the dot and only a bad one moves it right. And a rung with no crossing gets no band: "already, at 55" has nothing to arrive at, and "not by 94" never arrives. Solving the band roughly doubles the work of drawing the ladder, so it is off until you ask for it — switch Arrival range above to Show. The analysis prompt below carries these figures either way, since nothing there competes for space.
One caveat on the age search. It assumes retiring later doesn't make things worse, which is almost always true but not guaranteed: a retirement-relative income stream slides along with each age being tried, and guardrails reset off the balance on the day you stop. Where the relationship doubles back, the search finds a crossing rather than provably the earliest one. Common random numbers keep it stable — the same plan always gives the same answer — but the sensitivity sweep over retirement age is the place to check the shape if a rung looks wrong.
Show data table
Glide corridor
A rung's answer is a probability, and a probability is an awkward thing to steer by — it is guaranteed to move, so watching it year to year tells you little. This turns it into something you can check: the balance you'd need at each age between now and that rung's date to keep it alive, drawn over the balance you're actually projected to reach. The reading is am I above the line?
The tiers are the ones on the Step-up ladder above, and the corridor holds that card's target success — it has to, or the two would be solving to different bars and quietly disagreeing. One tier at a time, against the first scenario switched on there: this is a single-rung view, and the comparison between scenarios is what the ladder itself is for.
It assumes the plan keeps running — contributions continue to the date — so the line means "am I on track?", not "could I coast from here?". On a plan that saves heavily those are very different, and the line sits far below your balance early on for exactly that reason.
How to read this
The dashed line is the balance that would hold this tier at the target rate if you were standing at that age today — solved by bisecting the simulation on the starting balance, the same engine as everything else. Behind it are the percentile bands for where your balance is actually projected to go. Above the line is on track; below it is not.
The reading watches the 10th percentile, not the median. A rung is defined as the point where the plan hits its target, so the median clears its own corridor very nearly by construction — it would report "above" for any rung the ladder could solve, which is no news. The lower band is where the content is: the age at which a bad run stops being something to ride out and starts being something to act on.
The vertical axis is fitted to these two series rather than anchored at zero. The whole reading is the distance between lines that sit close together, and a zero-based axis flattens it to nothing — but a balance chart that starts partway up is also how a small difference gets sold as a large one, so the axis label states where it begins and the data table carries the unscaled figures.
A rung with no crossing gets no corridor: there is no date to march toward. Solving one is a bisection per age on top of the whole ladder above, which is why it is off until you pick a tier.
Show data table
Method & assumptions
Historical bootstrap. Returns are not modeled with a formula. Each simulated year uses a real calendar year (1928–2025) — that year's S&P 500 total return, 10-year Treasury return, and CPI inflation together — so high-inflation years carry their actual effect on real bond returns and purchasing power.
Return sampling. Independent years draws each year at random (no memory). Blocks draws contiguous runs of the chosen length (a circular block bootstrap), preserving real sequences like the 1929–33 crash or 1973–74 stagflation. It is tempting to call blocks the conservative choice, and this model does not bear that out. What blocks mostly preserve is the record's mild mean reversion, which independent years destroy: a bad run is somewhat more likely to be followed by a good one. Over a long horizon that narrows the spread of outcomes without moving the middle of it. Running this engine with no withdrawals over 60 years, five-year blocks leave the median end balance where independent years put it, but lift the 10th percentile by about a fifth and cut the 90th by about a seventh.
So the question is not how long your plan runs but where it already sits. A tighter distribution helps a plan whose middle path survives — the floor rises under it — and hurts one that was relying on a lucky tail, because that tail is what gets trimmed. The crossover is near 50% success: above it blocks read roughly two to four points friendlier than independent years, below it one to two points harsher, and the sign holds at every horizon from twenty years to eighty. Sequence-of-returns risk is real and this model shows it plainly elsewhere — see Sequence-of-returns risk above — but switching to blocks is not the lever that surfaces it.
One caveat on all of that: the mean reversion is a property of a single 98-year record. It is a real feature of that record rather than a modeling choice, but a plan that only clears its target under blocks is leaning on the next fifty years reverting the way the last hundred did. Neither mode is the safe one to trust by default — the gap between them is the thing worth looking at.
Real dollars. Nominal returns are converted to real using that year's inflation
((1+nominal)/(1+inflation) − 1). Base spending stays constant in today's dollars.
Income streams. Each stream reduces the net withdrawal while it's active (its year range). Inflation-adjusted streams (e.g. Social Security) hold constant real value. A non-adjusted stream (a typical fixed pension) is level in nominal terms, so its real value is divided by the inflation accumulated since it began — it quietly buys less each year.
Stream timing. A stream's window is read on one of two bases. At fixed ages is an age you
name, and the stream stays there whatever else you change. Relative to retirement counts years from
the year you retire (0 = that year, 3 = three years later, -2 = two
years before), so the stream is re-anchored every time the retirement age moves — including at each point of
a sweep or heatmap. That is what lets one heatmap answer “retire at X, earn Y from the next
job”: the job's start slides along the X axis instead of sitting at a single age. Either way a window that
resolves to before today is clipped to today, and one whose end lands before its start simply never pays.
Spending strategy. Fixed spends a constant real amount. Guardrails (Guyton–Klinger-style) reassess each year: if your withdrawal rate — base spending ÷ balance — rises a full band above the plan's initial rate you cut spending by the step (down to the floor); if it falls a band below, you raise it by the step (up to the ceiling). The "lean-year spend" stat shows the typical low point.
Allocation. Fixed holds one stock/bond mix. Glide path moves the equity share linearly from start to end across the horizon; a rising path (start < end) is the "bond tent."
Common random numbers. One fixed matrix of sampled year-sequences is reused across every run and every sweep point, so differences come from the assumption you changed, not from re-rolling the dice. Reshuffle to draw a new matrix.
Taxes. A single effective rate on portfolio withdrawals: when the portfolio must fund a shortfall,
it withdraws shortfall ÷ (1 − rate) so the tax comes out of the portfolio too. Income streams
are assumed after-tax and aren't taxed again. This is a deliberate simplification — it doesn't distinguish
Taxable / Tax-deferred / Roth accounts, brackets, RMDs, or Social Security taxability. Use your own
estimated effective rate (total tax ÷ total withdrawals); 0% if withdrawals are tax-free.
Caveats. U.S. history is one sample of possible futures, and this is an educational model — not personalized financial advice. Data: NYU Stern (Damodaran) for stock/bond returns; BLS CPI for inflation.