История одного факапа

23 января 2025 г.

Мы шипнули жутчайший баг в продакшн. Metacast не работает для всех, у кого есть скаченные эпизоды. Причём, не просто не работает проигрывание скаченных файлов, а UI на половине экранов не функционален.

Причина этому — гугл с его любовью к удалению функционала в гремучей смеси с отсутствием тестов в нашем приложении. В последней версии фреймворка Flutter (v3.27) они решили убрать функцию, которая делает элементы прозрачными и заменили её другой, лучшей функцией.

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

Чтобы избежать сюрпризов, мы заранее мигрировали на новую функцию, но, как оказалось, был нюанс. В итоге долгожданный релиз, где мы шипнули фичу, над которой работали последние 1.5 месяца, для большинства пользователей не работает от слова совсем.

Пока Арнаб спит, я сам пофиксил баг в коде (хорошо не быть на 100% зависимым от СТО!), всё потестил и подготовил PR. Через пару часов начнём выкат новой версии в прод. Заодно проверим насколько работает механизм ускоренного ревью — вроде у Apple можно попросить ревьювнуть побыстрее, если это багфикс и изменение простое.

Вынесенные уроки:

  • Не надо в последний день перед важным релизом обновлять зависимости.
  • При большом обновлении зависимостей надо дать им хотя бы неделю посидеть во внутренней бете, раз уж у нас нет тестов.
  • Нужны базовые тесты, проверяющие что скрины функциональны хотя бы на самом базовом уровне (нет ошибок рендеринга)

Заключение: мобильное приложение — это вам не веб, шипать баги в прод очень с.ка больно.


Спустя 5 часов...

🤡 Оказалось, это был билд в бете. Я с утра с недосыпу проапгрейдился до самого свежего билда для внутреннего использования и забыл об этом в суматохе.

Начал писать пост про новые фичи и, когда делал скриншоты, наткнулся на баг. Как полагается клиентоориентированному продакту, начал паниковать что есть мочи 🙈

Отменяю все выводы. Тесты можно пока не писать 👌 (шутка)


Если бы после этого Арнаб назвал меня долбо.бом, я бы не обиделся.

Вместо этого он описал на полстраницы root cause analysis и процесс, которому нужно было следовать в этой ситуации.

  1. Проверить версию приложения и убедиться, что она в проде (или нет).

  2. Проверить последний PR.

  3. Не паниковать, если прод в порядке. Если не в порядке, тогда только по-быстрому патчить.

Но он меня похвалил за bias for action и сказал, что я всё сделал правильно, учитывая обстоятельства. Вот что значит принципал инженер из бигтеха. Он подошёл к ситуации по Амазоновскому процессу CoE.

Моя рана всё ещё побаливает от втёртой в неё соли, но он прав во всём, кроме похвалы.