Last updated: May 12, 2023
The past few weeks I’ve worked on a new tool to compute social security income (which the Social Security Administration (SSA) refers to as retirement insurance benefits (RIB)), which I’ve also done my best to validate against other available calculators.
This week I extended my tool to provide future RIB estimates – which is what I ultimately care about for doing the FI/RE financial analysis I’ve discussed previously.
Fortunately overall there really weren’t that many changes, but I’ve laid out what was needed below.
Upgrades to Social Security Income Tool
To generate future RIB estimates, I added a grand total of three new inputs.
1. Future Expected Income
The earnings amount you expect to have for future years, which we assume remain constant in present-day dollars (i.e. you get raises that exactly match inflation).
2. Number of Years For Future Expected Income
While the ssa.gov calculator does not provide the ability to specify the number of additional years you plan to work, the ssa.tools calculator does – and I think it’s a great idea. So I added that input as well.
However, if the number of years input extends past the calendar year prior to the retirement age you specify, it will cut off the expected earnings at that prior calendar year.
E.g., if your Full Retirement Age (FRA) is 2034, and you put in more than 11 years of additional earnings, it will stop adding future earnings after 11 years (2033).
Note: obviously we can do lots of other things with future earnings as well, including having it increase or decrease by some % each year, or drop to 50% at some point, or any other crazy scheme we can dream up. Fully controlling the tool is a huge benefit of coding it up myself, unlike if I used any other calculator available online.
3. Birth Month
The last required new input is your birth month, in addition to the birth year. This info is only needed in one place: the new “Augment With Future Earnings” described below.
New Function: Augment With Future Earnings
The primary upgrade to the RIB computation tool was the addition of a new method called “Augment With Future Earnings”.
This method essentially adds the future expected earnings to the earnings history array, to construct an augmented earnings array.
So if both the future expected earnings and the number of years for those future expected earnings are non-zero, then it will add the relevant future year and earnings amount to the augmented earnings array until one of two things happens:
- It reaches the total number of years for those future expected earnings
- It reaches the year before you specify RIB will start (see “2. Number of Years For Future Expected Income” section above for why)
Condition #2 is why we now need to specify birth month: the retirement age you specify (which can include a specific number of months past a particular annual age) added to your birth year plus month can push into the following calendar year (vs just adding your birth year to the retirement age).
E.g. if you’re born in July 1967, and you specify a retirement age of 67 and 6 months, then your retirement year will not be 1967 + 66 = 2034. It will be 1967 + (7 – 1)/12 + 67 + 6/12 = 2035.
Which means the last year of earnings you can include in future earnings (and thus for computing AIME) is 2034, not 2033.
Updates to Previous Functions
I also made a few minor updates to some of the functions created previously.
Determine If Min Credits Obtained Function
In the “Determine If Min Credits Obtained” function, I use the final published QC value ($1640 for 2023) for determining how many credits you can get per year for any expected future earnings.
I also include any augmented / expected earnings in determining if you obtain the minimum number of credits. I could get fancier in the future and also output whether you have enough credits without future earnings.
Determine Taxable Income Function
In the “Determine Taxable Income” function, I use the current Contribution and Benefit Base (CBB) ($160,200 for 2023) for determining how much of any future earnings are taxable.
Adjust Income For Inflation Function
In the “Adjust Income For Inflation” function, if you turn 60 after the most recently published Average Wage Index (AWI) ($60,575.07 for 2021), then the function uses that most recent value as the AWI base value for computing the inflation factor to apply to all previous years income.
Compute AIME Function
In the “Compute AIME” function, I now use all the expected future earnings when calculating the Average Indexed Monthly Earnings (AIME).
Compute PIA Function
In the “Compute PIA” function, if you turn 62 after the final published bend points ($1,115 and $6,721 for 2023), the function uses those final published bend points to compute PIA.
Adjust PIA By COLA Function
In the “Adjust PIA By COLA” function, if you turn 62 after the final published Cost-of-Living-Adjustment (COLA) value (2022), then no adjustment of the PIA is done.
After making the above relatively minor upgrades, I tested a variety of different scenarios. One of the first scenarios was a modified version of Case B published by ssa.gov: I started the earnings ten years later (1993 instead of 1983), and set the birth year ten years later (1967 instead of 1957).
And in every situation I simulated, which included varying the RIB starting ages (62 to 70) and different future earnings amounts (and different amounts of time to have those future earnings), I got the same final answers as both the ssa.gov calculator and the ssa.tools calculator! Woohoo!
The Official “my Social Security” App
With these upgrades in place and seeing identical answers for all the situations I tried compared to the ssa.gov and ssa.tools calculators, I confidently logged into my ssa.gov profile to verify that I got the same expected RIB values with my actual earnings history (looks like they call it the “my Social Security” App).
Unfortunately I didn’t get the same answer! In fact, depending on the settings I use, the results can be off by over $100 / month.
So then I plugged my earning history into the official ssa.gov calculator, and guess what? It matches the value I computed, not the value provided in my account!
I then did the same with the ssa.tools calculator, and again it matched the value I computed and the value from the official ssa.gov calculator.
So, I see two possibilities for this discrepancy:
- The “my Social Security” app values are just wrong – which is an insane thing to consider, given that I’m sure 99.999% of people just blindly trust those are the correct values (including me until I did all this work)
- It’s doing some kind of additional processing I’m not aware of, and which doesn’t match ssa.gov’s own published calculator.
If you have any ideas why I might be seeing this discrepancy, please let me know.
I’ve placed the code in the EYFI github repo, which you’re welcome to download and run yourself if you’d like to plug in your own values or just play around with different inputs.
You can also run the embedded Python interpreter below. Modify the user inputs section at the top as desired, then hit the Run/Play (sideways triangle) button to generate the plots. 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.
Now that I’ve upgraded the tool to provide future RIB estimates, I’m very excited to start tackling the analysis questions I laid out a couple weeks ago.