Перейти к основному содержимому

Шаблон post-mortem, который реально работает

· 7 мин. чтения
Artur Pan
CTO & Co-Founder at PanDev

В среднем post-mortem пишется 4 часа и порождает ноль action items, которые команда закрывает в течение 30 дней. Мы посмотрели на 120 post-mortem документов у трёх наших on-prem клиентов перед тем, как собрать этот шаблон. 83% action items оставались в статусе "open" через полгода. Это не разбор инцидента — это кладбище документов.

Post-mortem имеет смысл писать только если он что-то меняет. Всё остальное — прикрытие.

{/* truncate */}

Почему большинство post-mortem бесполезны

Google SRE Workbook — неофициальный стандарт с 2018 года. Идея blameless правильная, но команды переусердствуют с тоном и недорабатывают с follow-up. Исследование Atlassian State of Incident Management 2022 показало: 61% инженерных команд делают post-mortem, но только 23% отслеживают закрытие action items. Ритуал есть. Результата нет.

В документах, которые мы смотрели, повторяются три паттерна:

  • Раздутый нарратив — 3 страницы таймлайна, 4 предложения про фикс. Читатель пролистывает до фикса и идёт дальше.
  • Action items без владельца — "надо улучшить мониторинг" без имени, даты и критерия готовности.
  • Нет follow-up через 30 дней — action items лежат в документе, а не в трекере. Испаряются.

Полезный post-mortem — короткий, хирургический и привязанный к трекеру задач. Всё остальное — театр.

Шаблон 5W

Мы называем его 5W потому что каждый раздел отвечает на вопрос с буквы W. Весь документ должен помещаться на одном экране и писаться не дольше 90 минут.

РазделВопросДлина
Что случилосьАбзац про impact для клиента3-4 предложения
КогдаТаймлайн в UTC, только ключевые события5-8 пунктов
ПочемуЦепочка 5 Whys до системной причины1 абзац
Кто пострадалПользователи, тенанты, деньги (если применимо)2-3 строки
Что меняем (action items)3-5 конкретных задач с владельцем и дедлайномТаблица

Пять разделов. Никаких "героев", "благодарностей", "lessons learned" (уроки — это и есть action items).

Пятишаговый flow post-mortem от резолва инцидента до 30-дневного follow-up Жизненный цикл post-mortem, который реально приводит к изменениям. Петля follow-up — то место, где 83% команд ломаются.

Раздел 1 — Что случилось

Один абзац. Написан для того, кто не был на дежурстве. Должен отвечать: что сломалось, что видел клиент, сколько длилось, что починило.

"3 апреля 2026 с 14:12 по 14:47 UTC подтверждения платежей падали у 12% чекаутов на api.example.com. Корневая причина — исчерпание connection pool в PostgreSQL после планового vacuum. Решено ручным рестартом пула и откатом миграции, поднимавшей max_connections. 280 заказов клиентов успешно переотправлены; 4 дубликата списания потребовали ручного возврата."

Обратите внимание, чего тут нет: драмы, обвинений, сюжета. Только факты.

Раздел 2 — Когда (таймлайн)

Только UTC. Не смешивайте зоны — путаница "2:47 AM vs 2:47 PM" стоила командам часов на реконструкцию. Логируйте события, которые действительно меняли ход инцидента: первый алерт, первый ответ человека, первый откат, конец impact на клиента.

14:12 — первый алерт (PG pool saturation)
14:14 — on-call инженер подтвердил
14:19 — открыли war room, подключились 3 инженера
14:28 — первая попытка митигации (failover на read replica) — без эффекта
14:41 — мёрджнули откат миграции
14:47 — pool восстановился, impact на клиента закончился
15:10 — all-clear сообщили support-у

7 строк. Если ваш таймлайн длиннее 15 строк — вы логируете сообщения из Slack, а не события.

Раздел 3 — Почему (5 Whys)

Единственный раздел, где проза помогает. Пишите цепочку 5 Whys, но останавливайтесь на системной причине — не на человеке.

Почему упали платежи? Исчерпался connection pool. Почему pool исчерпался? Vacuum full держал блокировки таблицы дольше, чем ожидалось. Почему не заметили в staging? Staging-база — 0.3% от прод, vacuum там заканчивается за секунды. Почему не проверили нагрузку на pool до vacuum? В runbook для ручного vacuum нет pre-flight проверки. Почему её нет в runbook? Runbook-и пишутся реактивно после инцидентов, а не проактивно. Раньше vacuum никогда не вызывал saturation.

Системная причина: пробел в покрытии runbook для редких maintenance-операций. Именно эту проблему атакуют action items.

Раздел 4 — Кто пострадал

Важны две цифры: сколько пользователей и сколько денег (если релевантно). Без нарратива. Таблица работает.

ImpactЧисло
Затронутых клиентов280
Дубликатов списания4
Revenue в зоне риска (1 час)$14 200
Тикетов в support31
Часов senior-инженеров на решение9

Последняя строка имеет значение для разговора про cost per feature — см. анализ стоимости фичи для того, как мы считаем incident burn.

Раздел 5 — Что меняем (action items)

Единственный раздел, который аудиторы будут читать через полгода. Правила:

  1. У каждого action item один владелец, не команда. "Platform team" — ничья задача. "Марат" — чья-то.
  2. У каждого action item есть дедлайн. Не "Q2". Конкретная дата.
  3. У каждого action item есть критерий готовности. "Улучшить мониторинг" не измеримо. "Алерт на saturation пула срабатывает на 80%, протестирован в staging" — измеримо.
  4. Каждый action item — тикет в трекере. Не буллет в документе. Если не в Jira/Linear/ClickUp — не существует.
#Action itemВладелецДедлайнКритерий готовности
1Добавить алерт на saturation pool 80%Марат10 апрАлерт срабатывает в staging-тесте; runbook ссылается
2Pre-vacuum чеклист в runbookАлия12 апрЧеклист ревьюнули 2 SRE; использован на следующем vacuum
3План масштабирования staging-датасетаДанил1 маяДокумент ревью; выбран подход 10% сэмплирование
4Автодетект дубликатов списанияЖанна15 маяСрабатывает на тестовой транзакции; скрипт возврата прилинкован

Четыре action items. Не десять. Команда, которая пишет десять, закрывает ноль.

Типичные ошибки

  • Фетиш "blameless" — blameless не значит "без ответственности". Колонка "владелец" — не обвинение. Это ответственность за фикс.
  • Писать post-mortem пока инцидент свежий (и злит) — подождите 24 часа. Черновик в 2 часа ночи склонен к overload нарративом и underload action-ами.
  • Считать документ продуктом — продукт — action items в трекере, закрытые к дедлайну.
  • Одна и та же корневая причина в 3 инцидентах подряд — если "у нас не было мониторинга для X" встречается трижды, action item — не "добавить мониторинг для Y", а "выделить 20% времени инженеров в этом спринте на закрытие monitoring gaps".

Как измерить, что post-mortem-ы реально работают

Две метрики. Обе простые.

Процент закрытых action items. Посчитайте action items с дедлайном за последние 6 месяцев. Разделите на те, что закрыли к дате. Цель: ≥ 70%. Если ниже 50% — ритуал это театр.

Recurrence rate. Посчитайте инциденты, где та же корневая причина встречается во второй или третий раз. Цель: ≤ 15%. Выше — значит action items не чинят системную причину.

В PanDev Metrics мы связываем инциденты с деплоями, которые их вызвали, и задачами, которые их починили — вытягиваем имена веток типа fix/INC-204 в запись инцидента автоматически. Это та же конвенция имён веток, что и для lead time, так что follow-through по post-mortem виден на том же дашборде, что и change failure rate.

Наш датасет смещён в B2B SaaS и on-prem enterprise. У нас нет сигнала по игровым студиям и consumer mobile командам, где динамика инцидентов другая. Шаблон всё равно работает; бенчмарки — возможно нет.

Шаблон для copy-paste

# Post-Mortem: [ID инцидента] — [одна строка названия]

## Что случилось
[Один абзац, без драмы, в контексте impact на клиента]

## Когда (UTC)
- HH:MM — событие
- HH:MM — событие

## Почему (5 Whys)
Q1: Почему X упало? A: ...
Q2: Почему Y? A: ...
(продолжайте до системной причины)

Системная причина: [одно предложение]

## Кто пострадал
| Impact | Число |
|--------|--------|
| Затронутых клиентов | ... |
| Revenue в риске | ... |
| Часов на решение | ... |

## Action items
| # | Задача | Владелец | Дедлайн | Критерий готовности |
|---|--------|----------|---------|---------------------|
| 1 | ... | @имя | YYYY-MM-DD | измеримый сигнал |

Сохраните в трекере инцидентов, свяжите с ветками Git, которые это чинят, и запланируйте review через 30 дней в том же спринте, где делаете retro.

Post-mortem — это не работа. Работа — это review через 30 дней.

Дополнительное чтение

Готовы увидеть метрики своей команды?

30-минутная персональная демонстрация. Покажем как PanDev Metrics решает задачи именно вашей команды.

Забронировать демо