Измеряешь количество коммитов - получаешь количество коммитов, а не ускорение разработки.

Кажется очевидным? Мы тоже так думали, пока нам не попался тендер на разработку системы оценки эффективности команд. К примеру, вот какие метрики для оценки эффективности разработчиков были в тендере.

  • Количество новых, измененных и удаленных строк кода в продакшене
  • Количество коммитов за период
  • Количество успешных ревью кода
  • Эффективность коммитов: полезный код или рефакторинг
  • Скорость интеграции кода - время от создания мерж реквеста до мержа
  • Процент откатов коммитов из-за ошибок
  • Процент успешных сборок
  • Процент задач, потребовавших доработки
  • Процент попадания в оценку времени

Тендер мы не выиграли. Но оно и к лучшему, так как переубедить менеджмент делать как надо, а не так, как они задумали вряд ли бы получилось (судя по проработанности тендера настрой там серьезный). А помогать строить систему, от которой будет только вред, мы бы не стали.

Но зато есть отличный повод поговорить про output и outcome метрики, чем они отличаются и почему замена вторых первыми будет стоить дорого. Да и случай с тендером не единственный - попытки померить и оценить людей по кривому набору показателей нам встречаются регулярно.

Что это такое

Output метрики - это то, что команда производит:

  • количество деплоев/релизов в неделю
  • строки кода
  • velocity / story points закрытых задач
  • test coverage в процентах ... и много чего еще

Outcome метрики - это результат, который получает бизнес или пользователь:

  • retention
  • DAU / MAU
  • конверсия, выручка, NPS
  • время отклика при инциденте (MTTR)
  • доля фич в продукте, которыми реально пользуются
  • снижение числа дефектов в проде

Разница кажется очевидной, но почему-то менеджмент регулярно наступает на эти грабли, мотивируя людей работать над метриками, характеризующими внутренний процесс, а не внешний результат.

Почему вредно оценивать людей по output метрикам

Есть такой принцип - закон Гудхарта: “Как только показатель становится целью, он перестает быть хорошим показателем”. Сформулировал его британский экономист Чарльз Гудхарт еще в 1975 году, и в управлении людьми он работает просто отлично.

Если команда знает, что ее оценивают по velocity - story points начнут расти. Сами по себе, без роста реальной производительности. Если оценивают по числу деплоев - деплои участятся, пусть даже в ущерб стабильности. Если по coverage - тесты будут написаны, во что бы то ни стало.

Если же таких метрик насыпать побольше, чтобы сложнее было одной метрикой манипулировать (как в том тендере) - львиная доля энергии сотрудников будет уходить на чтобы написать побольше кода, побыстрее протолкнуть его в прод и при это закрыть побольше сторипойнтов вовремя.

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

Как должно быть

Output метрики - инструмент для самих команд и руководителей. Именно команда должна отслеживать velocity, coverage, deployment frequency, время на code review — и самостоятельно решать, как менять процессы, чтобы двигаться к нужным outcome.

Пример: исследователи DORA (DevOps Research and Assessment, Google Cloud) шесть лет изучали, что реально влияет на эффективность инженерных команд. Они выделили четыре ключевые метрики:

  • Deployment Frequency - как часто команда деплоит в прод
  • Lead Time for Changes - от первого коммита до прода
  • Change Failure Rate - доля деплоев, приведших к проблемам
  • MTTR - время восстановления после инцидента

(Пост не влез в лимит длинны, продолжение в комментарии)

Измеряешь количество коммитов - получаешь количество коммитов, а не ускорение разработки | Сетка — социальная сеть от hh.ru