This post is about a question I keep circling back to as an early retiree: how much to convert to a Roth in any given year. Not whether to convert — I’m already sold on that — but the actual dollar amount, year by year. It turns out to be a surprisingly good little optimization problem, and this is how I think about it.

This is a 4-part series on optimizing IRA-to-Roth conversions in early retirement:
- Part 1: The Roth conversion ladder (and its blind spot)
- Part 2: How much should I convert each year? (you are here)
- Part 3: The optimization model behind it
- Part 4: A free Roth conversion tool (coming soon)
Quick recap in case you skipped part 1: when you convert money from a traditional IRA to a Roth, you trigger a taxable event and pay ordinary income tax on the amount, as if you had just earned it. After that, the money grows in the Roth and you never pay tax on it again.
The two forces pulling against each other
I start with what seems like an obvious assumption: the sooner I convert, the better, because the money can then grow tax-free in the Roth for longer. (That assumes the money grows at all, of course — but if it doesn’t, I have bigger problems than my conversion schedule.)
The second point isn’t really an assumption, it’s just how the tax code works: the more you convert in a single year, the more of it gets taxed at higher rates, because the brackets are progressive. Convert a little and it all fits in the 10% or 12% bracket. Convert a lot and the top slice gets taxed at 22%, 24%, or worse. So some conversions really should wait.
Between those two pulls there’s an obvious trade-off: pay tax now to lock in tax-free growth, or pay less tax now and let the money keep growing in the IRA — where it will be taxed later. Here is the whole thing in one picture:

The vertical axis is the tax rate and the horizontal axis is time. I drew both axes as dashes on purpose, because neither one is really continuous. Tax brackets jump in steps — one dollar is taxed at 12% and the next dollar at 22%, with a hard break in between. Time has steps too: a dollar converted on December 31 can land in a completely different tax year than the same dollar converted one day later.
Reading the picture
The green band on the left is your conversion window: the early-retirement years when your income is low and the bottom brackets are wide open. A dollar you convert there is both early (good, because it then grows tax-free for longer) and cheap (good, because it’s taxed at a low rate). That’s where you want your conversions to land — which is why the two blue arrows point earlier (left) and cheaper (down).
The two events on the right are deadlines, not destinations — and getting that direction right matters. Social Security (or any future income you can’t time, like a pension or annuity) stacks on top of everything else once it switches on, and starts filling your low brackets for you. RMDs — required minimum distributions, starting at age 73 or 75 depending on your birth year under the current SECURE 2.0 rules — force taxable money out of your IRA whether you want it or not. Each one steps your future tax rate up; that’s the rising gray line. So they don’t pull you toward them — they push your conversions the other way, earlier, into the window before they hit. Every year you wait, that cheap window gets a little narrower.
Why I solved it with linear programming
Once I saw it as “maximize a good thing subject to bracket constraints over many years,” the shape of the problem was familiar. When all you have is a hammer, every problem looks like a nail — and after 20-plus years of building optimization models, linear programming is my hammer. The amounts to convert each year (and how each slice stacks into the brackets) are decision variables; the bracket widths, RMDs, and your spending needs are constraints; and a solver can find the schedule that does best against whatever objective you choose.
I built the first version as an Excel spreadsheet driven by Solver and OpenSolver. It works, it solves, and it has slowly grown more realistic over several versions. I’m not going to bury you in the formulation here — if you want the decision variables, constraints, and objective written out properly, that’s its own post: the optimization model behind it.
What the model takes into account
The most complete version of the model includes quite a bit more than just “IRA balance and brackets.” Here is roughly what goes in:
- Other income by year — in my case a small pension now, plus an estimated Social Security benefit in later years. This is the income that fills your brackets before any conversion does.
- The IRS RMD table, which is driven by life expectancy and sets the minimum you’re forced to withdraw each year once RMDs begin.
- Tax brackets for ordinary income and for long-term capital gains, plus a single/married filing choice, and the current balances of the IRA, Roth, and taxable brokerage accounts.
- Unrealized long-term gains in the taxable account, so the model can also help decide when to realize those gains — sometimes at the 0% capital-gains rate.
- An expected rate of return. Right now I use the same return for all three account types; you could argue for different returns if you hold different assets in each.
- Living expenses by year — the cash you actually need to pull from somewhere (brokerage, Roth contributions, or the IRA) to fund life, including the years before 59½.
- The critical ages: current age, 59½, the age you plan to start Social Security, and the age your RMDs begin.
Where it’s still half-baked (and where I changed my mind)
I’ll be honest that not all of this is fully settled in my head, and writing it out has already made me fix a couple of things. A few open threads:
- The objective. My gut said I’m maximizing how much ends up in the Roth at the end of the horizon. When I actually looked at the spreadsheet, it’s set to minimize the total tax paid instead — and I’ve flip-flopped between those across versions. I’ve come to think minimizing tax is a defensible choice, maximizing the ending Roth over-converts, and the cleanest target is probably maximizing total after-tax wealth at the end. I’m still chewing on it, and I lay out the trade-offs in part 3.
- Roth balance as a spending source. The current model doesn’t seed today’s Roth balance, even though that money can fund living expenses too. It should be in there.
- Inflation. I don’t model it explicitly. I think that’s fine as long as the expected return is a real (after-inflation) return, because the IRS brackets are inflation-indexed anyway, so in real terms they stay roughly put. I believe that’s internally consistent, but I’m open to being told I’m wrong.
- Future tax law. The brackets are fixed across all future years. It would be interesting to model a scenario where rates rise later — I expect the model would tell you to convert more, sooner.
- Planning horizon. I run it out to the end of the RMD table (around age 120), which makes sense if you plan to leave money to family.
If you spot a flaw in the logic, or a tax rule I’m misreading, I genuinely want to hear it — that’s half the reason I write these as I go. The plan from here: part 3 lays out the actual math, and part 4 is the one I’m most excited about — turning this into a free web tool you can run on your own numbers, the same way I did with my other Excel models.
One disclaimer, because this is money and taxes: I am an operations research analyst, not a CPA or a financial advisor, and nothing here is tax or investment advice. This is just how I think about my own situation. Tax rules change and your situation is different from mine, so check the primary sources and talk to a professional before you actually move money.
Things that I use, like, and am affiliated with:
Mint Mobile offers great cell phone service for $15 flat, get $15 off using the link. Get discounted phones with service activation and no contract.
I never spend money before I check Mr Rebates or Rakuten to get cashbacks, rebates, discounts, coupons or cheaper gift cards.
