Один забытый символ в конфиге стоил компании сутки простоя и неизвестно сколько денег

Представь: ты выкатил релиз, всё протестировано, всё ок. Ты выдыхаешь. А через час тебе пишут - приложение не работает. У всех. Так начался один из самых дорогих факапов, которые я видел вживую

Команда разработки в телеком конторе, мобильное приложение умного дома. Релиз шёл по плану. Один из ребят при деплое забыл поменять одну строчку в env-файле - вместо PROD там осталось DEV. Казалось бы мелочь, одно слово. Но именно эта строчка решает, куда приложение будет ходить за данными - на боевую базу или на тестовую песочницу, где живут фейковые пользователи и тестовые устройства

Приложение собралось без ошибок, прошло проверку, ушло в App Store и Google Play (ну и рустор...). И заработало. Просто не туда. Тысячи пользователей открывали приложение умного дома и видели пустоту или чужие тестовые устройства вместо своих. Кто-то решил, что приложение сломалось. Никто не подозревал, что дело в одной строчке текста, которую кто-то забыл стереть

А теперь самое неприятное. Баг нашли быстро, хотфикс собрали ещё быстрее. Но между «баг пофикшен» и «пользователи снова довольны» встала модерация Apple и Google. А она работает по своему расписанию

Сутки. Целые сутки приложение умного дома было фактически нерабочим для всех, кто его открывал, и всё это время компания ничего не могла сделать, кроме как ждать одобрения. Сколько денег это стоило - можно только гадать: отток пользователей, испорченные отзывы, нагрузка на поддержку, кто-то наверняка просто удалил приложение и не вернулся

И вот тут вопрос, который мне нравится больше, чем сама история. Кто виноват в этом баге?

Интуитивный ответ - тот разработчик, который забыл поменять строчку. Но это неправильный ответ. Потому что человек, который однажды что-то забудет, рано или поздно появится в любой команде - это не вопрос везения, это статистика. Люди не роботы, внимание не бесконечно, а пятница вечером перед релизом существует во всех часовых поясах

Вопрос не в том, как сделать так, чтобы человек никогда не ошибся. Вопрос в том, почему процесс позволил одной забытой строчке доехать до прода вообще без единой проверки на пути. Где была автоматическая валидация конфигов перед сборкой? Где staging-этап, который должен был это поймать?

Их не было. Поэтому сутки простоя оплатил не разработчик. Их оплатил бизнес

Мораль простая и неприятная: если твой процесс деплоя держится на внимательности конкретного человека в конкретный вечер - у тебя нет процесса, у тебя есть надежда. А надежда не масштабируется и не работает в 23:47 перед релизом. Самые дорогие баги почти никогда не бывают сложными - они бывают глупыми до боли. Именно поэтому их никто не успевает поймать: все ищут сложное, а теряют деньги на одной забытой букве в текстовом файле