Учимся на каждой поставке: замыкаем цикл улучшений
Вы только что выкатили релиз. Пайплайн зеленый, деплой прошёл гладко, пользователи довольны. Или, наоборот, случилась катастрофа: неудачная миграция, откат в 2 часа ночи и разбор полетов, где все списали на «проблемы процесса». В любом случае, релиз завершён. Что дальше?
Большинство команд воспринимают конец релиза как финишную черту. Они переходят к следующей фиче, следующему спринту, следующему пожару, который нужно потушить. Но каждый релиз — успешный или нет — несет ценную информацию. Не только о том, работает ли новая версия, но и о том, как сработал сам процесс доставки. Какие шаги были медленными? Какие проверки постоянно падали? Какие правила оказались бесполезными? Без механизма сбора и обработки этой информации ваша модель доставки застынет на текущем уровне зрелости.
Данные, которые у вас уже есть
После релиза вам не нужна навороченная панель мониторинга, чтобы начать учиться. Вам нужны ответы на несколько простых вопросов:
- Сколько времени прошло от первого коммита до продакшена?
- Сколько сборок упало по пути?
- Сколько времени команда потратила на ожидание на этапах согласования?
- Были ли ручные шаги, которые можно было автоматизировать?
- Случались ли инциденты после релиза?
Обычно эти данные разбросаны по вашей CI/CD-системе, трекеру инцидентов и истории чатов команды. Первый шаг — собрать их в одном месте. Это не обязана быть отполированная отчетность. Подойдет общий документ или простая таблица. Важно честно посмотреть на цифры.
Три уровня для улучшения
Когда данные собраны, можно решить, на чем сосредоточиться. Улучшения работают на трех уровнях:
Диаграмма ниже показывает, как цикл улучшений связывает релизы с тремя уровнями изменений.
Процесс охватывает то, как работает команда: последовательность шагов в пайплайне, как принимаются решения, кто что должен утверждать и как происходит передача задач между командами.
Платформа включает инструменты и инфраструктуру: CI/CD-систему, тестовые окружения, скрипты деплоя и инструменты мониторинга.
Политики охватывают правила: шлюзы управления, критерии верификации и условия, которые должны быть выполнены перед релизом.
Медленный релиз может быть проблемой процесса (слишком много ручных согласований), платформы (слабые сборочные серверы) или политик (шлюз, проверяющий что-то нерелевантное). Часто это комбинация всех трех.
Учимся на успехах, а не только на неудачах
Естественно фокусироваться на неудачах. Сломавшийся релиз требует внимания. Но успех не менее поучителен.
Когда релиз прошел гладко и быстро, спросите себя, почему. Возможно, изменение было небольшим и точечным. Возможно, у команды были правильные тесты. Возможно, стейджинг наконец-то стал близок к продакшену. Какова бы ни была причина, этот паттерн стоит закрепить.
Когда релиз прошел плохо, возникает соблазн добавить больше шлюзов, больше проверок, больше согласований. Но иногда проблема не в недостатке контроля, а в его избытке. Шлюз, который никогда не ловит реальные проблемы, просто добавляет задержку. Тест, который всегда проходит, создает ложную уверенность. Цикл улучшений должен отсекать то, что не работает, а не только добавлять то, что может сработать.
Замыкаем цикл между командами и платформой
Во многих организациях существует разрыв между командами, поставляющими софт, и командой платформы, строящей инструменты. Команда платформы добавляет функции на основе предположений. Команды доставки молча обходят ограничения. Цикл улучшений устраняет этот разрыв.
Когда команда доставки обнаруживает, что шаг пайплайна стабильно медленный, она сообщает об этом команде платформы. Команда платформы исследует и исправляет инфраструктуру или инструмент. Когда команда платформы выкатывает новую функцию, команды доставки тестируют её и сообщают, помогает ли она на самом деле или только добавляет сложности.
Эта двусторонняя обратная связь сохраняет актуальность платформы. Без неё команды платформы создают то, чем никто не пользуется, а команды доставки мучаются с инструментами, которые не подходят под их задачи.
Сделайте это частью релиза, а не отдельным совещанием
Цикл улучшений не должен быть ежемесячной ретроспективой, существующей вне цикла доставки. Он должен быть встроен в каждый релиз.
После каждого деплоя в продакшен назначьте короткий обзор. Это не обязано быть формальное совещание. 15-минутный разговор с участниками, просмотр данных и согласование одного-двух изменений для следующего релиза — этого достаточно. Ключ — регулярность. Если вы проводите обзор только после крупных инцидентов, вы упускаете мелкие улучшения, которые накапливаются со временем.
Практический чек-лист для обзора следующего релиза
Прежде чем закрыть следующий релиз, пройдитесь по этим вопросам:
- Каково было общее время от коммита до продакшена?
- Сколько сборок упало и почему?
- Были ли ручные шаги, которые задержали релиз?
- Пропустил ли какой-либо шлюз верификации реальную проблему?
- Прошел ли какой-либо шлюз верификации, фактически ничего не проверив?
- Был ли инцидент после релиза? Если да, можно ли было выявить его раньше?
- Что прошло лучше ожидаемого? Почему?
- Какое одно изменение сделало бы следующий релиз быстрее или безопаснее?
Выберите один пункт из этого списка и действуйте по нему до следующего релиза. Не все сразу. Один.
Вывод
Каждый релиз — это точка данных. Цикл улучшений превращает эти данные в лучшие процессы, лучшие платформы и лучшие политики. Для этого не нужна крупная инициатива или выделенная команда. Нужна привычка: после каждой поставки спрашивать себя, чему вы научились, и вносить одно небольшое изменение на основе ответа.
Ваша модель доставки не должна быть статичной. Она должна расти с каждым релизом. Не потому, что вы планируете большую трансформацию, а потому, что вы внимательны к тому, чему учит вас каждая поставка.