Метрики DORA: как измерить эффективность DevOps-процессов
Основы3 минРедакция Innovialabs
Коротко
Метрики DORA описывают поставку ПО четырьмя числами: как часто вы деплоите, как быстро коммит попадает в прод, как часто изменения ломают прод и как быстро вы восстанавливаетесь; вместе они показывают и скорость, и стабильность.
Коротко
Метрики DORA появились в исследовательской программе DevOps Research and Assessment и показывают, насколько хорошо команда поставляет софт. Их четыре:
- Deployment frequency — как часто вы выкатываете изменения в продакшен.
- Lead time for changes — сколько времени проходит от коммита до продакшена.
- Change failure rate — какая доля деплоев приводит к сбою, требующему исправления, отката или хотфикса.
- Time to restore service (его также называют failed deployment recovery time) — сколько времени нужно на восстановление после такого сбоя.
Первые две метрики измеряют скорость, последние две — стабильность. Главная мысль: сильные команды улучшают обе стороны одновременно, а не жертвуют одной ради другой.
Что показывает каждая метрика
| Метрика | На какой вопрос отвечает | Что обычно её улучшает |
|---|---|---|
| Deployment frequency | Можем ли мы часто выпускать небольшие изменения? | Маленькие pull request, автоматический пайплайн, feature flags |
| Lead time for changes | Сколько ждёт готовое изменение? | Быстрое ревью, быстрые тесты, отсутствие очередей на ручное согласование |
| Change failure rate | Как часто релизы вредят пользователям? | Тесты, код-ревью, постепенная раскатка, мониторинг |
| Time to restore | Как быстро мы чиним прод? | Простой откат, алерты, ранбуки, observability |
Как собрать их из Git и CI
Для старта не нужна отдельная платформа: большая часть данных уже есть в ваших инструментах.
Deployment frequency
- Считайте успешные запуски job деплоя в продакшен в CI (GitHub Actions, GitLab CI и аналоги).
- Либо считайте релизные теги или деплои, записанные через deployments API вашего Git-хостинга.
Lead time for changes
- Для каждого деплоя возьмите коммиты, которые в него вошли.
- Lead time = время деплоя минус время коммита (или минус время открытия pull request, если так удобнее).
- Используйте медиану, а не среднее: несколько старых коммитов исказят среднее значение.
Change failure rate
- Договоритесь, что считается сбоем: откат, хотфикс, инцидент, связанный с релизом.
- Отмечайте их единообразно: метка на инциденте, префикс ветки
hotfix, revert-коммит. - Доля = неудачные деплои, делённые на все деплои за период.
Time to restore
- Берите инциденты из трекера инцидентов или системы алертинга.
- Время = момент устранения минус момент начала (или обнаружения, если начало неизвестно).
Простой способ получить коммиты релиза с их временем:
git log --format='%H %cI' v1.4.0..v1.5.0
Сравните время каждого коммита с моментом завершения деплоя v1.5.0 и возьмите медиану по релизам.
С чего начать
- Сначала договоритесь об определениях: что такое «продакшен», что такое «сбой», когда начинается инцидент.
- Соберите данные за несколько недель, прежде чем делать выводы.
- Смотрите на динамику своей команды, а не на сравнение с другими компаниями.
- Работайте с одним узким местом за раз. Если lead time большой, потому что ревью ждут днями, улучшайте ревью, а не пайплайн.
- Обсуждайте цифры вместе с командой на ретроспективах.
Не превращайте метрики в игру
Когда метрика становится целью, люди начинают оптимизировать число, а не результат. Типичные способы «накрутить» DORA:
- Дробить одно изменение на множество мелких деплоев ради частоты.
- Не записывать откаты и хотфиксы как сбои, чтобы доля неудач выглядела ниже.
- Закрывать инциденты раньше времени ради красивого времени восстановления.
- Сравнивать команды с разными продуктами и наказывать «медленную».
Как этого избежать:
- Никогда не используйте метрики DORA для оценки отдельных сотрудников.
- Всегда смотрите на все четыре вместе: скорость без стабильности — тревожный сигнал.
- Дополняйте цифры качественными сигналами: отзывами разработчиков, жалобами клиентов, разборами инцидентов.
- Автоматизируйте сбор, чтобы никто не вводил числа вручную.