Как посчитать Runway в SQL

Проверь себя · 1/3разбор после ответа
Что можно корректно утверждать про результат запроса SELECT user_id FROM users LIMIT 10, если в нём нет ORDER BY?

Зачем Runway

В стартапе runway — это секундомер. Если осталось 4 месяца, то через 4 месяца компания закроется, если ничего не предпринять. Знать runway надо постоянно и не позже чем за 6 месяцев до нового раунда инвестиций.

Что такое Runway

Runway — сколько месяцев компания протянет при текущем запасе денег и темпе их расходования (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;

Анализ чувствительности

«Что если burn вырастет на 20%? Что если выручка вырастет на 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;
Закрепи формулу runway в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать runway в Telegram

Прогноз Runway

Если ожидаете изменения денежного потока:

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. Burn за один месяц. Декабрьский burn был высоким (бонусы), январский — низким. Не считайте runway по одиночным месяцам.

Ошибка 2. Не учитывать рост. Если выручка растёт на +20% MoM, runway со временем удлиняется. Линейный расчёт его занижает.

Ошибка 3. Забыть про плановые выплаты. Через 3 месяца плановая выплата $500K (аренда, налоги, выплаты инвесторам). Включите её в прогноз.

Ошибка 4. Деньги против доступных денег. На счету $5M, но $2M из них заморожены (например, на эскроу). Реально доступно только $3M.

Ошибка 5. Игнорировать сезонность. Сезонная выручка (когда на Q4 приходится 70% годовой) искажает среднее.

Связанные темы

FAQ

Какой Runway считается нормальным?

Перед раундом стоит иметь минимум 12 месяцев. 18-24 месяца — комфортно, а меньше 6 — уже критично.

Runway 24 месяца — повод расслабиться?

Нет. Привлечение раунда занимает 6-12 месяцев, поэтому начинать нужно минимум за 12 месяцев до того, как деньги закончатся.

Runway отрицательный — что значит?

Это значит, что net burn положителен: вы зарабатываете больше, чем тратите, и запас денег растёт. Runway в этом случае бесконечен, то есть метрика неприменима.

Прогноз или исторические данные?

Прогноз нужен для планирования, а исторические данные — чтобы оценить текущее состояние. Используйте оба подхода.

Runway упал на 30% — что делать?

Сначала понять причину: выросли расходы или упала выручка. И уже по ней резать соответствующую статью.