Estimate your company's survival timeline based on cash balance, burn rate, and growth metrics.
Estimated Runway—
Projected "Zero Cash" Date:—
Initial Net Burn Rate:—
Status:—
Understanding Your Runway Calculation
In the high-stakes world of startups and venture capital, Runway refers to the amount of time a company can continue to operate before it runs out of money. This metric is the lifeline of early-stage businesses, dictating strategy, hiring pace, and fundraising timelines.
How This Platform Calculates Runway
Unlike simple calculators that divide cash by a static burn rate, this platform utilizes an iterative algorithm to account for growth dynamics:
Dynamic Revenue Growth: The calculation compounds your monthly revenue based on your inputs, simulating a growing SaaS or subscription business.
Expense Creep: As companies grow, costs rarely stay flat. The calculator factors in your monthly expense growth percentage.
Net Burn Analysis: It calculates Net Burn = Gross Expenses – Revenue for every future month until cash reserves are depleted.
Key Metrics Explained
Gross Burn vs. Net Burn: Gross burn is the total amount of money you spend each month. Net burn is the amount you lose after accounting for incoming revenue. Your runway depends on Net Burn.
Default Alive vs. Default Dead: These terms, coined by Paul Graham, describe a startup's trajectory. If your revenue growth is high enough to reach profitability before running out of cash, you are "Default Alive." If not, you are "Default Dead" and must raise funds or cut costs to survive.
Why Runway Matters
Ideally, a startup should aim for 18-24 months of runway after a funding round. This provides roughly 12-15 months to execute on the business plan and 6-9 months to secure the next round of financing without the desperation that devalues the company.
Note: This tool provides estimations based on mathematical projections. Real-world scenarios often involve unexpected costs or revenue churn. Always maintain a buffer in your financial planning.
function calculateRunway() {
// 1. Get Input Values
var cash = parseFloat(document.getElementById('cashBalance').value);
var startExpenses = parseFloat(document.getElementById('monthlyExpenses').value);
var startRevenue = parseFloat(document.getElementById('monthlyRevenue').value);
var expGrowthRate = parseFloat(document.getElementById('expenseGrowth').value);
var revGrowthRate = parseFloat(document.getElementById('revenueGrowth').value);
// 2. Validate Inputs
if (isNaN(cash) || isNaN(startExpenses) || isNaN(startRevenue)) {
alert("Please enter valid numbers for Cash, Expenses, and Revenue.");
return;
}
// Handle optional growth rates (default to 0 if empty)
if (isNaN(expGrowthRate)) expGrowthRate = 0;
if (isNaN(revGrowthRate)) revGrowthRate = 0;
// Convert percentages to decimals
var expMultiplier = 1 + (expGrowthRate / 100);
var revMultiplier = 1 + (revGrowthRate / 100);
// 3. Calculation Logic (Iterative)
var currentCash = cash;
var currentExpenses = startExpenses;
var currentRevenue = startRevenue;
var months = 0;
var maxMonths = 120; // Cap at 10 years to prevent infinite loops
var isInfinite = false;
// Initial Burn Calculation
var initialNetBurn = startExpenses – startRevenue;
// Simulation Loop
while (currentCash > 0 && months < maxMonths) {
// Calculate Net Burn for this month
var netBurn = currentExpenses – currentRevenue;
// If Net Burn is negative (Profit), check if it stays that way
if (netBurn = expenses, we add cash.
currentCash -= netBurn; // netBurn is negative, so this adds cash
} else {
// Burning cash
currentCash -= netBurn;
}
// Apply growth for next month
currentExpenses *= expMultiplier;
currentRevenue *= revMultiplier;
months++;
// Check for Infinite Runway Scenario (Profitability reached and sustained)
if (currentCash > cash * 2 && netBurn 0)) {
resultMonthsText = "Infinite";
resultDateText = "Sustainable / Profitable";
statusText = "Default Alive (Profitable)";
resultBoxClass += " alert-success";
} else {
resultMonthsText = months + " Months";
// Calculate calendar date
var today = new Date();
today.setMonth(today.getMonth() + months);
var options = { year: 'numeric', month: 'long' };
resultDateText = today.toLocaleDateString("en-US", options);
if (months < 6) {
statusText = "Critical (Immediate Action Needed)";
resultBoxClass += " alert-danger";
} else if (months < 12) {
statusText = "Warning (Fundraise Soon)";
} else {
statusText = "Healthy";
}
}
// Format Currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
maximumFractionDigits: 0
});
// 5. Display Results
document.getElementById('runwayMonths').innerText = resultMonthsText;
document.getElementById('zeroDate').innerText = resultDateText;
document.getElementById('initialBurn').innerText = formatter.format(initialNetBurn);
document.getElementById('runwayStatus').innerText = statusText;
// Style adjustment based on health
var mainBox = document.getElementById('mainResultBox');
mainBox.className = resultBoxClass;
// Show container
document.getElementById('results').style.display = "block";
}