0
0%
$0
$0
$0
$0
$0
- ⓘ
-
-
Monte Carlo Experiment 🎲
The same plan run 12 times in Synthetic mode: three random seeds at each of four path counts. Watch the sampled Equity range jump around at 5 paths and settle as the count climbs to 100. Each row is exactly what "My Plan Only" reports for that seed and path count, so nothing here is a special demo number.
Synthetic mode draws returns from two numbers: μ (Growth) mirrors your Assumptions Growth % and is the average yearly return the model aims for; σ (Volatility) is how much a typical year swings around it. Set them in the boxes below.
| Paths | Seed | Equity range | Inflation range |
|---|
Play further: change any assumption in the sidebar (Growth %, spending, ages) and click Experiment again, or edit Seed and Paths below and use "My Plan Only" to run a single case. Try setting Volatility (σ) higher (say 20) or lower and re-running to watch the Equity range widen or narrow. The Input Distributions panel below is drawn from the last run (100 paths). Note that Synthetic inflation does not yet vary between paths, so its range stays fixed.
For more information about Monte Carlo, its strengths and weaknesses, please see the Monte Carlo and Chance of Success section of the README.
▸ Input Distributions
Per-year distribution of sampled returns and inflation across all paths. Band = p10–p90 · solid = median · dashed = min/max.
Saved Scenarios
Change Log
The most recent releases are summarized here (up to six). Full write-ups of every release live in optimizer_changelog.md. For what the tool does and how to use it, consult the README.md.
- 11.1a3f
Annual Details is no longer mistaken for an advertisement by ad blockers.
- Annual Details could open with only its column boxes and no table. The likely cause is that an ad blocker, such as Brave Shields, took parts of the table for advertisements and hid them. The table's parts now have names those blockers leave alone.
- 11.198b
Ages in Annual Details count up in Current $, Feedback sends again, and the tables keep their headings in view.
- With the Future / Current switch on Current, the age columns no longer shrink with inflation and read the same as in Future (issue #247). No plan's numbers change.
- Feedback spam prevention was stopping messages from being sent, and has been fixed.
- Annual Details and the Optimizer table scroll inside their own box, with a horizontal scrollbar above the table as well as below, keeping their headings (and in Annual Details the year column) in view. They and the Monte Carlo tables have cell borders.
- A block copied from any of them pastes into a spreadsheet as rows and columns.
- The Import/Export tab is now called Save/Load and the Documentation tab is not called INFO.
- 11.1933
Four state tax tables were charging too much, and are corrected.
- North Dakota, Nebraska, South Carolina and Georgia were each charging too much state tax and now match what the state publishes for 2026: North Dakota has a 0% band the table did not carry, South Carolina rewrote its tax for 2026, Nebraska is graduated rather than flat 4.55%, and Georgia's larger standard deduction starts this year. On a couple drawing $120,000 a year, state tax falls 91% in North Dakota, 25% in South Carolina and 13% in Nebraska.
- 11.1917
Medicare and IRMAA costs now grow on a published path instead of your inflation rate.
- Medicare premiums and IRMAA surcharges used to grow at your CPI plus your Inflation, about 5.8% a year on the defaults. They now follow the path the Medicare Trustees publish: about 6.6% a year to start, easing toward 3.8% in the long run. The new path starts higher and ends lower, so whether your plan pays more or less depends on how much of your Medicare life is early. If your plan reaches an IRMAA tier, its numbers will move.
- Medicare cost no longer varies from one Monte Carlo path to another, which narrows the spread slightly.
- 11.18fc
IRMAA, state tax tables and ACA income limits corrected; Saved Scenarios handles any name.
- The Medicare IRMAA surcharge contained an error that has been corrected: it was charged at the wrong tier and included the standard premium, so it came out too high for every income above the first threshold. The surcharge and the base Medicare premium are now separate figures matching what Medicare publishes for 2026, and the income thresholds match to the dollar. If your plan reaches an IRMAA tier its numbers will move, and a plan close to the line may now fund where it did not before.
- The tax tables for seven states contained errors that have been corrected, and the rates and brackets now match what each state publishes for 2026. Minnesota, Montana and Wisconsin were the largest, each charging more state tax than it should; Indiana, Kentucky and Mississippi have had rate cuts since the tables were last set; and Virginia carried a top bracket that does not exist. If your plan uses one of those states, its numbers will move.
- The ACA Cliff limits contained an error that has been corrected. The error was small, and it made each limit slightly too strict. They now use the 2025 Federal Poverty Level figures, the ones 2026 coverage is measured against.
- A saved scenario whose name contains a double quotation mark can now be opened, loaded, deleted and exported from Saved Scenarios.
- 11.18bf
GK-style Guardrails corrected; the risk-based rails get one preset menu, the article’s own set, a replay solve, milestones and a column set.
- GK-style Guardrails contained an error that has been corrected: spending could be cut in the year Social Security or a pension started. The rule now measures what your portfolio funds (spending after Social Security and pension) against your plan’s own draw for the same year, so on your plan’s own assumptions nothing changes and it acts when markets take you off the plan. See the Details.
- One preset menu, Risk-based guidance, under the Guardrails switch and always in view: High Safety, Normal, More Tolerant (a cut returns to 70%), the new More Risk (the 2024 article’s own numbers) and Custom, four boxes of your own. The panel’s Market paths menu is gone; the rails solve on the Monte Carlo tab’s market.
- Solve rails on this path re-solves the chance of success along a replayed Monte Carlo path. Every Guardrails cut and raise is a milestone on the charts, and Annual Details has a Guardrails column set (ruleSpend, ruleAdj, vsPlan%). The Limit menu is in order of the income each entry caps, and its figures are that income. No other plan numbers change.
Every earlier release is written up in optimizer_changelog.md, newest first.
How to Use
- Withdrawal Strategy: The Withdrawal Strategy box (top of sidebar) controls how the simulation draws from your accounts each year. Set the After-Tax Spend goal (annual after-tax income needed) and Spend Delta (yearly change - default −1% per historical data). The IRA Goal field (just below the strategy box) is the balance to bring your IRA down to, entered in today's dollars and inflation-adjusted (CPI) to each year so it tracks the inflation-indexed brackets, IRMAA tiers, and ACA cliffs it is meant to manage. It is a target, not a minimum to keep: required distributions, an Extra Annual Roth Conversion, and spending your other accounts cannot cover can all take the IRA below it. Reduce IRA in N Years sizes its withdrawals to reach it in N years; Fill Fed/IRMAA Bracket and IRA Draw % take their planned IRA withdrawals only from the part of the IRA above it, so it matters only once the balance nears it. Proportional Withdraw and Ordered do not use it at all, and the field grays out when one of them is selected.
Detailed Strategy Discussion…
Common to all strategies: QCDs (if configured) are applied first - they satisfy the RMD requirement dollar-for-dollar without adding to taxable income. Any remaining RMD obligation after QCDs is then taken as a taxable IRA withdrawal. Both happen before strategy logic runs.
Proportional Withdraw +% - draws IRA, Brokerage, and Cash proportionally (relative to their balances) to cover the spend goal. An optional IRA-only boost adds boost% × spend goal on top of that; the after-tax surplus flows to Roth conversion. At 0% boost this is the pure proportional baseline. Gap fill if still short: Brokerage + Cash (60/40), then Roth, then back to the IRA as a last resort.
Reduce IRA in N Years - calculates the annual IRA draw needed to amortize the IRA down to the IRA Goal (today's dollars, inflation-adjusted to each year) over the N years you choose (similar to a mortgage payment). RMDs count toward that target; the strategy draws any remaining amount beyond RMDs. Gap fill if the IRA draw alone doesn't cover spending: Cash → Brokerage → Roth, then back to the IRA as a last resort.
Fill Federal Tax Bracket / IRMAA Tier (soft ceiling) - draws IRA up to a chosen ceiling (top of a federal bracket or an IRMAA tier threshold), then fills any remaining spending from non-taxable sources in order: Cash → Brokerage → Roth. The ceiling is soft: if spending still can’t be met after those are exhausted and the IRA has funds, the simulation draws extra IRA above the ceiling to fund mandatory spending - because spending is a hard requirement and the alternative (an unfunded shortfall while a large IRA sits idle) is worse. The amount drawn above the ceiling appears in the
ForcedIRAcolumn with that year’sBracketOverage; the consequence is extra tax (or, for IRMAA, a Medicare surcharge). The ceiling also defines the room available for Roth conversions.ACA Cliff (strict ceiling) - draws IRA only up to a chosen multiple of the Federal Poverty Level, then fills spending from Cash → Brokerage → Roth. Unlike the bracket/IRMAA ceilings, the ACA cap is strict: it is never breached, because exceeding it forfeits the entire ACA premium subsidy (a cliff, not a gradual cost). If spending can’t be met within the cap, the plan is genuinely untenable at that spend level - the shortfall is shown (red rows) and the strategy is flagged ⚠️ in the Optimizer, rather than silently overspending the cap. Note that on a large pre-tax IRA, required minimum distributions alone can push income above a low FPL multiple, making ACA targeting infeasible regardless of withdrawals. The cap ends at Medicare. ACA premium subsidies stop when Medicare eligibility begins, so from the year every living person in the plan is old enough for Medicare there is no subsidy left to protect and the cap is dropped - the strategy runs as Proportional 0% from that year onward. Until then the cap is measured against household income, so if one spouse is already on Medicare their RMDs and Social Security still count against the other spouse’s limit.
IRA Draw % - withdraws a fixed percentage of the current IRA balance each year regardless of the spend goal (RMDs count toward the target). Gap fill if the after-tax IRA draw falls short of spending: Cash → Brokerage → Roth, then above the stated percentage as a last resort. Useful for a mechanical, balance-proportional drawdown pace.
Ordered - draws from accounts in a strict sequence; unlike other strategies, all spending is handled in this ordered pass (nothing is pre-withdrawn). Because the sequence is the one you chose, Ordered is the only strategy that will not draw extra IRA outside it, so it can leave a small residual shortfall while an account later in the sequence still holds money. That is the strategy answering your question, not a failure to find the money. The fill follows the same order: any year the plan runs a surplus (income beyond spending), that surplus is banked in the first account your sequence would draw that can actually receive a deposit, Cash or Brokerage (Roth and the IRA are contribution-limited). That keeps it first in line to be spent again next year instead of stranded in a last-drawn account. A Cash-first sequence is unchanged from the older cash-only behavior; a Brokerage-first one banks surplus in Brokerage. Six of the 24 possible sequences are offered, listed with the ones that most often came out ahead in testing at the top.
- CBRI (Cash → Brokerage → Roth → IRA): spends taxable money first and leaves the IRA for last, taking Roth ahead of it. Best of the six most often in testing, and the one to try first if the IRA is large enough that a late, forced drawdown is the risk.
- CBIR (Cash → Brokerage → IRA → Roth): depletes taxable accounts first, letting tax-advantaged balances compound longest. The conventional "textbook" depletion order, and the default.
- CIBR (Cash → IRA → Brokerage → Roth): spends Cash, then draws the IRA before touching the brokerage account. Useful when brokerage gains are large enough that realizing them is the expensive move, or when filling low tax brackets early matters more.
- BCIR (Brokerage → Cash → IRA → Roth): sells brokerage before spending Cash, keeping the cash buffer intact longest.
- RIBC (Roth → IRA → Brokerage → Cash): burns tax-free Roth first; useful for stress-testing Roth-heavy portfolios or modeling an intentional Roth-first drawdown.
- BIRC (Brokerage → IRA → Roth → Cash): clears brokerage before tax-deferred, and spends Cash last.
Guardrails (GK-style) are not a strategy: they decide how much you spend, under whichever of the strategies above you choose. See Guardrails under Strategy panel controls, below.
Cycle Brokerage - a toggle that layers on top of any strategy. When enabled, the simulation alternates between IRA draw years and brokerage harvest years. The cycle length N is recomputed each year as round(IRA ÷ Brokerage), so the ratio self-corrects as balances evolve. In a harvest year, spending is funded from brokerage capital gains instead of IRA withdrawals, realizing gains at the preferential LTCG rate (often 0% for many retirees) rather than as ordinary income. Advantages: (1) steps up the cost basis each cycle, reducing future LTCG tax; (2) frees the full IRA bracket headroom for Roth conversions in harvest years; (3) lower MAGI in IRA years can keep IRMAA tiers lower. DRIP (dividend reinvestment) is automatically forced on so dividends reinvest into brokerage rather than leaking to Cash as ordinary income. Two orderings are available: IRA-first (🗘 red) runs N IRA years then harvests - better when the brokerage has high unrealized gains (delay harvest to let IRA deplete first); Brokerage-first (🔄) harvests immediately at the start of each cycle - better when brokerage basis is high (low gains) so the tax cost of harvesting is small. The Optimizer and Monte Carlo always evaluate all three variants. Caveats: harvest years raise MAGI, triggering IRMAA surcharges 2 years later and potentially causing ACA cliff loss; with a very high-gains brokerage the strategy can become less effective as effective LTCG rate rises over time.
Strategy panel controls - these sit with your strategy in the sidebar and affect every tab:
- Guardrails - a switch under Spend Delta that lets spending move with your savings instead of holding it fixed, under whichever withdrawal strategy you choose. It is a Guyton-Klinger-style rule rather than the published one: what it measures is your whole spending against your savings, where the published rule watches what your portfolio withdraws - a different number for anyone whose Social Security or pension starts later. The README’s Limitations and Restrictions section names all four places the two differ. Your first year sets the safe level: what you spend for each dollar you have saved. Each year after that, your spending is compared with the safe level for the savings you have then. If your savings have fallen far enough that spending is more than a set band above it, spending is cut; if they have grown far enough that spending is more than the band below it, spending is raised, by the same amount either way. After a year with a negative return, the inflation raise is also skipped while spending is above the safe level. The tool uses a band of ±20% and a step of 10%, and the sentence under the switch states the values in force; the two settings can be changed only in the advanced view. Spend Delta still applies on top, so with the default of −1% a year both shape your spending. The Optimizer and Monte Carlo run every strategy with your Guardrails setting, plus your own plan with the switch the other way around, so you can see what Guardrails are worth to your plan, and Monte Carlo's My Plan Only runs just your plan both ways. Because the two spend differently, compare them on Spendable as well as ending wealth. A plan saved when Guyton-Klinger was a withdrawal strategy loads as Proportional Withdraw at 0% with Guardrails on, which gives the same numbers.
- Maximize Conversions - gets as much into Roth as the plan allows, two ways at once. First, any IRA withdrawal surplus beyond the spend goal is converted to Roth rather than left in Cash. That is a same-dollar move: the money was already withdrawn and taxed on its way out, so this only changes where it lands, and nothing is lost to tax by doing it. Second, it uses available Cash to cover conversion taxes rather than letting those taxes come out of the conversion itself - the standard advice for Roth conversions, and what makes an Extra Annual Roth Conversion $ of $20,000 actually deliver $20,000 to the Roth instead of roughly $13,700 (see the field below). It only ever uses Cash you have: when Cash is short it covers what it can, and at $0 Cash it changes nothing. The two switches beneath it, Convert Excess to Roth and Use Cash, split it into its halves so you can run either alone. On by default in the Optimizer (see note below); toggle it on in single-scenario mode to match.
- Extra Annual Roth Conversion $ - a fixed dollar amount converted from IRA to Roth every year, on top of whatever your strategy and Maximize Conversions already do. Two things to know. (1) The amount you enter is the gross withdrawal from the IRA, and a conversion owes tax on it. Without Use Cash, that tax comes out of the conversion, so less arrives in Roth than you typed - $20,000 entered lands about $13,700 at a 31% marginal rate. With Use Cash on, Cash covers the tax and the full $20,000 lands. Either way, the Roth Conv column in Annual Details shows what actually arrived; the extraConv column (Opp. Cost category) shows the gross. (2) It is capped only by your remaining IRA balance each year - it does not stop at your IRA Goal, because a conversion moves money IRA-to-Roth rather than out of the household, and drawing the IRA down is usually the point. This is the same amount the Optimizer's Optimize Conversions search solves for, and loading a ⇌ row fills it in for you.
- Stop conversions after - the last year Roth conversions run. Enter a calendar year (for example 2031) or your age (for example 71); conversions stop the year after. Leave it blank to convert for the whole plan. The choice beside it sets what stops: all conversions stops both your strategy’s own bracket filling and the Extra Annual Roth Conversion $, while extra only stops just the Extra Annual Roth Conversion and lets the strategy keep filling brackets. Converting past the point where the tax paid stops earning its keep can leave you worse off than not converting at all.
- Roth before Brokerage - when a year’s spending needs more than your strategy itself withdraws, the shortfall is filled from Cash, then Brokerage, then Roth. Switch this on to take Roth ahead of Brokerage; Cash still comes first. Drawing Roth avoids realizing capital gains, but it spends the account that grows tax-free, so it helps some plans and hurts others, and nothing about a plan predicts which. The Optimizer runs it both ways and marks the alternative 🅡. Ordered ignores it and draws in the sequence you chose.
- Cycle Brokerage - layers cyclic IRA/brokerage alternation on top of any strategy (see Cycle Brokerage above).
Optimizer search options - these two live at the top of the Optimizer tab rather than the sidebar, because they change only what the Optimizer searches for and have no effect on your single-scenario plan, the charts, or Monte Carlo:
- Optimize Spend - after the Optimizer finds successful strategies, it binary-searches each one for the highest sustainable spend goal that still ends with at least two years of funded wealth. Those rows are marked ✦.
- Optimize Conversions - for the top five Optimizer strategies, sweeps additional fixed annual conversion amounts ($25k steps) to find the best Extra Annual Roth Conversion $ for each, and adds a ⇌ row per winner. Click one to load that whole plan, including the conversion amount, back into the sidebar. Slower (5–15 sec for large IRAs).
Charitable Giving (QCDs) - the Charitable Giving (QCD) block at the bottom of the Annual Income & QCDs section lets you enter a combined household annual QCD maximum. A Qualified Charitable Distribution is a direct transfer from a traditional IRA to a qualifying charity. It satisfies the RMD requirement for that year without adding to your taxable income, which can reduce or eliminate IRMAA Medicare surcharges. Rules: age 70½+ per person (the simulation uses birth month for precision); the IRS limit is $111,000/person/year in 2026, CPI-indexed annually. QCDs are sourced first from the larger eligible IRA, then the smaller. Two modes: Always (switch right, green) donates the full amount every eligible year regardless of tax situation - useful for regular charitable giving goals. As Needed (switch left) applies only as much as needed to drop two IRMAA tiers from your projected MAGI, or to escape the surcharge entirely - whichever requires fewer dollars. Use this when your primary goal is IRMAA avoidance rather than a fixed giving commitment. In either mode your entered amount is the ceiling - the simulation never exceeds it.
Optimizer note: Every Optimizer row converts surplus after spending to Roth, regardless of your sidebar setting - enable Maximize Conversions in the strategy panel to match that assumption in single-scenario mode. Cash-funded conversion taxes work differently: normally Optimizer rows just follow your sidebar setting, so toggling Maximize Conversions changes what the table reports. Under nerdknob the Optimizer instead sweeps it as its own dimension, listing each strategy both with cash-funded taxes (💵) and without, so you can see what that choice is worth rather than assuming it. Those extra rows only appear when you actually have Cash, since the feature does nothing without it.
- What is “Break Even”? When your plan does Roth conversions, the tool quietly runs your entire plan a second time with the conversions removed: the money stays in the traditional IRA, no conversion tax is paid, and that bigger IRA later forces bigger Required Minimum Distributions, taxed in whatever bracket you are actually in those years (including the higher Single rates a surviving spouse pays, and any Medicare IRMAA surcharges the RMDs trigger). Each year the two plans are compared on equal footing, and the earliest year the converting plan pulls ahead and stays ahead for the rest of the plan is marked as Break Even. A year where the converting plan is only briefly ahead before falling behind again does not count. It only appears if conversions actually happen, and shows “—” if the lead never becomes permanent. When it does show “—”, a ⓘ appears next to it; click that to pinpoint exactly which conversion year is the one that erases the lead for good, and how far the plan got before that.
Both plans are compared by after-tax portfolio value: taxable (IRA) assets are reduced by the tax that will eventually be owed on them, and non-taxable (Roth) assets count at face value. The net figure is shown as Total Wealth on the main chart. The IRA discount rate is either each plan's own current tax rate, or the Marginal Heirs Tax if you entered one (see 4. Assumptions). Conversions pay tax early, so the no-conversion plan usually leads at first; the crossover often lands when RMDs ramp up, or when one spouse passes away and the survivor’s tax rate jumps when filing Single, aka “the widow penalty”.
The year-by-year numbers are in Annual Details → Opp. Cost (the convOC column; excessOC is the same comparison for surplus IRA withdrawals banked to Cash, using the same permanent-crossover definition of Break Even). One caveat: with Guardrails on, the no-conversion plan may adjust spending in different years, since the guardrails react to that plan's own portfolio. That is the honest comparison, not an error.
- What does “Optimize for” do? The Optimizer always tests the same set of strategies. What changes is how they are ranked. The Optimize for selector at the top of the Optimizer tab picks the goal used to sort the table, so the best plan for that goal appears first, the ⚓ baseline moves to the best no-conversion plan under the same goal, and the Rank column renumbers to match. It also decides which columns the table shows: each goal keeps the handful of columns that answer its own question and puts the rest away, so you read ten columns instead of twenty-one. It never changes the underlying numbers, only which plan the tool puts in front of you and which figures it shows about that plan. Nothing is discarded - the Show all columns link beside the selector puts every column back on screen at once, and the goal still sets the row order. Clicking any visible column header sorts by that column instead; changing the goal, or switching the columns back, returns the table to goal order. Hover over any row for its spend goal and how many years it funded. The choices:
- Tax Flexibility (the default) favors plans that finish with your money spread evenly across the three tax treatments: pre-tax (IRA), Roth, and taxable (brokerage and cash). An even spread means that in any future year you can draw from whichever account is cheapest at the time, rather than being forced into whatever one account you have left. Because a plan that simply runs out of money would technically be perfectly “even” at zero, this only compares plans that also finish among the wealthiest, then picks the most evenly divided of those.
- Maximum Net Wealth ranks by after-tax wealth remaining at the end of the plan, with the tax still owed on the IRA subtracted first. This is the estate or legacy view.
- Avoiding Widow & RMD Tax ranks by how much forced, higher-rate taxation the plan leaves behind. It adds the tax paid on Required Minimum Distributions during the plan to the tax still owed on whatever is left in the IRA at the end. Both problems come from the same place, a large surviving pre-tax balance, which drives bigger RMDs and is taxed at the higher Single rates once one spouse has passed.
- Minimum Lifetime Taxes ranks by total tax paid over the whole plan, in today's dollars. Note this counts only tax actually paid during the plan, so it can favor leaving a large untaxed IRA behind. Compare it against Avoiding Widow & RMD Tax.
- Maximum Spending ranks by the total you actually get to spend, in today's dollars. Most useful with Guardrails on, where spending varies.
- Maximum Roth ranks by the Roth balance at the end of the plan.
- Balanced (Wealth + Spend) is the older default: after-tax ending wealth plus what you spend, with spending weighted slightly higher on the view that a dollar enjoyed beats a dollar bequeathed.
- Roth Conversion Effectiveness and Earliest Break Even rank by the conversion columns, so they are only meaningful when Optimize Conversions has produced ⇆ rows. Plans without them sort to the bottom.
- 1. Profile & Ages: Enter the birth year and month of each person and estimated life expectancy. The current age, RMD start age, and projected first-year RMD amount are shown below each person's birth fields and update live. Use the Include Spouse checkbox to model a single taxpayer - unchecking it hides all spouse fields and excludes the spouse from the simulation. Retirement Start Age is the age at which you stop earning income; the simulation inflates tax brackets, SS COLA, and spending forward to that year automatically. You can enter your age or the calendar year you retire (a number of 1000 or more is read as a year), and it is one start for the household: both spouses begin retirement in the same year.
- 2. Assets at Retirement Age: Enter the balances you expect to hold in the year the plan starts - the heading names that year. This tool has no accumulation phase: it never grows your accounts between today and a later retirement year, so if that year is in the future, forecasting the balances to it is yours to do. Amounts are in that year's dollars. Brokerage Basis is used to calculate capital gains vs. principal. Total all after-tax investment assets into Brokerage, and all cash-like holdings into Cash. The Reinvest Brokerage Dividends checkbox keeps dividends inside the brokerage account (growing both balance and basis); when unchecked, dividends flow to Cash. Should one spouse predecease the other, all IRA assets are inherited by the remaining spouse. Enter Roth balances separately - Your Roth IRA and Spouse Roth IRA are tracked independently throughout the simulation. The collapsible Account Composition subsection records Equity/Bond ratios - informational only in single-scenario mode, but used by Monte Carlo Bootstrap and Stress modes to apply per-account return sequences. Cash Reserve decides where money withdrawn beyond your spending goes, which is mostly forced RMDs. At the default of 0 no cash buffer is kept and all of that surplus is reinvested in Brokerage. A positive amount, in today’s dollars and inflation-adjusted, keeps that much in Cash and reinvests only the surplus above it; spending will not draw that buffer down unless every other account is exhausted. Enter Off for the original behavior, where all surplus stays in Cash earning the cash yield. Advisor Fee models an annual advisory or fund fee: a small number is read as a percentage of the billed accounts and a large one as a flat dollar amount that grows with CPI, and adding % or $ says which you meant (20k means 20,000). It is charged at the start of each year against the previous December 31 balances, and money taken from an IRA to pay it is not a taxable distribution. Fee applies to picks which accounts are billed and which pay. It starts at None, so no fee is charged until you choose, and Cash is never billed.
- 3. Annual Income & QCDs: Input annual Social Security and pension amounts. Set the start ages to see the impact of delaying benefits - the Pension Start Age lets you model a deferred pension that begins after retirement (leave 0 to start at retirement). SS amounts are adjusted annually by the CPI/COLA rate. Survivorship is the percentage of the pension that continues after You pass away. Pension COLA sets how the pension rises each year: No increase, which fits most private pensions; a cap of 1%, 2% or 3% that pays the lesser of the cap and that year’s CPI, so a capped pension falls permanently behind in a high-inflation stretch; or Full COLA, which tracks CPI, as federal CSRS and military pensions do. The Charitable Giving (QCD) block at the bottom of this section handles Qualified Charitable Distributions.
- 4. Assumptions: Dividend Rate and State Taxation are the most-changed inputs - set these first. Dividend Rate is the share of each account paid out as dividends each year, all taxed as qualified dividends; Brokerage dividends go to Cash unless Reinvest Brokerage Dividends is on, and IRA and Roth dividends stay in their own accounts. Social Security Fail is the year a trust fund shortfall is assumed to cut benefits, and SS Net Payout% is the share still paid from then on; set the payout to 100 if you do not expect a cut.
Growth rate - nominal, not real. Enter the nominal (before-inflation) annual return for IRA, Roth, and Brokerage. The tool deducts inflation internally - do not pre-subtract inflation yourself. The real (purchasing-power) growth rate is approximatelynominal − inflation(Fisher equation:(1+g)/(1+i)−1precisely). For reference: the S&P 500 has returned roughly 10% nominal (≈7% real) since 1928; a diversified 60/40 portfolio averages 7–9% nominal; a conservative bond-heavy allocation 4–6%. Note that the dividend rate is additive - 5% growth + 1.5% dividends = 6.5% total. Asset balances and RMDs grow at the nominal rate, which is why nominal is the correct input even though real growth is what you feel in purchasing power.
Today's dollars or future dollars. Dollar amounts in Annual Details, Charts, the Optimizer and Monte Carlo are shown in today's dollars (Current $) by default, which is the clearest way to judge whether your plan preserves your standard of living over time. Use the Future $ / Current $ toggle in the tab bar (left of Annual Details / Charts / Optimizer / Monte Carlo) to see amounts as they will actually appear in each year instead.
Cash Interest is for HYSA and money-market holdings. Inflation drives spending-goal escalation; CPI/COLA drives bracket indexing and SS cost-of-living adjustments (they often differ). Medicare and IRMAA dollar amounts follow a published Medicare path instead of either rate, starting near 6.6% a year and easing toward 3.8%; CPI/COLA still indexes the IRMAA income thresholds. Fed Tax Creep %/yr stress-tests future federal tax increases. It raises the federal ordinary-income bracket rates by that percentage a year from Creep Starts onward (leave the start blank for the first plan year), so a 22% bracket becomes about 26.8% after 20 years at 1%. Bracket thresholds keep tracking CPI, and state tax, capital gains, the 3.8% investment-income surtax and IRMAA are not changed. Medicare premiums sets whether the Part B and Part D base premiums are assumed to be inside your After-Tax Spend, the default, or charged on top of it; the IRMAA surcharge is charged either way. The Enrolled at 65 switches let you switch off anyone who will not enroll, for example because a spouse’s employer plan or the VA covers them, and that person then owes no premium and no surcharge. Marginal Heirs Tax Rate is the combined federal and state rate of whoever inherits your traditional IRA; it drives the Roth conversion break-even and the after-tax legacy figures. Enter 0 if the IRA goes to charity, or leave it blank to use the plan’s own computed marginal rate. - After Changes... Changes to any input - balances, rates, ages, strategy switches, or any other value - trigger an immediate recalculation. On the Annual Details table, rows are highlighted yellow when filing status changes to Single; pink/red means the portfolio cannot cover the required draw (a real shortfall - for the strict ACA Cliff strategy this means the plan is untenable at that spend, and for Ordered a small residual can remain because the strategy will not step outside your chosen sequence). The
ForcedIRAcolumn shows where spending was funded by drawing extra IRA after Cash, Brokerage and Roth ran out; for the soft Fill Bracket / IRMAA strategies that draw goes above the ceiling andBracketOverageshows by how much. The Balances chart has a Both / Mine / Spouse toggle. The Optimizer sweeps all strategy variations and highlights the best result per column. The Monte Carlo tab runs all variations against stochastic return sequences and reports survival rates. Both tabs skip a full rebuild if inputs are unchanged. Use Save/Load to save, load, or delete named scenarios.
For limitations and features not currently modeled, see the README.md.
Where is the Code
You can run this locally (download the *.html and *.js and *.css files from GitHub): github.com/nightskyguy/retirement_assets. Charts require loading remotely: cdn.jsdelivr.net/npm/chart.js.
You can directly run the code from GitHub: tools.netcitizen.us/retirement_optimizer.html
Page loads are tracked anonymously using Google Analytics and Cloudflare Web Analytics. No personally identifiable information is collected. Nothing you enter leaves your browser unless you send it with Feedback, and then only what you choose.
Send Feedback
A problem, a question or an idea can go straight to the author. You choose what goes with it: your settings, your full plan link and a screenshot of the page each have their own box, and Show exactly what will be sent lists everything before it leaves your browser. An email address is optional and is used only to reply to you; without one there is no way to answer, and with one a reply can still take a while. The README’s Sending Feedback section says where a message goes.
Prefer GitHub? Open an issue there. Issues are public, so leave your own numbers out. If a problem needs numbers to show, use made-up ones that still show it.