yFIRECalc 2.0: The Calculator That Shows You \*Why\* You Should Retire Early

which Rockstar has covered here. Of course, these calculators deal in dollars. But while dollars might reveal the how of FIRE, they can never reveal the why of it. This post introduces a new kind of calculator that shows why you should retire early: yFIRECalc 2.0.* This why-type calculator doesn't measure dollars. Instead, it measures something far more valuable: your precious hours of freedom.

The Why of yFireCalc 2.0

Why use this calculator? First, yFIRECalc is a great motivator because it shows concrete results tailored to your own unique circumstances. By running different scenarios, you can explore the trade-offs between working longer to save more money or retiring sooner to seize more freedom. With a few forecasts under your belt, the hazy goal of early retirement will become far more tangible. Second, yFIRECalc outperforms mere guesstimates. If you retire at 57 and full retirement is normally age 67, some might say you've gained ten years of freedom. But this quick take misses much. yFIRECalc accounts for often overlooked details such as part-time work during early retirement, the effect of vacations, and the hours your job steals away when you're not on the company clock (your commute, for example). Third, and most importantly, yFIRECalc explores a fundamental truth that eludes every other retirement calculator: time is the great equalizer. Each full year you live on this planet, you receive the exact same amount of time as everyone else: 8,760 hours (plus 24 bonus hours in leap years). In stark chronological terms, you stand on equal footing with Bill Gates and Warren Buffet. True, they're billionaires and you're not. But it doesn't take billions of dollars to amass a billionaire's horde of free hours. yFIRECalc investigates how much time you can stash away on a budget—then you can get together with Bill and Warren to compare notes.

yFIRECalc 2.0 Instructions

The calculator is easy to use. When you input your data, yFIRECalc shows the amount of liberty that early retirement delivers. The calculator states the results not in dollars, but rather in hours, days, weeks, months, and years—the very stuff of life. Lines 1-2: these require no explanation. Line 3: enter your expected age at early retirement a/k/a FIRE—this must be a whole number (e.g., 48)  because decimals (e.g., 48.4) don't work well with date calculations. Don't worry if you haven't yet picked a precise age to leave the workforce. Just input a ballpark number. Later on you can make other forecasts that use different dates for FIRE. Line 4: enter a benchmark age at which you'd be out of the workforce completely if you pursued a traditional retirement (again, decimals don't work here). If you don't know which age to input, a good source to consult is the Social Security Administration, which defines full retirement as 67 years old for those born in 1960 or later. Line 5: a job takes more away from your life than hours at a desk. It takes time to commute. It takes time to suit up in the morning and wind down at night. It takes time to fly to distant meetings, appear at company events, and answer weekend emails. All these hours are part of your existing job commitment. So when you enter the average hours per week you devote to your job, be inclusive. Don't underestimate how much time your livelihood extracts from your life. For accuracy, you should also subtract from your weekly average a number that reflects your annual vacation time (e.g., if you take three weeks leave per year, lower your weekly work estimate by 5.75 percent [3 weeks / 52 weeks = 5.75%]). By the way, line 5 involves no date, so you're free to input a decimal point. Line 6: life is more than just work and free time. Estimate your weekly hours of sleep (if you like, you can input a decimal here too). Line 7: if you intend to work part-time in early retirement, input your anticipated weekly commitment. Include commutes, client entertaining, committee work, etc. Again, decimal points are acceptable. Note: a key premise of yFIRECalc is that you will stop all work, including part-time work, at your benchmark retirement age. If you expect to work past the age you entered on line 4, go back and revise that number so it accurately states the age at which you'll be 100 percent retired.

Here's The Calculator!

Once you click the "Run yFIRECalc!" button, lines 8 through 28 will populate with all sorts of revealing information. This is what shows the why of early retirement—along with the helpful pie charts, of course. (Nothing you enter is recorded or stored)

1

Your Date of Birth (mm/dd/yyyy):

2

Your Sex (check one box):

Male Female

3

Your Age at FIRE (don't use decimals):

4

Your Age at Benchmark Retirement (don't use decimals):

5

Your Average Work Hours Per Week (with commutes, etc.):

6

Your Average Hours of Sleep Per Week (e.g., 7 x 8 = 56):

7

Your Weekly Hours of Part-Time Work post-FIRE (with commutes, etc.):

Run yFIRECalc!

var lifelength1; var lifelength2; function clickEvent() { myFunction(); myDobFunction(); myLifeExpFunction1(); myErRetFunction(); myBenchRetFunction(); myLifeExpFunction2(); myBenchSleepHrs(); myBenchWorkHrs(); myBenchFreeHrs(); myErWorkHrs(); myCueCharts(); } function myFunction() { var today = new Date(); var mm = today.getMonth()+1; //January is 0! var dd = today.getDate(); var yyyy = today.getFullYear(); if(mm<10){ mm='0'+mm; } if(dd<10){ dd='0'+dd; } var today = mm+'/'+dd+'/'+yyyy; document.getElementById("currentDate").innerHTML = today; } function myDobFunction() { var dob = new Date(document.getElementById("myDob").value); var today = new Date(); years = (today.getFullYear() - dob.getFullYear()) * 1; dob.setFullYear(today.getFullYear()); if (today < dob) { years--; } document.getElementById("currentAge").innerHTML = years + " years old" ; } function myLifeExpFunction1() { var malelife = [0, 76.4, 75.9, 75.0, 74.0, 73.0, 72.0, 71.0, 70.0, 69.0, 68.0, 67.0, 66.1, 65.1, 64.1, 63.1, 62.1, 61.1, 60.2, 59.2, 58.2, 57.3, 56.4, 55.4, 54.5, 53.6, 52.6, 51.7, 50.8, 49.8, 48.9, 48.0, 47.0, 46.1, 45.2, 44.3, 43.3, 42.4, 41.5, 40.5, 39.6, 38.7, 37.8, 36.9, 35.9, 35.0, 34.1, 33.2, 32.3, 31.5, 30.6, 29.7, 28.9, 28.1, 27.2, 26.4, 25.6, 24.8, 24.0, 23.2, 22.4, 21.7, 20.9, 20.1, 19.4, 18.7, 17.9, 17.2, 16.5, 15.8, 15.1, 14.4, 13.7, 13.0, 12.4, 11.8, 11.2, 10.5, 10.0, 9.4, 8.8, 8.3, 7.8, 7.3, 6.8, 6.3, 5.9, 5.5, 5.1, 4.7, 4.4, 4.1, 3.8, 3.5, 3.3, 3.0, 2.8, 2.6, 2.5, 2.3, 2.2]; var femalelife = [0, 81.2, 80.6, 79.6, 78.7, 77.7, 76.7, 75.7, 74.7, 73.7, 72.7, 71.7, 70.7, 69.7, 68.7, 67.8, 66.8, 65.8, 64.8, 63.8, 62.8, 61.9, 60.9, 59.9, 58.9, 58.0, 57.0, 56.0, 55.0, 54.1, 53.1, 52.1, 51.2, 50.2, 49.2, 48.3, 47.3, 46.4, 45.4, 44.5, 43.5, 42.6, 41.6, 40.7, 39.7, 38.8, 37.9, 36.9, 36.0, 35.1, 34.2, 33.3, 32.4, 31.5, 30.6, 29.7, 28.9, 28.0, 27.1, 26.3, 25.4, 24.6, 23.7, 22.9, 22.1, 21.3, 20.5, 19.7, 18.9, 18.1, 17.3, 16.5, 15.8, 15.1, 14.3, 13.6, 12.9, 12.2, 11.6, 10.9, 10.3, 9.7, 9.1, 8.5, 8.0, 7.5, 6.9, 6.5, 6.0, 5.6, 5.2, 4.8, 4.5, 4.1, 3.8, 3.6, 3.3, 3.1, 2.9, 2.7, 2.5]; if (document.getElementById("mySexIsMale").checked) { lifelength1 = malelife[years]; } else { lifelength1 = femalelife[years]; } document.getElementById("currentLifeExp").innerHTML = lifelength1 + " years" ; } function myErRetFunction() { var x = new Date(document.getElementById("myDob").value); var yyyy; var mm; var dd; if ( !!x.valueOf() ) { // Valid date yyyy = x.getUTCFullYear(); mm = x.getUTCMonth()+1; dd = x.getUTCDate(); } if(mm<10){ mm='0'+mm; } if(dd<10){ dd='0'+dd; } var y = (document.getElementById("myErAge").value) * 1; var zzzz = yyyy + y; z1 = mm+'/'+dd+'/'+zzzz; document.getElementById("earlyRet").innerHTML = z1; } function myBenchRetFunction() { var x = new Date(document.getElementById("myDob").value); var yyyy; var mm; var dd; if ( !!x.valueOf() ) { // Valid date yyyy = x.getUTCFullYear(); mm = x.getUTCMonth()+1; dd = x.getUTCDate(); } if(mm<10){ mm='0'+mm; } if(dd<10){ dd='0'+dd; } var y = (document.getElementById("myBenchAge").value) * 1; var zzzz = yyyy + y; z2 = mm+'/'+dd+'/'+zzzz; document.getElementById("benchRet").innerHTML = z2; } function myLifeExpFunction2() { var malelife = [0, 76.4, 75.9, 75.0, 74.0, 73.0, 72.0, 71.0, 70.0, 69.0, 68.0, 67.0, 66.1, 65.1, 64.1, 63.1, 62.1, 61.1, 60.2, 59.2, 58.2, 57.3, 56.4, 55.4, 54.5, 53.6, 52.6, 51.7, 50.8, 49.8, 48.9, 48.0, 47.0, 46.1, 45.2, 44.3, 43.3, 42.4, 41.5, 40.5, 39.6, 38.7, 37.8, 36.9, 35.9, 35.0, 34.1, 33.2, 32.3, 31.5, 30.6, 29.7, 28.9, 28.1, 27.2, 26.4, 25.6, 24.8, 24.0, 23.2, 22.4, 21.7, 20.9, 20.1, 19.4, 18.7, 17.9, 17.2, 16.5, 15.8, 15.1, 14.4, 13.7, 13.0, 12.4, 11.8, 11.2, 10.5, 10.0, 9.4, 8.8, 8.3, 7.8, 7.3, 6.8, 6.3, 5.9, 5.5, 5.1, 4.7, 4.4, 4.1, 3.8, 3.5, 3.3, 3.0, 2.8, 2.6, 2.5, 2.3, 2.2]; var femalelife = [0, 81.2, 80.6, 79.6, 78.7, 77.7, 76.7, 75.7, 74.7, 73.7, 72.7, 71.7, 70.7, 69.7, 68.7, 67.8, 66.8, 65.8, 64.8, 63.8, 62.8, 61.9, 60.9, 59.9, 58.9, 58.0, 57.0, 56.0, 55.0, 54.1, 53.1, 52.1, 51.2, 50.2, 49.2, 48.3, 47.3, 46.4, 45.4, 44.5, 43.5, 42.6, 41.6, 40.7, 39.7, 38.8, 37.9, 36.9, 36.0, 35.1, 34.2, 33.3, 32.4, 31.5, 30.6, 29.7, 28.9, 28.0, 27.1, 26.3, 25.4, 24.6, 23.7, 22.9, 22.1, 21.3, 20.5, 19.7, 18.9, 18.1, 17.3, 16.5, 15.8, 15.1, 14.3, 13.6, 12.9, 12.2, 11.6, 10.9, 10.3, 9.7, 9.1, 8.5, 8.0, 7.5, 6.9, 6.5, 6.0, 5.6, 5.2, 4.8, 4.5, 4.1, 3.8, 3.6, 3.3, 3.1, 2.9, 2.7, 2.5]; var x = (document.getElementById("myBenchAge").value) * 1; if (document.getElementById("mySexIsMale").checked) { lifelength2 = malelife[x]; } else { lifelength2 = femalelife[x]; } document.getElementById("benchLifeExp").innerHTML = lifelength2 + " years" ; } function myBenchSleepHrs() { var today = new Date(); var diffdays = ((Date.parse(z2) - Date.parse(today)) / 86400000); var diffweeks = diffdays / 7; bsleephours = Math.round(diffweeks * document.getElementById("mySleep").value); // global var! document.getElementById("benchSleepHrs").innerHTML = bsleephours + " hours" ; document.getElementById("erSleepHrs").innerHTML = bsleephours + " hours" ; } function myBenchWorkHrs() { var today = new Date(); var diffdays = ((Date.parse(z2) - Date.parse(today)) / 86400000); var diffweeks = diffdays / 7; bworkhours = Math.round(diffweeks * document.getElementById("myHrs").value); document.getElementById("benchWorkHrs").innerHTML = bworkhours + " hours" ; } function myBenchFreeHrs() { var today = new Date(); var diffdays = ((Date.parse(z2) - Date.parse(today)) / 86400000); var diffhours = diffdays * 24; freehours = Math.round(diffhours - (bsleephours + bworkhours)); totalbenchhours = (freehours + bsleephours + bworkhours); document.getElementById("benchFreeHrs").innerHTML = freehours + " hours" ; document.getElementById("benchTotalHrs").innerHTML = totalbenchhours + " hours" ; } function myErWorkHrs() { var today = new Date(); var diffdays1 = ((Date.parse(z1) - Date.parse(today)) / 86400000); var diffweeks1 = diffdays1 / 7; var workhours1 = Math.round(diffweeks1 * document.getElementById("myHrs").value); var diffdays2 = ((Date.parse(z2) - Date.parse(z1)) / 86400000); var diffweeks2 = diffdays2 / 7; var workhours2 = Math.round(diffweeks2 * document.getElementById("myErHrs").value); erworkhours = (workhours1 + workhours2) * 1; erfreehourstotal = (totalbenchhours - (bsleephours + erworkhours)) * 1; var ertotalhours = (bsleephours + erworkhours + erfreehourstotal) * 1; var erminusbenchhrs = (erfreehourstotal - freehours) * 1; var daysfreegained = erminusbenchhrs / (24 - (document.getElementById("mySleep").value / 7)); var wksfreegained = erminusbenchhrs / (168 - document.getElementById("mySleep").value ); var mthsfreegained = erminusbenchhrs / (720 - (document.getElementById("mySleep").value / 7) * 30 ); var yrsfreegained = erminusbenchhrs / (8760 - (document.getElementById("mySleep").value * 52 )); var pctfreegained = (erminusbenchhrs / freehours) * 100; var pctfreebench = (freehours + (lifelength2 * (8760 - (document.getElementById("mySleep").value * 52 )))) / (totalbenchhours + (lifelength2 * 8760)) * 100; // =(C29+(C23*(8760-(C12*52))))/(C30+(C23*8760)) from Excel yFireCalc var pctfreeer = (erfreehourstotal + (lifelength2 * (8760 - (document.getElementById("mySleep").value * 52 )))) / (totalbenchhours + (lifelength2 * 8760)) * 100; // =(C36+(C23*(8760-(C12*52))))/(C30+(C23*8760)) from Excel yFireCalc document.getElementById("erComboWorkHrs").innerHTML = erworkhours + " hours" ; document.getElementById("erFreeHrs").innerHTML = erfreehourstotal + " hours" ; document.getElementById("erTotalHrs").innerHTML = ertotalhours + " hours" ; document.getElementById("netFreeHrs").innerHTML = erminusbenchhrs + " hours" ; document.getElementById("netFreeDays").innerHTML = daysfreegained.toFixed(0) + " days" ; document.getElementById("netFreeWks").innerHTML = wksfreegained.toFixed(0) + " weeks" ; document.getElementById("netFreeMths").innerHTML = mthsfreegained.toFixed(0) + " months" ; document.getElementById("netFreeYrs").innerHTML = yrsfreegained.toFixed(2) + " years" ; document.getElementById("netFreePct").innerHTML = pctfreegained.toFixed(2) + "%"; document.getElementById("benchFreePct").innerHTML = pctfreebench.toFixed(2) + "%"; document.getElementById("erFreePct").innerHTML = pctfreeer.toFixed(2) + "%"; } window.onload = function() { var chart1fill = new CanvasJS.Chart("chartContainer1", { title:{ text: "Benchmark Life Hours" }, subtitles:[ { text: "From Today Until mm/dd/yyyy" } ], data: [ { type: "pie", dataPoints: [ { label: "sleep hours", y: 1 , color: "#b3b3ff" }, { label: "work hours", y: 1 , color: "#ff8080" }, { label: "free hours", y: 1 , color: "#85e085" } ] } ] }); var chart2fill = new CanvasJS.Chart("chartContainer2", { title :{ text: "FIRE Life Hours" }, subtitles:[ { text: "From Today Until mm/dd/yyyy" } ], data: [ { type: "pie", dataPoints: [ { label: "sleep hours", y: 1 , color: "#b3b3ff" }, { label: "work hours", y: 1 , color: "#ff8080" }, { label: "free hours", y: 1 , color: "#85e085" } ] } ] }); chart1fill.render(); chart2fill.render(); } function myCueCharts() { var chart1 = new CanvasJS.Chart("chartContainer1", { title:{ text: "Benchmark Life Hours" }, subtitles:[ { text: "From Today Until " + z2 } ], data: [ { type: "pie", dataPoints: [ { label: "sleep hours", y: bsleephours , color: "#b3b3ff" }, { label: "work hours", y: bworkhours , color: "#ff8080" }, { label: "free hours", y: freehours , color: "#85e085" } ] } ] }); var chart2 = new CanvasJS.Chart("chartContainer2", { title :{ text: "FIRE Life Hours" }, subtitles:[ { text: "From Today Until " + z2 } ], data: [ { type: "pie", dataPoints: [ { label: "sleep hours", y: bsleephours , color: "#b3b3ff" }, { label: "work hours", y: erworkhours , color: "#ff8080" }, { label: "free hours", y: erfreehourstotal , color: "#85e085" } ] } ] }); chart1.render(); chart2.render(); }

8

Today's Date:

9

Your Current Age:

10

Your Current Life Expectancy:

11

Date of FIRE:

12

Date of Benchmark Retirement:

13

Your Life Expectancy on Benchmark Retirement Date:

14

Benchmark Retirement Sleep Hours:

15

Benchmark Retirement Work Hours:

16

Benchmark Retirement Free Hours:

17

Benchmark Retirement Total Hours:

18

FIRE Sleep Hours:

19

FIRE Work Hours:

20

FIRE Free Hours:

21

FIRE Total Hours:

22

Hours of Freedom Gained--FIRE vs. Benchmark Retirement:

23

Days of Freedom Gained--FIRE vs. Benchmark Retirement:

24

Weeks of Freedom Gained--FIRE vs. Benchmark Retirement:

25

Months of Freedom Gained--FIRE vs. Benchmark Retirement:

26

Years of Freedom Gained--FIRE vs. Benchmark Retirement:

27

Percent of Extra Freedom Gained--FIRE vs. Benchmark Retirement:

28

Benchmark Retirement--Percent of Free Hours Remaining in Life:

29

FIRE--Percent of Free Hours Remaining in Life:

Notes

#1. The pie charts project your hours of sleep, work, and liberty between today (line 8) and your benchmark retirement date (lines 4 and 12). Why no pies for the period from your benchmark retirement until the end of your life expectancy? Simple. During that time frame you don't work; all you have is free time and blissful hours of sleep. As a result, any pies displayed under the competing FIRE and Benchmark scenarios would look identical. #2. Fun feature: if you hover or click your mouse over the pie slices, cool animations ensue. #3. Life expectancies in lines 10 and 13 are from the National Center for Health Statistics. Women tend to live longer, which is why the calculator seeks your gender (line 2). #4. Line 22 = line 20 - line 16. #5. Line 23 = line 22 / (24 - (line 6 / 7)). #6. Line 24 = line 22 / (168 - line 6). #7. Line 25 = line 22 / (720 - (line 6 / 7) * 30)). #8. Line 26 = line 22 / (8760 - (line 6 * 52)). #9. Line 27 = line 22 / line 16. #10. Lines 28-29 project the percentage of time you'll spend at liberty between today's date and the end of your life expectancy (line 10). The sooner you reach FIRE, the bigger the gap between these two percentages will be and the more freedom you'll enjoy—so it's time to get FIRE cracking! If you have any critiques about yFIRECalc 2.0, don't keep them to yourself. Please leave a comment. I'll do my best to work your feedback into future releases. ******* About the Author: A NOONAN MOOSE retired in his 40's and lives in Colorado. He blogs about frugality, early retirement, and financial calculators at www.FrugalFringe.com. * yFIRECalc 1.0 was an Excel spreadsheet embedded into a blog post. Since then, I've learned more about Javascript, so version 2.0 appears as an online interactive calculator. As is the case with all my calculators, yFIRECalc 2.0 is completely confidential. Nothing you enter is recorded or stored.