Как релизный процесс влияет на качество с учетом того, что пользователи могут не обновиться сразу?
Что проверяют
Понимаете ли вы, что после релиза в проде живёт не одна версия клиента, а несколько, и все они ходят в один бэкенд. Следом обычно спрашивают, какие версии вы берёте в регресс и как проверить, что изменение API не сломает старое приложение.
Как отвечать
Начните с последствий. Мобильное приложение нельзя откатить у пользователя: версия, ушедшая в стор с багом, останется у части аудитории на недели. Бэкенд при этом обновляется для всех сразу, поэтому главный риск это обратная совместимость API.
Что делает релизный процесс, чтобы качество не страдало:
- поэтапная выкатка: staged rollout в Google Play с ручным процентом и возможностью остановить, phased release в App Store на семь дней. Если crash-free или ошибки по новой версии хуже обычного, выкатку ставят на паузу, пока версия у малой доли;
- фичефлаги: новую функциональность включают с сервера и выключают без нового релиза. Тестируются оба положения флага;
- совместимость API: новые поля только добавляются, старые не удаляются и не меняют смысл, пока жива минимальная поддерживаемая версия. Помогают версионирование API и контрактные тесты;
- минимальная версия: сервер знает
min_supported_versionи просит обновиться принудительно. В Android для этого есть In-App Updates, в iOS обычно свой экран; - матрица регресса: текущая версия плюс одна или две предыдущие с наибольшей долей аудитории по аналитике.
Если в вашем опыте был инцидент, когда старая версия упала после изменения бэкенда, расскажите его: что сломалось, как нашли, что поменяли в процессе. Нужны свои примеры и цифры. Если опыта нет, так и скажите и опишите, какие проверки добавили бы в чек-лист релиза.
Где спотыкаются
Тестируют только новую сборку против нового бэкенда. Самый частый прод-баг здесь: старый клиент получил null там, где раньше всегда было значение.
Предлагают решить всё «обязательным обновлением для всех». Это крайняя мера, она бьёт по пользователям со слабой связью и старыми устройствами, и её оставляют для критичных багов.
Забывают про веб: вкладка, открытая со вчерашнего дня, держит старый JS-бандл и ходит в новый API, а после деплоя часть чанков уже не найдётся на сервере.