Last Updated: March 24, 2023
Wondering how best to withdraw money after FIRE (Financial Independence / Retire Early)? And/or standard retirement?
In particular, are you wondering how much to pull from each of your various retirement and taxable accounts?
I had the same questions, so last summer I started working to figure out the answer.
Tax and Penalty Minimization (TPM) Strategy
Pretty quickly I realized that the most important thing was to keep taxes and penalties to a minimum (and preferably zero!). Doing that will maximize your final portfolio value and minimize the odds of ever running out of money.
So I developed what I call the Tax and Penalty Minimization (TPM) withdrawal strategy.
I started by implementing this strategy within a portfolio projection tool, because I wanted to confirm that it really did better than the Traditional withdrawal strategy. And it does.
I’ve since made many, many, many, many, many, many, many, many upgrades to this TPM strategy and tool.
However, there’s one pretty dang important thing I haven’t done: make it easy for someone to run this TPM strategy/tool for a particular year of their retirement, so they can see exactly what withdrawals they need to make that year.
Until now! Woohoo!
Stand-alone TPM Tool
I’ve discussed building a “stand-alone” TPM tool in the future work sections of quite a few previous posts, so I’m really excited that I’ve now finally put it together.
The top goal of this tool is to make it as easy as possible for someone to run the TPM strategy/algorithm for their situation for a single year.
As I mentioned in my post a couple weeks back, I’m using the same underlying portfolio projection tool that I’ve vetted/tested extensively, but I’m running it for just a single year. That allows me to greatly simplify the user inputs as well, since only current year info is needed (nothing about changes in future years).
Below is an embedded python interpreter that will allow you to run the tool (also available on github). You can fill in your own values in the user inputs section at the top, then hit the Run/Play (sideways triangle) button to generate the output.
By default the output will appear in the interpreter output window, but you can also set the OutputToScreen flag to False, which will create and place the output in a text file called Output.txt. Note that the Output.txt file is created and shown at the far right end of the file tabs list.
To go back to the script to make any changes, hit the Pencil icon. If you want the text larger, hit the hamburger menu button, then scroll to the bottom to see larger font options. In that same menu you can also Full Screen the window, and other actions.
Use the pound sign “#” to comment out a line so that it’s not used.
As usual, I created the tool using the Python programming language.
I’ve also placed the tool within an embedded Python interpreter near the top of the TPM strategy page.
If you’d prefer to run the tool without using that embedded interpreter, see the top of the Tools page for info about how to run a Python program using either another online interpreter or locally on your own computer.
Eventually I might create a nice UI for this tool (perhaps with help from my friend, if he’s willing) – but that’ll take some time and effort.
Until we have that UI in place, I’ve made it as easy as possible to run the tool by placing all the inputs you’ll need to adjust for your situation at the very top of the main script that runs the tool.
Inputs
Here are the inputs for the tool:
- Tax rates and brackets (I try to keep them updated for the current year, but you should double check)
- Tax filing status (Single, Married Filing Jointly, Head Of Household, Married Filing Separately, or QualifyingWidow(er))
- Pre-tax account balance (Traditional IRA, 401(k), 403(b))
- 457(b) account balance (if you have one)
- Roth IRA account balance and original contributions
- Previous Roth conversions, including amount and your age when the conversion was done
- Current age
- Social security payments, if any
- Flag indicating whether RMDs are required this year
- Taxable (post-tax) account lot balances and capital gains (and a flag indicating if the lot is less than a year old, so it’s avoided if possible to avoid short-term cap gains)
- Cash account balance
- Qualified and non-qualified dividend yields (see your taxable brokerage account for an estimate of these)
- Other income sources
- Flag indicating whether to use the standard deduction for the maximum standard income goal (recommended)
- Maximum standard income goal if not using the standard deduction (not recommended)
- Maximum total income, including standard income and long term capital gains (e.g., if you need your total income to be a particular amount to maximize ACA subsidies)
- Flag indicating whether to use the standard deduction plus the top of the 0% long term capital gains bracket for the maximum standard income goal (recommended if you have no other constraints/considerations for your total income)
- Annual expenses
- Taxes and penalties you generated the previous year
- Estimated taxes and penalties you paid the previous year (I don’t think estimated penalty payments are required, so recommend leaving at $0)
- Flag indicating that you will withdraw from the 457(b) before your other pre-tax retirements accounts (recommended)
- “Verbose Mode” flag – which will increase the amount of output if you want more detail
The outputs are described below in the “Outputs” section.
Ideally you could run the tool at the beginning of the year using estimated expenses, income, etc. for the year. Then you could run it again throughout the year as desired to make sure you’re on track (and make adjustments as needed for higher or lower expenses/income than expected). Finally, you could run it at the end of the year to make any final withdrawals needed to ensure you hit the income targets you’re shooting for.
Outputs
For the output, again I’d love to one day make a beautifully rendered output display of all the relevant values, but until then I’m outputting a simple text file called Output.txt that (I think) is reasonably well formatted.
It’s vital that the Output.txt report is easy to read and understand, so I’ve organized the content into the sections shown below. If you have any suggestions on making the outputs clearer, feedback is always welcome!
Actions:
- How much to withdraw from your different accounts
- How much to convert from pre-tax accounts (Traditional IRA preferably) to a Roth IRA
- How much excess cash to invest in a new taxable account lot
- How much to pay in estimated taxes
- How much of a refund you’ll likely get or how much you’ll likely owe the IRS when you file in the spring (note: not processing all the tax return calculations, just using the above user inputs regarding the taxes/penalties generated and estimates paid the previous year)
Withdrawal Info: Total withdrawals for all account types, and total withdrawal overall
Income and Cash Goals:
- How much standard income, long term capital gains income, and total income is generated, along with how those values compare to the targets
- Total needed cash for the year (living expenses + taxes owed from last year + penalties owed from last year + estimated tax payment this year), and how much cash is generated with the above withdrawals and conversions
Taxes and Penalties: How much taxes and penalties you’ll generate with the above withdrawals and conversions
Additional Details, Verbose Mode: lots of additional details from the TPM method results, output only if the “Verbose Mode” flag set to True
Example Scenarios
Now let’s run the TPM tool for some example scenarios, and take a look at the outputs.
Betty’s Filing Status: Single
As always, I’ll employ Betty for the single-filer scenario. The only significant change from the description in that previous post is that we’re using dividend yield values instead of absolute dividend values, with 1.6% for the qualified dividend yield (based on 5-year average dividend yield of VTSAX) and 0.0% for the non-qualified dividend yield.
Also note that for each taxable lot, the long term capital gains are $15K, for a total of $120K (30% of the taxable lot values). I don’t think that info was provided in that previous post.
Also, to keep things simple, I specified that Betty did not generate any taxes or penalties the previous year (I know that sounds crazy, but it’s quite possible using the TPM method), and thus she also paid no estimated taxes or penalties the previous year.
We’re going to run the TPM tool for the first year, when Betty is 40 years old.
Let’s take a look the different outputs sections generated in Output.txt, starting with the Actions section:
*** Actions ***
This year, you should:
* Withdraw $13850.00 from 457(b) account (no conversion to Roth, no early withdrawal penalty)
* Sell $50000.00 from Taxable Lot #1
* Sell $49166.67 from Taxable Lot #2
* Invest the $79416.67 excess cash generated (based on values provided) in a new taxable lot
* Pay $0.00 in estimated taxes to the IRS this year
Note: split total estimated taxes into the four required payments in April, June, Sept, and the following Jan
Note: any mandatory 20% withholding on 401(k)/403(b)/457(b) withdrawals counts towards estimated tax payment
You should not get a refund or owe the IRS anything when you file in the spring
Next up is the Withdrawal Info section:
*** Withdrawal Info ***
Total pre-tax (Traditional IRA, 401(k), 403(b), 457(b)) withdrawals (including Roth conversions): $13850.00
Total Roth withdrawals: $0.00
Total cash account withdrawals: $0.00
Total taxable account withdrawals: $99166.67
Total withdrawals across all accounts: $113016.67
Now you might be wondering why so much of Taxable Lot #1 and #2 were sold – especially if Betty has just $40K worth of expenses. It’s because she needs enough long term capital gains to achieve the total income goal, and the LT cap gains are only 15% of the value of the taxable lots.
The Income and Cash Goals section shows this LT cap gains income:
*** Income and Cash Goals ***
Your standard income goal is $13850.00, and the above actions achieve $13850.00 (100.00%) of that goal
Your long term capital gains income goal is $36150.00, and the above actions achieve $36150.00 (100.00%) of that goal
Your total income goal is $50000.00, and the above actions achieve $50000.00 (100.00%) of that goal
Your total needed cash (living expenses + taxes owed from last year + penalties owed from last year + estimated tax payment this year) is $40000.00, and the above actions generate $119416.67 (298.54%) of that needed cash
Finally, we can take a look at the quite short (and extremely important) Taxes and Penalties section:
*** Taxes and Penalties ***
The above actions generate $0.00 in taxes and $0.00 in penalties.
Now what if Betty doesn’t have a 457(b) account? Or she wants to withdraw from her 457(b) account AFTER her other pre-tax accounts? Then the Actions section looks a bit different:
This year, you should:
* Convert $13850.00 from Pre-Tax (Traditional IRA, 401(k), 403(b)) to Roth
* Sell $50000.00 from Taxable Lot #1
* Sell $49166.67 from Taxable Lot #2
* Invest the $65566.67 excess cash generated (based on values provided) in a new taxable lot
Note how instead of withdrawing $13,850 from the 457(b) account, Betty should convert $13,850 from her pre-tax account to her Roth IRA (so as to avoid an early withdrawal penalty). That also means she will have $13,850 less excess cash to re-invest, because she’s using $13,850 more of the cash generated by the taxable lot sales (because she can’t touch that converted $13,850 for at least 5 years).
Bill and Barbara’s Filing Status: Married Filing Jointly
As usual, we’ll employ the married couple Bill and Barbara in our “married filing jointly” scenario.
We’ll make the same changes and clarifications of the description in that previous post for Bill and Barbara that we made for Betty above: we’re using dividend yield values instead of absolute dividend values, with 1.6% for the qualified dividend yield (based on 5-year average dividend yield of VTSAX) and 0.0% for the non-qualified dividend yield; the long term capital gains for each taxable lot are $15K; we specify in the inputs that Bill and Barbara did not generate any taxes or penalties the previous year, nor pay any estimated taxes or penalties the previous year.
We’re going to run the TPM tool for the first year, when Bill is 40 years old and Barbara is 38.
Let’s take a look the different outputs sections generated in Output.txt, starting with the Actions section:
*** Actions ***
This year, you should:
* Withdraw $27700.00 from 457(b) account (Person 1) (no conversion to Roth, no early withdrawal penalty)
* Sell $50000.00 from Taxable Lot #1
* Sell $3000.00 from Taxable Lot #2
* Invest the $47100.00 excess cash generated (based on values provided) in a new taxable lot
* Pay $0.00 in estimated taxes to the IRS this year
Note: split total estimated taxes into the four required payments in April, June, Sept, and the following Jan
Note: any mandatory 20% withholding on 401(k)/403(b)/457(b) withdrawals counts towards estimated tax payment
You should not get a refund or owe the IRS anything when you file in the spring
Note how “Person 1” refers to Bill, because he’s the older person of the couple and thus listed first in the inputs. “Person 2” would refer to Barbara / the younger person / the person listed second.
Next up is the Withdrawal Info section:
*** Withdrawal Info ***
Total pre-tax (Traditional IRA, 401(k), 403(b), 457(b)) withdrawals (including Roth conversions): $27700.00
Total Roth withdrawals: $0.00
Total cash account withdrawals: $0.00
Total taxable account withdrawals: $53000.00
Total withdrawals across all accounts: $80700.00
Just like for Betty above, a large amount of the taxable lots are sold to generate enough long term capital gains to achieve the total income goal, as shown in the Income and Cash Goals section:
*** Income and Cash Goals ***
Your standard income goal is $27700.00, and the above actions achieve $27700.00 (100.00%) of that goal
Your long term capital gains income goal is $22300.00, and the above actions achieve $22300.00 (100.00%) of that goal
Your total income goal is $50000.00, and the above actions achieve $50000.00 (100.00%) of that goal
Your total needed cash (living expenses + taxes owed from last year + penalties owed from last year + estimated tax payment this year) is $40000.00, and the above actions generate $87100.00 (217.75%) of that needed cash
Finally, we can take a look at the quite short (and extremely important) Taxes and Penalties section:
*** Taxes and Penalties ***
The above actions generate $0.00 in taxes and $0.00 in penalties.
Now what if Bill and Barbara don’t have a 457(b) account? Or they want to withdraw from their 457(b) account(s) AFTER their other pre-tax accounts? Then the Actions section looks a bit different:
This year, you should:
* Convert $27700.00 from Pre-Tax (Traditional IRA, 401(k), 403(b)) to Roth (Person 1)
* Sell $50000.00 from Taxable Lot #1
* Sell $3000.00 from Taxable Lot #2
* Invest the $19400.00 excess cash generated (based on values provided) in a new taxable lot
Note how instead of withdrawing $27,700 from Bill’s 457(b) account, Bill should convert $27,700 from his pre-tax account to his Roth IRA (so as to avoid an early withdrawal penalty). That also means they will have $27,700 less excess cash to re-invest, because they’re using $27,700 more of the cash generated by the taxable lot sales (because they can’t touch that converted $27,700 for at least 5 years).
Running Out of Money Message
Now what happens if you run out of money? What will the output be?
Let’s make Bill and Barbara run out of money, so we can see what happens. So we’ll reduce their pre-tax funds down to $8K (split evenly), 457(b) funds down to $8K (split evenly), Roth funds down to $8K (split evenly, with Roth contributions down to $6K), taxable account lots down to a total of $8K, and finally their cash account down to just $2K. That means they have a total of $34K in assets, which is not enough to cover their $40K annual expenses.
As a result, a new section titled “BAD NEWS: You have run out of money” appears at the top of Output.txt:
*** BAD NEWS: You have run out of money ***
Unfortunately with the provided assets, income, and expenses for this year, you will run out of money and not be able to cover all your expenses.
Your total needed cash (living expenses + taxes owed from last year + penalties owed from last year + estimated tax payment this year) is $40000.00, and you will only be able to generate $34128.00 (85.32%) of that needed cash. Which means you still need $5872.00.
So you will have to either cut your expenses or increase your income to avoid going into debt.
Yikes! Not a message anyone wants to see. Let’s see what the other sections look like as well:
*** Actions ***
This year, you should:
* Withdraw $4000.00 from Pre-Tax (Traditional IRA, 401(k), 403(b)) (Person 1) (no conversion to Roth)
* Withdraw $4000.00 from Pre-Tax (Traditional IRA, 401(k), 403(b)) (Person 2) (no conversion to Roth)
* Withdraw $4000.00 from 457(b) account (Person 1) (no conversion to Roth, no early withdrawal penalty)
* Withdraw $4000.00 from 457(b) account (Person 2) (no conversion to Roth, no early withdrawal penalty)
* Withdraw $4000.00 from Roth account (Person 1) (after conversions, if any)
* Withdraw $4000.00 from Roth account (Person 2) (after conversions, if any)
* Withdraw $2000.00 from Cash account
* Sell $1000.00 from Taxable Lot #1
* Sell $1000.00 from Taxable Lot #2
* Sell $1000.00 from Taxable Lot #3
* Sell $1000.00 from Taxable Lot #4
* Sell $1000.00 from Taxable Lot #5
* Sell $1000.00 from Taxable Lot #6
* Sell $1000.00 from Taxable Lot #7
* Sell $1000.00 from Taxable Lot #8
You should not have any excess cash to invest this year (based on values provided) - all cash generated is used
* Pay $0.00 in estimated taxes to the IRS this year
Note: split total estimated taxes into the four required payments in April, June, Sept, and the following Jan
Note: any mandatory 20% withholding on 401(k)/403(b)/457(b) withdrawals counts towards estimated tax payment
You should not get a refund or owe the IRS anything when you file in the spring
*** Withdrawal Info ***
Total pre-tax (Traditional IRA, 401(k), 403(b), 457(b)) withdrawals (including Roth conversions): $16000.00
Total Roth withdrawals: $8000.00
Total cash account withdrawals: $2000.00
Total taxable account withdrawals: $8000.00
Total withdrawals across all accounts: $34000.00
*** Income and Cash Goals ***
Your standard income goal is $27700.00, and the above actions achieve $18000.00 (64.98%) of that goal
Your long term capital gains income goal is $22300.00, and the above actions achieve $1328.00 (5.96%) of that goal
Your total income goal is $50000.00, and the above actions achieve $19328.00 (38.66%) of that goal
Your total needed cash (living expenses + taxes owed from last year + penalties owed from last year + estimated tax payment this year) is $40000.00, and the above actions generate $34128.00 (85.32%) of that needed cash
*** Taxes and Penalties ***
The above actions generate $0.00 in taxes and $1000.00 in penalties.
So not only do you run out of money, but you also pay a grand in penalties! Yikes!
Potential Future Work for This Tool
As mentioned above, I would love to move this tool into a nice pretty UI in the future.
There is also more info I might add to the “verbose” section in the future, such as Roth IRA contribution and conversion balances.
I might also one day upgrade the tool to allow someone to specify if they’ve already made withdrawals, like if they are part way or nearly all the way through the year. Then they would be provided instructions for how to stay on track or make adjustments to their withdrawals to hit their original income and cash goals as desired. That’s definitely a bit more ambitious of an idea though (i.e., likely a lot more effort). But it could be worth it, if it’s useful enough.
Let me know if you like those ideas or have any other ideas/recommendations/feedback in the comments below, or shoot me a note.