Skip to content
PПромтбук
RUEN
04Дебаг

Root cause investigation

Системный подход к багу: воспроизведение, гипотезы, изоляция, фикс. Без угадывания.

Iron rule: не пиши фикс пока не понял root cause. Гипотеза != причина.

Баг: {{bug}}

Алгоритм

Фаза 1. Воспроизведение

Без репродукции — нет бага.

  1. Зафиксируй минимальный путь к багу
  2. Запиши конкретный сценарий: какие действия, какие данные, какая среда
  3. Если репродуцируется не всегда — найди что отличает успех от провала
  4. Сделай minimal reproducible example: меньше данных, меньше шагов

Если не можешь воспроизвести — иди в логи, GSC, трассировки. Иногда нужно подождать следующего инцидента с улучшенным логированием.

Фаза 2. Сбор фактов

НЕ догадки. Только то что видишь:

  • Что в логах?
  • Какие данные в БД?
  • Что в network-вкладке?
  • Какая версия кода в проде?
  • Когда баг начался? Что изменилось?

Фаза 3. Гипотезы

Сформулируй 2-3 гипотезы. Для каждой:

  • Что предполагаешь
  • Как опровергнуть (важно! ищем что разрушит гипотезу)
  • Что подтвердит

Хорошая гипотеза — фальсифицируемая.

Плохая: "может быть race condition" Хорошая: "если updateUser вызвать дважды за < 100ms, второй вызов перезаписывает первый, потому что lock не работает"

Фаза 4. Проверка гипотез

По одной, не параллельно. Для каждой:

  • Поставь эксперимент
  • Получи результат
  • Подтверди / опровергни

Если все гипотезы опровергнуты — значит fakta мало. Возвращайся в фазу 2.

Фаза 5. Понимание

К моменту фикса ты должен уметь объяснить:

  • Что произошло (механизм)
  • Почему именно эти условия привели к багу
  • Почему этого не случалось раньше / случалось но не замечали
  • Почему фикс работает

Если не можешь — не фикси. Иначе делаешь "что-то что починило" вместо "что-то что починит и не сломает другое".

Фаза 6. Фикс

  • Минимальное изменение
  • Не "пока я тут — заодно поправлю Х" (это другой PR)
  • Добавь regression test — иначе бан вернётся
  • Документируй "почему" в коммите

Фаза 7. Профилактика

  • Можно ли поймать это раньше? (тест, lint rule, type check)
  • Где ещё в коде та же проблема?
  • Какой урок для команды?

Что НЕ делать

  • ✗ "Закомментировал и работает" — забыл root cause
  • ✗ "Поменял < на <=, теперь работает" — почему?
  • ✗ "Возможно потому что..." — это не фикс, это лотерея
  • ✗ Не фикси с одной попытки. Воспроизведи. Доказывай
К подразделу «Дебаг»
Похожие промты