1. What the calculator answers
The calculator compares two contribution calendars that share the same effective annual return and the same retirement age. Each investor can use a different monthly contribution:
- Early investor: contributes from a start age to a stop age, then lets the balance compound with no further contributions.
- Later investor: starts later and contributes from a start age to a stop age, then lets the balance compound with no further contributions.
It then solves two catch-up questions for the later investor, finds any shared break-even return, and shows the early investor's continued-contribution scenario.
2. Rate convention
The user-entered annual return ra is an effective annual return. The equivalent monthly rate is:
r_m = (1 + r_a)^(1/12) − 1
The annual return is not divided by 12. Any effective annual return must be greater than −100%.
3. Ordinary annuity
Contributions occur at the end of each month. For a constant monthly contribution P over n months:
FV = P × ((1 + r_m)^n − 1) / r_m If r_m = 0: FV = P × n
The engine uses expm1 and log1p for numerical stability near zero. Internals keep full precision; the page rounds only for display.
4. Early and later investors
n_E = (early stop age − early start age) × 12 n_C = (retirement age − early stop age) × 12 n_L = (later stop age − later start age) × 12 n_LC = (retirement age − later stop age) × 12 FV_E,stop = ordinary annuity(P_E, r_m, n_E) FV_E = FV_E,stop × (1 + r_m)^n_C FV_L,stop = ordinary annuity(P_L, r_m, n_L) FV_L = FV_L,stop × (1 + r_m)^n_LC C_E = P_E × n_E C_L = P_L × n_L Investment growth = ending value − total contributed
5. Catch-up solvers
Required return: hold the later investor's contribution window, retirement age, and later monthly contribution PL fixed. Solve FVL(r) = FVE for the later investor's effective annual return. The solver is a monotonic bisection on r > −100% and is allowed to return a negative rate.
Required contribution: hold ages and the shared return fixed. Because ending value is linear in the later monthly contribution:
P*_L = FV_E / (annuity factor(r_m, n_L) × (1 + r_m)^n_LC)
6. Break-even return
The break-even return is the shared effective annual return at which FVE(r) = FVL(r) given each investor's contribution calendar and monthly amount. The engine scans a useful range (approximately −50% to +300%) for a sign change, then bisects.
If one cash-flow pattern strictly contains the other, or the two calendars are identical, there may be no meaningful finite root. The calculator reports that instead of inventing a number.
7. Continued contributions
n_EC = (retirement age − early start age) × 12 FV_EC = ordinary annuity(P_E, r_m, n_EC)
This is a secondary illustration only. The primary chart shows the two core investors and uses the same projection functions as the headline results.
8. Engine location
All financial math lives in:
calculators/cost-of-waiting-to-invest/engine.js
The page UI reads engine results. It does not re-implement the formulas.
9. Assumptions
- Nominal dollars; inflation is not included.
- Constant contributions; no indexation.
- End-of-month contributions; no starting lump sum.
- No taxes, fees, withdrawals, or account-type rules.
- Results are illustrations, not forecasts.