Every multi-year Roth conversion plan a client receives is the output of an optimization. The engine determines, across each future year, how much to move from a traditional IRA into a Roth — weighing the tax cost incurred today against decades of tax-free growth, while accounting for IRMAA surcharges, tax-bracket boundaries, required minimum distributions, and any limit the client places on how long the conversion should take. It is not a closed-form calculation; it is a search over a high-dimensional surface. This article examines that surface directly, along with recent work that reduced worst-case latency by roughly four times and corrected a pattern of income under-delivery affecting approximately 1,045 cases.
The landscape the engine searches
The example below is a representative household: a 58-year-old with a $2M traditional IRA and a seven-year limit on the conversion period. The engine evaluates 13 candidate caps — one for each tax bracket and IRMAA tier — and, for each, searches the optimal conversion amount. The plot shows only the plans that satisfy the seven-year constraint, as the engine does; plans that cannot complete in time are excluded.
Three properties are worth noting:
- The surface is not convex. Each ridge and discontinuity corresponds to a tax-bracket or IRMAA-tier threshold; crossing one raises the marginal cost of the next converted dollar. The result is a broad plateau interrupted by sharp drops, not a single smooth peak.
- It is bounded by the client’s constraint. A slower conversion under a tighter bracket would accumulate more lifetime wealth, but it cannot complete within the seven-year window, so it is not an admissible plan. Such plans are excluded from the surface and from the recommendation. Plotting the full, unconstrained surface would place the global maximum in a region the client has already ruled out, which misrepresents the actual decision.
- The optimum is a partial conversion. The selected plan converts approximately $1.2M under a mid-range cap — neither the entire balance (which over-pays tax and exceeds the window) nor the loosest bracket (which converts too aggressively in the early years). An interior optimum of this kind is not evident without evaluating the full surface.
How the optimum is located
The previous search treated the surface as unimodal and located the maximum with a golden-ratio line search. On a plateau with discontinuities that assumption does not hold: the method left up to 1.13% of lifetime wealth unrealized and, in some cases, selected a point outside the admissible region, causing the candidate to be discarded by the outer selection step. The current implementation uses a coarse grid followed by a single local refinement, restricted to plans that satisfy the time constraint. It produces no measurable regret relative to an exhaustive search, in fewer sequential evaluations — which also reduces latency.
Performance
The full surface is evaluated on AWS Lambda for each recommendation. The worst case — a complete bracket-and-IRMAA fan-out with an inner conversion-amount search on each candidate — previously required approximately 9.65 seconds. A series of changes reduced it below one second: factoring the tax computation out of the inner solver loops (approximately 2.4 times, with bit-identical output), increasing the function’s memory allocation to obtain a full vCPU (approximately 1.7 times), the revised search described above, and reductions in cold-start overhead. Measured against the prior engine on the 100 most recent cases, with both running on Lambda:
Income-delivery accuracy
Latency is straightforward to verify. Delivery accuracy — whether the projected income is actually produced in every year — is more consequential, particularly once a client is drawing on the plan. We evaluated the 50,000 most recent cases against two invariants on every projected year: internal consistency between the engine’s two take-home calculations, and delivery of the requested income. No case produced an error or a non-finite result. Approximately 1,045 cases, however, under-delivered income in one specific circumstance.
The cause was a unit mismatch in the year a conversion completes and the traditional IRA is exhausted. The engine compared a gross IRA balance against a net, after-tax income target, determined the IRA was sufficient, and did not draw from the Roth — leaving the household short while a tax-free, penalty-free Roth balance remained available. We identified this defect, along with three related issues (including an IRMAA surcharge double-counted within the optimizer’s objective), corrected them, and re-validated against all 50,000 cases. As a result, 666 affected income-years now deliver correctly — approximately $66.5M in contracted income — with no regressions, and every unaffected case unchanged to the dollar.
Result
The engine now searches the full conversion landscape in under a second, restricts its recommendations to the constraints each client sets, and delivers the income it projects. The visualization above captures the central difficulty in a single image: a deceptively flat objective with discontinuities that carry real cost, and an optimum that is rarely a corner solution.