Три дня назад я нажал кнопку, которая запускает сессию в моём собственном продукте. Ничего не произошло. Просто серый экран: «Не удалось создать сессию, попробуйте ещё раз».
Я сам это строил. Я точно знал, что даст «попробовать ещё раз» — ничего, потому что проблема была в базе данных за кнопкой. Желание нажать ещё раз, даже когда уже знаешь что это не поможет, — реальное чувство, то же самое, что заставляет повернуть ключ зажигания второй раз, будто вторая попытка несёт какую-то новую информацию, которой не было в первой.
Поэтому вместо повторного клика я пошёл искать, что реально сломалось. Багом это не было. Где-то за последний месяц другому проекту понадобилась база данных, а на аккаунте было место ровно под два активных проекта одновременно. Появился третий. Чем-то пришлось пожертвовать, и более ранняя сессия — управлявшая той же инфраструктурой — тихо поставила эту базу на паузу, чтобы освободить место. Нигде не осталось пометки «это сломает продукт на следующие три недели». Просто размен, сделанный один раз, который всплыл позже как ошибка на стороне клиента, без очевидной связи с причиной.
Перезапуск не решил бы ничего. Месту взяться было неоткуда. Перезапустить базу на паузе в аккаунте без свободной ёмкости — она снова встанет на паузу, или вытеснит что-то другое — та же борьба, только на шаг в сторону. Настоящее решение оказалось структурным: собрать второй аккаунт с местом под оба проекта, перенести реальные данные — 130 кейсов, 121 реальный пользователь, ничего не придумано, ничего не жалко потерять — проверить, что ничего не пропало при переносе, и только потом подключить продукт к дому, который реально способен его держать. На это ушёл почти целый день. Кнопка «перезапустить» — пять секунд. Пятисекундное решение было неверным, и оставалось бы неверным, сколько его ни нажимай.
В этом вся разница между починкой симптома и структурным решением. Починка симптома спрашивает, как убрать ошибку. Структурное решение спрашивает, на что у системы кончилось место, и почему никто не заметил, пока клиент не упёрся в стену. Первое покупает пару дней, иногда часов. Второе — настоящий диагноз.
Я вижу тот же паттерн постоянно за пределами софта. Команда клиента продолжает срывать дедлайны после трёх разных инструментов управления проектами — инструмент никогда не был ограничением, но «сменить инструмент» тоже пятисекундное решение, поэтому его пробуют снова. Отдел продаж каждый квартал переобучает одному и тому же навыку работы с возражениями, а цифры не двигаются, потому что разрыв никогда не был в навыке. Где-то под видимым сбоем закончилась какая-то ёмкость — времени, полномочий, слота базы данных, чего угодно, от чего система реально зависит — и сбой просто всплывает в другом месте, не там, где было само ограничение.
Сообщение об ошибке никогда не говорит, с чем именно ты столкнулся. Это выясняется, только если спросить, на что у системы кончилось место.