You deduct at one rate and repay at another
You save tax at your marginal rate — the rate on your last dollar. You pay it back at your average rate, because the standard deduction and the bottom brackets refill every retirement year. The gap between them is the whole decision.
Where the answer flips, for your assumptions
What each world holds, and who owns it
The two stacks are the same height by construction — same contributions, same growth, only the bucket differs. The extra block is the taxable account the traditional saver builds with the tax refund.
Get the spreadsheet
The full workbook — every bracket, every year, every assumption in its own cell, 1,481 formulas — plus the next model when it's published.
Method, assumptions and what this does not do
How the comparison is kept fair. A dollar into a Roth costs a full dollar of take-home pay. A dollar into a traditional account costs less, because it lowers this year's tax bill. So in the traditional world the tax saved each year — computed by differencing the tax bill with and without the deferral, which handles bracket straddling exactly — is invested in an ordinary taxable brokerage account, where dividends are taxed annually and gains are taxed on sale. Out-of-pocket cost is then identical on both sides.
The metric. Maximum sustainable real after-tax spending from your retirement age to your planning age, solved by bisection. Withdrawals come from the taxable account first, then pre-tax, then Roth, and each is taxed properly against the bracket table below.
Validation. Run in a synthetic world with one flat 25% bracket, no standard deduction, no contribution cap and no dividend drag, the two accounts must be exactly equal — multiplication commutes. The engine returns a relative error of 0.00000. This JavaScript engine is also checked against the original Python model across 14 input combinations and 84 assertions, and agrees to floating-point precision.
What it does not do. It does not model the taxation of Social Security benefits — other retirement income is treated as fully taxable, which slightly favours traditional. It ignores the 3.8% net investment income tax on the taxable account, which slightly favours Roth. It assumes your employer match goes to a pre-tax account, which is the default though SECURE 2.0 allows a Roth match. It assumes current law persists. If you are 50 or older with prior-year wages above $150,000, your catch-up contributions must be Roth from January 2026 regardless of what this says.
It is a model, not advice. Its assumptions are visible above and you should change them.