Зачем реестр, если есть разбор инцидента
Разбор, который остался в переписке, не стоит ничего: чат закроется, сотрудник сменится, через месяц та же ошибка придёт под другим именем. Реестр — это попытка перевести опыт из памяти людей в файл, который читают перед работой.
Один побочный урок мы получили на самом реестре. Счётчик классов в его шапке годами не обновляли, и в разных документах ходили версии «13 классов», «19» и «20», хотя фактически их было уже семь десятков. Пример того же класса ошибки, которому реестр посвящён: документ принимается за текущее состояние, хотя он — снимок момента.
Формат записи класса
| Часть | Что в ней |
|---|---|
| Симптом | как ошибка выглядит снаружи, по чему её узнать в следующий раз |
| Первопричина | почему она возникает — не «невнимательность», а механизм |
| Инциденты | конкретные случаи с датами: без них класс превращается в абстракцию |
| Обход | что делать вместо, в повелительном наклонении |
| Чем закреплено | машинный гейт · инструмент · только правило в тексте · не закреплено |
Четыре класса, стоившие дороже всего
1. Действие по снимку, а не по факту
Первопричина: любая заметка, доска задач или отчёт — снимок момента. Статус проставлен при записи и с тех пор не обновлялся, а решение принимается по нему.
Как это выглядело: пометки «не выложено» врали — часть работы уже была выложена, и её переделывали заново; задачи числились ожидающими при выполненной работе; сохранённые контакты и банковские реквизиты оказались неверными.
Обход: истина — это код, живой сайт, история изменений и сырой источник. Не пересказ и не заметка. Перед доделкой чего-либо проверяется фактическое состояние, а не запись о нём.
2. «Сделал» без перепрогона той самой проверки
Первопричина: внесённая правка и зелёные собственные тесты принимаются за подтверждение.
Как это выглядело: критичная ошибка, обнулявшая базу заявок, прожила два дня — код ни разу не запускали вживую; приложение прошло 20 из 20 своих тестов при 8 реальных багах; правка общего шаблона починила целевую страницу и сломала соседние.
Обход: перепрогон именно той проверки, которая ловит дефект, до зелёного. Изменилось поведение — гоняется живой сценарий, а не статическая проверка. После правки шаблона — перепрогон всей пачки.
3. Режим «тест или прод» выводится, а не сообщается
Первопричина: автоматика определяет, учебная это среда или боевая, по косвенным признакам — по дате, по тому, что «выглядит как тестовое». И ошибается.
Как это выглядело у нас: двенадцать тестовых заявок из тридцати пяти попали в рабочий реестр, и менеджеры звонили по ним живым людям. Тест оказался неотличим от прода. Зеркальный случай описан публично у разработчика моделей: агент на учебном стенде счёл среду симуляцией — и совершил реальное действие в чужой системе.
Обход: режим — это явный проверяемый маркер среды: флаг, тестовый канал, отдельный ключ. Выводить его из контекста автоматике запрещено.
4. Замер в скользящем окне выдаётся за постоянную величину
Первопричина: показатель снят «за последние сутки» или «за неделю», а прочитан как свойство системы. Через день он другой, и это не ошибка замера, а отсутствие границ окна.
Обход: у каждой цифры в отчёте указывается окно, за которое она снята. Перед использованием в решении — пересъём.
Как завести такой реестр у себя за неделю
- Начните с классов, а не с инцидентов. Список из трёхсот случаев не читают. Читают десяток классов, к каждому из которых прикреплены случаи.
- Вносите в тот же день, пока помните причину. Через неделю остаётся симптом, а первопричина — самая ценная часть — теряется.
- Записывайте и то, что сработало. Приём, отсёкший три ложные находки из четырёх, — такое же знание, как разбор провала, и мотивирует читать реестр дальше.
- Требуйте адрес. Находка — это файл и строка, а не «где-то у нас есть». Без адреса запись не проверяема и через месяц бесполезна.
- Ставьте механизм, а не намерение. Каждый класс заканчивается вопросом «что не даст этому повториться, если человек забудет». Если ответа нет — так и пишется: не закреплено.