Как один флаг обрушил бизнес-процесс

На фоне массовых инфраструктурных проблем в крупных компаниях вспомнил свой самый крупный технический косяк. Нет, к счастью, сам я не ронял инфру. Но однажды случайно убил оплату на проде.

В 2018-м я ещё был руководителем группы фронтенда, и в одной из команд ребята крайне хотели быть модными и следовать трендам, а особенно горели идеей микрофронтов. Но так как тогда ещё не было ни Webpack Module Federation, ни прочих современных приблуд, мы с ребятами запилили простую кустарную реализацию: каждый виджет собирался в отдельной репе, а потом на лету подгружался в общий layout.

Параллельно внедрили централизованную систему фича-флагов, чтобы управлять тем, какие микрофронты и кому показываются. Всё шло отлично, пока один из сервисов не остался на старой версии SDK для флагов. Мы включили эксперимент на 5% пользователей, и флаг рухнул в undefined. Браузер не смог получить конфигурацию и просто отказался рендерить блок с оплатой.

Без единой ошибки. Просто нет кнопки «Оплатить» на проде. Мониторинг был настроен на падения и ошибки, а не на отсутствие DOM-элемента. Нам повезло узнать быстро только потому, что менеджер проекта случайно зашёл под своим аккаунтом и увидел пустоту вместо кнопки.

Хотфикс сделали за 40 минут, откатили на старую версию, а после я объяснялся с бизнесом, хотя шутка про «оптимизацию конверсии до нуля» запомнилась и всё ещё кажется смешной. Потери в деньгах были копеечные, но урок остался на всю жизнь. Теперь каждый флаг я проверяю так, как будто лично заполняю анкету на подачу Шенгена.

А вообще это классика жанра. Вон Глеб Михеев в своё время на полном серьёзе случайно снёс базу на проде. И выжил. И даже в подкастах об этом рассказывал. Так что да, факапы случаются, и от них, если повезёт, остаются не штрафы, а опыт.

А у вас были истории, после которых хотелось на неделю спрятаться под стол, но потом вы всё же выбирались?