Привет, Хабр!

Иногда кажется, что команда вроде бы стабильная, спринты идут по плану — а под конец снова в панике жмёмся к дедлайну, выкидываем фичи и дорабатываем вечерами. Чтобы такого не происходило, я хочу рассказать про простую и очень рабочую модель — 3–3–3. Она помогает прогнозировать скорость команды без гаданий на story points и держать реалистичный фокус: сколько мы реально успеем, а не сколько хочется.

Почему story points не дают предсказуемости

Story points — это не метрика, а договорняк. В команде просто говорят: «Окей, эта задача — где‑то на пятёрку». Кто‑то меряет по количеству условий в задаче, кто‑то по глубине копания в легаси, кто‑то по тому, насколько больно будет деплоить. Всё это — ощущения, а не числа. И вот тут‑то и проблема: без контекста эти поинты ничего не значат.

Команда А может честно вкладывать в «пятёрку» три дня работы. Команда Б — день. И обе будут уверены, что всё делают правильно. Ну и как вы это потом нормализуете в прогноз?

План — это хотелка. Прогноз — это реальность.

Вот тут многие путаются. План — это когда команда говорит: «Берём 40 поинтов. Справимся!». А прогноз — это когда ты встаёшь перед зеркалом и говоришь: «Ну, дай бог хотя бы 25 вытянем, если прод не ляжет».

Проблема в том, что планируют по желанию, а живут — по фактам.

Команда берёт 40 просто потому, что в прошлый раз получилось. А то, что в прошлом спринте:

  • никто не свалил в отпуск,

  • CI не валился 3 дня подряд,

  • и багов прод не навалил...

— забывают. И снова ставят на сороковник. А потом удивляются, почему в релиз не влезли. Потому что 40 story points — это не обещание, а диапазон. И этот диапазон может болтаться от 20 до 45 в зависимости от погоды, соседней команды и прочих факторов.

Среднее — это ложь, если не видеть разброс

Опираясь на одно число velocity, вы получаете красивую иллюзию контроля. Но это как говорить «у нас средняя температура по больнице 36.6» — пока не глянешь, что у кого‑то уже труп, а у кого‑то лихорадка. То же самое со спринтом: стабильность — это миф, если вы не считаете отклонения.

Планировать максимум ≠ прогнозировать минимум

Когда вы планируете — вы, как правило, хотите влезть в максимум: «ну мы же справимся, если не будет форс‑мажоров». Они будут.

А вот прогноз — это честный ответ на вопрос «а сколько успеем, если всё пойдёт как обычно?». И вот тут‑то внезапно выходит, что одни и те же 40 SP в плане и прогнозе — это не одно и то же. Потому что в плане мы дерзим, а в прогнозе мы думаем.

Когда пора включать голову

Вот в такие моменты и появляется потребность в чём‑то менее наивном, чем просто «брать как в прошлый раз».

Нужна модель, которая:

  • не требует кристально чистых данных,

  • учитывает, что команда живёт в реальном мире, а не в scrum‑гайдлайнах,

  • даёт понятный язык общения с продактом: не «успеем/не успеем», а «мы движемся в диапазоне от 80 до 120 поинтов — выбирай, с чем тебе комфортно».

И вот именно под это заточена модель 3–3–3. Простая, но спасает.

Что такое модель 3–3–3

Модель строится по принципу честной статистики: мы не угадываем, а смотрим на факты. Алгоритм предельно простой и укладывается в одну строку:

Возьми 3 спринта, посчитай min / median / max velocity — и получи 3 прогноза.

Распишу по шагам.

Берём 3 прошлых спринта

Берём именно 3 — не 5, не 10, не весь год. Почему? Потому что контекст меняется слишком быстро: люди болеют, уезжают в отпуск, приходят новички. Три спринта дают срез последних 1.5 месяцев работы команды в живом виде. Этого достаточно, чтобы увидеть тренд и не утонуть в шуме.

Пример:

Sprint 14 — 32 SP
Sprint 15 — 27 SP
Sprint 16 — 40 SP

Считаем три диапазона: min / median / max

  • min = 27 SP

  • median = 32 SP

  • max = 40 SP

Это три сценария на будущее:

  • Пессимистичный (27) — если всё пойдёт не так.

  • Реалистичный (32) — если всё будет как обычно.

  • Оптимистичный (40) — если никто не отвлечётся и не упадёт прод.

Мы не предсказываем, а ограничиваем ожидания. Это основа риск‑ориентированного планирования.

Строим три сценария прогноза

Теперь можно делать форекаст. Например, осталось 3 спринта до релиза. Нужно понять, сколько задач реально можно успеть.

Остаток задач в story points: 90

Прогноз:

- pessimistic: 3 * 27 = 81 → не успеваем
- realistic: 3 * 32 = 96 → на грани
- optimistic: 3 * 40 = 120 → с запасом

Отсюда сразу видно: с текущим бэклогом на 90 SP есть риск не успеть, если произойдут сбои. И это — сигнал поговорить с продуктом.

Как использовать модель в планировании

Три прогноза = разговор о рисках

Вместо одного числа velocity, которое никого не волнует, теперь три чётких прогноза, и это повод обсудить риски.

Пример:

— Мы хотим взять фичи на 40 SP.
 — По pessimistic velocity мы успеваем на 81 SP за 3 спринта. Значит, если хотя бы один спринт провалится — фичи не войдут.

Продукт понимает, где риск, а команда — где резерв.

Когда не хватает времени — сдвигаем или упрощаем

Если по pessimistic velocity видно, что вы не влезаете — это не повод молча идти и «херачить». Это сигнал, что нужно либо резать фичи, либо двигать сроки.

Главное, что эта модель позволяет обсуждать это до того, как команда влетела в переработки.

Автоматизации модели

Чтобы модель приносила пользу не разово, а системно — её нужно встроить в процесс. Наиболее простой путь — Google Sheets. Если вы на Jira — дополнительно пригодятся JQL‑выгрузки и графики на базе burnup.

Google Sheets: быстрый шаблон, который работает

Создаём простую таблицу:

Sprint

Velocity (SP)

14

32

15

27

16

40

Дополнительно, рядом или под таблицей, считаем три сценария:

Минимум:  =MIN(B2:B4)
Медиана:  =MEDIAN(B2:B4)
Максимум: =MAX(B2:B4)

После чего рассчитываем прогноз на 3 спринта:

Min forecast:  =MIN(B2:B4) * 3
Med forecast:  =MEDIAN(B2:B4) * 3
Max forecast:  =MAX(B2:B4) * 3

Дополнительно можно добавить строку с текущим объёмом бэклога (например, 85 SP), и сразу видеть:

=IF( [Прогноз] >= [Scope], "Ок", "Риск" )

Такую таблицу можно делать на один релиз: в одной вкладке — raw‑данные, в другой — сценарии и визуализация.

Jira: вытягиваем данные через JQL

Если вы работаете в Jira, velocity можно получить двумя способами: вручную через борды, либо через JQL и dashboard.

Пример запроса JQL:

project = MYPROJ AND sprint in closedSprints() ORDER BY sprint DESC

После выполнения запроса:

  • Фильтруйте задачи по статусу «Done»

  • Суммируйте Story Points в каждом спринте

Если хотите полуавтомат — можно использовать Jira Automation, чтобы автоматически собирать velocity в custom field или записывать в внешний источник (например, ту же Google Sheet через webhook).

Вариант через REST API:

Если команда большая и velocity нужен регулярно:

  • Пишем скрипт с авторизацией в Jira API

  • Парсим board, получаем последние N закрытых спринтов

  • Суммируем SP по статусу Done

  • Отдаём значения в Sheet или Prometheus

Burnup-график: визуализация трёх прогнозов

Для принятия решений словами недостаточно — нужен визуальный сигнал, особенно для продукта.

Берём burnup‑график и добавляем три линии:

  • Общий объём задач (scope) — горизонтальная линия

  • Пессимистичный прогноз — линия, идущая от текущего значения по min velocity

  • Реалистичный прогноз — линия по median velocity

  • Оптимистичный прогноз — по max velocity

Ключевая идея:

  • Если pessimistic‑прогноз не достигает scope до конца релиза — команда в зоне риска

  • Если median достигает — проект на грани

  • Если даже min уверенно пересекает — резерв есть

Такой график можно собрать в Google Sheets, Excel или через плагин в Jira.

Заключение

Модель 3–3–3 — простой инструмент, чтобы перевести команду из режима ожиданий в режим управления. Она заставляет смотреть на реальные данные, видеть диапазоны, принимать решения. И самое главное — говорить о рисках до того, как они стали проблемами.


Если вы тимлид и держите фокус не только на спринтах, но и на росте команды — посмотрите в сторону корпоративных программ OTUS. Это обучение, которое не отвлекает от дела, а усиливает: программирование, DevOps, аналитика, управление — всё с прицелом на реальные задачи и гибкую интеграцию в процессы. Без формальностей, но с результатом.

Чтобы оставаться в курсе актуальных трендов управления в IT и первыми узнавать новости о бесплатных мероприятиях, подписывайтесь на Telegram-канал OTUS4Business.

Комментарии (1)


  1. Daddy_Cool
    02.08.2025 00:27

    Ошибка планирования - это не просто так.
    Чтобы сделать что-то вовремя (с большой вероятностью) - надо а) либо чтоб это уже было сделано в каком-то виде, т.е. чтоб задача не содержала уникальностей, б) либо придется срезать углы.
    Мудрые люди отказываются от задач где есть что-то уникальное и всё делают вовремя и качественно.