The short answer
- It compounds monthly:
balance = balance × (1 + rate/12) + contribution, repeated month by month. - Two modes: project until you reach an amount, or project forward to a date and report the value there.
- The rate you type is treated as nominal. Enter 7% and the effective compounded return is 7.23% a year.
- It does not model inflation, tax, fees, sequence-of-returns risk or variable contributions.
- It is a sensitivity tool, not a prediction. Changing the return assumption from 5% to 9% moves a typical result by seven years.
The arithmetic, in full
There is no proprietary model here and no machine learning. The projection is a loop that runs once per month:
- Convert the annual return you entered into a monthly rate:
monthlyRate = annualReturnPct / 100 / 12 - For each month:
balance = balance × (1 + monthlyRate) + contribution - Separately track contributions alone:
invested = invested + contribution - Stop when the balance crosses your target, or when the horizon runs out (50 years by default)
Two lines are plotted from those numbers. The portfolio line is the balance including growth. The invested line is only the money you put in. The gap between them is compounding, and watching that gap widen is the entire argument for starting early.
Growth is applied before the contribution each month, which treats your monthly payment as arriving at the end of the month rather than the start. That is the conservative convention — an end-of-month contribution has one month less to compound than a start-of-month one — and it matches how most people actually invest, out of a salary that arrives at month end.
Nominal versus effective: why 7% becomes 7.23%
Dividing the annual rate by twelve gives a nominal monthly rate. Because each month's growth compounds on the previous month's, twelve of those months produce slightly more than the headline figure:
| You enter | Monthly rate | Effective annual return |
|---|---|---|
| 5% | 0.4167% | 5.12% |
| 7% | 0.5833% | 7.23% |
| 10% | 0.8333% | 10.47% |
This is the same convention as the difference between APR and APY on a savings account, and it is what nearly every retirement calculator does. It is documented here because a number you cannot reconcile is a number you cannot trust. If you want the effective return to be exactly 7%, enter 6.78%.
A worked example
Someone with €50,000 invested, adding €1,000 a month, assuming 7% a year, targeting €750,000:
| Result | Value |
|---|---|
| Target reached after | 20 years 5 months |
| Total contributed over that period | €296,000 |
| Growth | €454,000 |
Roughly 60% of the final figure is growth rather than contributions. That ratio is the single most useful thing the chart communicates, and it is why the invested line is drawn alongside the portfolio line rather than left out for tidiness.
The number that should worry you
Keep every input above identical and change only the assumed return:
| Assumed annual return | Years to €750,000 |
|---|---|
| 5% | 24.6 years |
| 7% | 20.4 years |
| 9% | 17.5 years |
A four-percentage-point swing in an assumption nobody can verify in advance moves the answer by seven years. That is not a flaw in the arithmetic; the arithmetic is exact. It is a property of compound growth, and it is the most important thing to understand about any FIRE projection, including this one.
The productive question is not "when will I reach financial independence?" — the honest answer is that nobody knows. It is "how much does my answer move when my assumptions are wrong?" Run the projection three times, at a pessimistic, central and optimistic rate, and treat the spread as the actual result.
The two goal modes
Amount mode: "when do I reach this number?"
You supply a target and the projection runs forward until the balance crosses it, capped at a 50-year horizon. The crossover is interpolated within the month it happens rather than rounded to a whole month, so the answer reads as 20 years 5 months instead of jumping in twelve-month steps.
Date mode: "what will I have by then?"
You supply a calendar month and the projection runs to exactly that point and reports the balance there. This is the mode to use when the date is fixed by something other than money — a mortgage ending, a child finishing school, a planned career change.
There is also an inverse: given a target and a date, the app solves for the monthly contribution required to connect them. That number is often more actionable than the projection itself, because it is the one thing on the screen you directly control.
Where the target number comes from
The projection needs a target, and the convention most FIRE planning uses is 25× annual spending — the inverse of a 4% withdrawal rate, from the 1998 Trinity Study on sustainable portfolio withdrawals.
| Annual spending | 25× target |
|---|---|
| €30,000 | €750,000 |
| €40,000 | €1,000,000 |
| €50,000 | €1,250,000 |
Two caveats that the shorthand tends to lose. The Trinity Study examined 30-year retirement horizons using US market history; a longer retirement, or a different market, is not the case it tested. And it is a rule of thumb derived from one dataset, not a law. Many people plan on 3.5% (28×) for a long horizon. Portfolio On Fire does not pick for you — you enter the target, and the arithmetic above is applied to it.
What this projection does not model
This is the part most calculators leave out, which is precisely why it belongs near the end rather than in a footnote:
- Inflation. Results are in today's nominal currency. If you assume 7% growth and inflation runs at 2%, your real purchasing power grows at roughly 5%. To think in today's money, enter a real (inflation-adjusted) return instead of a nominal one.
- Tax. No capital gains tax, dividend withholding, or wealth tax. These vary enormously by country — a Dutch investor's position differs sharply from a US or German one — and guessing badly would be worse than not guessing.
- Fees. Fund charges and platform fees are not deducted. Subtract them from your assumed return: a 7% expectation with a 0.2% ongoing charge should be entered as 6.8%.
- Sequence-of-returns risk. The model applies a smooth, identical return every month. Real markets do not, and when a bad decade lands matters enormously — a crash early in accumulation is very different from the same crash late. Two portfolios with the same average return can end far apart.
- Variable contributions. One constant monthly figure. No raises, no career breaks, no lumpy bonuses.
Each addition would demand inputs most people cannot supply accurately — your marginal rate in retirement, your country's treatment of unrealised gains, your salary trajectory over twenty years. A model with five confident-looking but invented inputs is less honest than a simple one with its limits written down. The arithmetic above is exact; it is the assumptions that carry the uncertainty, and hiding them behind more machinery does not reduce it.
How it is tested
The projection is a pure function: every input arrives as an argument, it reads no application state, and it touches no interface. That makes it testable in isolation, and it is covered by its own unit test suite. It runs entirely on your device — your portfolio value, your contribution rate and your retirement target are inputs to a local calculation, not a request to a server.
Portfolio On Fire is a tracking and planning tool. It does not broker trades, hold funds, or recommend what to buy. This page describes arithmetic, not a recommendation, and nobody involved is a licensed financial adviser. For decisions that matter, talk to someone regulated in your country.