Как посчитать Runway в SQL
Содержание:
Зачем Runway
В стартапе runway — секундомер. Если осталось 4 месяца, через 4 месяца компания закроется без действий. Знать runway надо постоянно, и не позже чем за 6 месяцев до fundraise.
Что такое Runway
Runway — сколько месяцев компания протянет на текущем cash и burn rate.
Runway (months) = Current Cash / Average Monthly Net BurnБазовый расчёт
WITH latest AS (
SELECT cash_balance, month FROM cash_flow ORDER BY month DESC LIMIT 1
),
burn AS (
SELECT AVG(expenses - revenue) AS avg_net_burn
FROM cash_flow
WHERE month >= (SELECT month FROM latest) - INTERVAL '3 months'
AND month <= (SELECT month FROM latest)
)
SELECT
l.cash_balance,
b.avg_net_burn,
l.cash_balance::NUMERIC / NULLIF(b.avg_net_burn, 0) AS runway_months
FROM latest l
CROSS JOIN burn b;Sensitivity-анализ
«Что если burn вырастет на 20%? Что если revenue +50%?»
WITH latest AS (
SELECT cash_balance FROM cash_flow ORDER BY month DESC LIMIT 1
),
burn AS (
SELECT
AVG(expenses) AS avg_expenses,
AVG(revenue) AS avg_revenue
FROM cash_flow
WHERE month >= CURRENT_DATE - INTERVAL '3 months'
)
SELECT
'baseline' AS scenario,
l.cash_balance,
b.avg_expenses - b.avg_revenue AS net_burn,
l.cash_balance::NUMERIC / NULLIF(b.avg_expenses - b.avg_revenue, 0) AS runway
FROM latest l, burn b
UNION ALL
SELECT
'expenses +20%',
l.cash_balance,
b.avg_expenses * 1.2 - b.avg_revenue,
l.cash_balance::NUMERIC / NULLIF(b.avg_expenses * 1.2 - b.avg_revenue, 0)
FROM latest l, burn b
UNION ALL
SELECT
'revenue +50%',
l.cash_balance,
b.avg_expenses - b.avg_revenue * 1.5,
l.cash_balance::NUMERIC / NULLIF(b.avg_expenses - b.avg_revenue * 1.5, 0)
FROM latest l, burn b;Forecast Runway
Если ожидаете изменения cash flow:
WITH forecast AS (
SELECT * FROM (VALUES
('2026-05-01'::DATE, -300000, 50000),
('2026-06-01'::DATE, -310000, 60000),
('2026-07-01'::DATE, -320000, 80000),
('2026-08-01'::DATE, -330000, 100000)
) AS f(month, expenses, revenue)
),
running_cash AS (
SELECT
month,
expenses + revenue AS monthly_delta,
SUM(expenses + revenue) OVER (ORDER BY month) AS cumulative_change
FROM forecast
)
SELECT
month,
monthly_delta,
(SELECT cash_balance FROM cash_flow ORDER BY month DESC LIMIT 1) + cumulative_change AS projected_cash
FROM running_cash
ORDER BY month;Когда projected_cash < 0 — runway закончилось.
Частые ошибки
Ошибка 1. Single-month burn. Декабрьский burn был высоким (бонусы). Январский низкий. Не считайте runway на одиночных месяцах.
Ошибка 2. Не учитывать growth. Если revenue растёт +20% MoM, runway удлинняется со временем. Линейный расчёт занижает.
Ошибка 3. Forgot scheduled outflows. Через 3 месяца плановая выплата $500K (аренда, taxes, заработок инвесторам). Включите в forecast.
Ошибка 4. Cash vs liquid cash. В bank — $5M, но $2M из них — restricted (для escrow). Реальный available — $3M.
Ошибка 5. Игнорировать seasonality. Сезонный revenue (Q4 70% годового revenue) искажает avg.
Связанные темы
- Как посчитать burn rate в SQL
- Как посчитать MRR в SQL
- Как посчитать revenue в SQL
- Как посчитать unit-economics в SQL
FAQ
Какой Runway считается ok?
Минимум 12 месяцев перед fundraise. 18-24 — комфортно. <6 — критично.
Runway 24 месяца — повод расслабиться?
Нет. Fundraise занимает 6-12 месяцев. Начинать за 12+ месяцев до zero cash.
Runway отрицательный — что значит?
Net burn положителен (зарабатываем больше тратим). Cash растёт. Runway = infinity / non-applicable.
Forecast или historical?
Forecast — для plan. Historical — для current state. Используйте обе.
Runway упал на 30% — что делать?
Понять причину: расходы выросли или revenue упал. Cut accordingly.