1 июня 2024
McKinsey считает, что да - можно измерять продуктивность разработчиков. Но дьявол в деталях: что именно измерять, на каком уровне, и как избежать gaming'а метрик. Главная ловушка сформулирована ещё в 1975 году британским экономистом Чарльзом Гудхартом: «когда мера становится целью, она перестаёт быть хорошей мерой». Эта статья разбирает, почему инженерные метрики так часто проваливаются, как два самых популярных фреймворка - DORA и SPACE - возникли как ответ на эту проблему, как одна команда выстраивает систему сдержек на практике и какие конкретные паттерны gaming-а ловят опытные руководители.
Закон Гудхарта и почему метрики ломаются
В 1975 году британский экономист Чарльз Гудхарт, советник Банка Англии по денежно-кредитной политике, опубликовал заметку о том, что любой статистический показатель, выбранный регулятором как цель, в течение нескольких лет перестаёт отражать ту реальность, ради которой его выбрали. Поведение участников рынка адаптируется к самому показателю, а не к тому, что он раньше измерял. Антрополог Мэрилин Стратерн в 1997 году переформулировала эту идею в виде, который чаще всего цитируют сегодня: «when a measure becomes a target, it ceases to be a good measure» («когда мера становится целью, она перестаёт быть хорошей мерой»).
В инженерной среде закон Гудхарта работает буквально. Вы поставили команде KPI «закрывать не менее 30 тикетов в спринт» - через два спринта тикеты дробятся на более мелкие, чтобы счёт сходился. Вы привязали бонус к количеству строк кода - в кодовой базе появляются раздутые конструкции и копипаста. Вы хвалите за «pull request в день» - команда начинает создавать формальные PR, которые ничего не меняют по существу. Сама метрика не виновата: проблема в том, что её превратили из сигнала в цель.
Хорошая инженерная метрика устойчива к этому превращению, если выполнено три условия. Во-первых, её сложно «обыграть» без реального улучшения процесса или продукта - то есть короткий путь к её росту совпадает с длинным. Во-вторых, она измеряется на уровне, где её улучшение требует кооперации, а не индивидуальной оптимизации. В-третьих, она используется как тема для разговора в ретро, а не как основание для бонуса или PIP. Все три условия одновременно выполнены у очень небольшого числа метрик; ниже мы увидим, что именно они и попали в DORA-четвёрку.
Эта статья опирается на четыре опорных источника. «Accelerate» (2018) Николь Форсгрен, Джеза Хамбла и Джина Кима - книга, в которой обоснована DORA-четвёрка, основанная на State of DevOps Report 2014-2018. Статья «The SPACE of Developer Productivity» Форсгрен, Стори, Маддилы, Циммермана, Хоука и Батлер (ACM Queue, март-апрель 2021) - формальное введение SPACE-фреймворка. Заметка McKinsey «Yes, you can measure software developer productivity» (август 2023) - попытка свести DORA, SPACE и продуктовые метрики в единую систему. И длинная серия публикаций Гергей Орос в The Pragmatic Engineer о том, как инженерные руководители реально применяют эти фреймворки в продуктовых компаниях.
Цепочка: Effort → Output → Outcome → Impact
Любую работу можно разложить на четыре уровня:
| Уровень | Что это | Пример (разработчик) | Пример (sales) |
|---|---|---|---|
| Effort | Затраченные усилия | Часы работы, коммиты | Количество звонков |
| Output | Произведённый результат | Закрытые тикеты, PR | Отправленные предложения |
| Outcome | Достигнутый результат | Фича в production | Подписанный контракт |
| Impact | Влияние на бизнес | Рост retention пользователей | Выручка |
Проблема gaming'а на каждом уровне
Любую метрику можно «обыграть». Это и есть закон Гудхарта в действии: люди оптимизируют именно то, что измеряется, даже если это не совпадает с тем, что вы хотели улучшить. Эффект сильнее всего на нижних уровнях цепочки и слабее, но всё ещё заметный, на верхних.
| Если измерять... | Люди будут... |
|---|---|
| Effort (часы, коммиты) | Создавать busywork - много усилий с сомнительной ценностью |
| Output (тикеты, PR) | Увеличивать количество через то, что проще сделать. Не факт, что это поможет outcome |
| Outcome (фичи в prod) | Бить таргеты любой ценой, даже через shortcuts |
| Impact (бизнес-метрики) | Креативно достигать impact с меньшим effort и output (иногда это хорошо!) |
Нельзя измерять что-то одно изолированно. Нужны checks and balances - система сдержек, которая гарантирует, что outcome достигается правильным путём.
Почему нельзя измерять индивидуально
Даже если можно взвесить индивидуальный вклад - нельзя концентрироваться на индивидуальных метриках.
Последствия:
- Разрушается команда и совместный результат
- Люди оптимизируют личные метрики в ущерб командным
- Code review становится «не моя работа» (не считается в метрики)
- Помощь коллегам - потеря времени
- Knowledge sharing исчезает
Это не абстрактное опасение. В 2012-2016 годах внутри Google шёл проект под кодовым названием Project Aristotle, который пытался ответить на вопрос: что отличает высокоэффективные команды от низкоэффективных? Исследователи проанализировали данные по 180 командам и не нашли никакой корреляции между составом команды по индивидуальным показателям и её результатами. Зато нашли, что главный предиктор результата - психологическая безопасность: насколько люди в команде готовы признавать ошибки, задавать вопросы и помогать друг другу. Любая система индивидуальных метрик подрывает именно это качество, потому что превращает коллег в конкурентов за рейтинг.
Кейс: переход от output к outcome на примере одной команды
Чтобы увидеть, как переключение метрик меняет поведение, удобно посмотреть на одну команду, прошедшую такой переход. Ниже - стилизованный пример на основе типичных паттернов, которые я видел в B2B SaaS-компаниях на 200-500 инженеров и которые повторяются в публичных рассказах GitLab, Atlassian и Etsy. Имена и числа собирательные; механика - реальная.
До. Платформенная команда из 9 человек измерялась двумя метриками: количество закрытых тикетов в спринт и SLA на ответ в support-канале. Обе считались еженедельно, отображались на дашборде в офисе и обсуждались на one-to-one с менеджером. За три квартала команда стала рекордсменом по обеим: 70+ тикетов в спринт, среднее время ответа меньше 5 минут. Параллельно происходило странное: продуктовые команды жаловались на «непредсказуемость» платформы, retro регулярно упирались в инциденты на проде, а MTTR за тот же период вырос с 22 минут до часа с лишним. Метрики горели зелёным; реальность - красным.
Что именно сломалось. Тикет проще закрыть быстро, чем разобраться в его причине, поэтому команда стихийно научилась резать симптомы: добавить ретрай, поднять таймаут, рестартнуть Pod. Реальная причина оставалась в системе и через неделю всплывала в виде нового тикета. Среднее время ответа в чате тоже легко «разогнать»: достаточно дежурному отвечать «smотрим» в течение 30 секунд, чтобы метрика SLA закрылась, дальше можно копаться сколько угодно. Обе метрики измеряли output (закрыто) и effort (время реакции), но никак не outcome (стабильность платформы для её клиентов).
Переход. Новый Engineering Manager заменил два индикатора на четыре, явно опираясь на DORA-четвёрку и одно outcome-добавление от продуктовых команд:
- Change Failure Rate по платформенным релизам - доля деплоев, после которых пришлось делать hotfix или rollback. Считается по тегам в инцидент-трекере.
- MTTR по инцидентам уровня S1/S2 - от срабатывания алерта до возврата сервиса в SLA. Источник - PagerDuty и post-mortem-документы.
- Incoming tickets per active product team per week - сколько обращений приходит от каждой продуктовой команды; цель - снижение, а не рост.
- Quarterly platform NPS от продуктовых команд - анкета на 4 вопроса в конце квартала. Это «S» из SPACE: satisfaction со стороны внутреннего клиента.
Что важно - старые метрики не выкинули, а перевели в категорию «локальная диагностика». Количество закрытых тикетов и время ответа продолжали считать, но они перестали быть KPI. Они оставались полезными как диагностический сигнал: если вдруг закрытых тикетов резко стало меньше, это повод задать вопрос, не более того.
Через два квартала. Количество закрытых тикетов упало примерно на 35%. Это вызывало нервный разговор с CTO в первом квартале (выглядело как «команда работает хуже»), но к концу второго стало ясно, почему: incoming tickets per team снизился ещё сильнее, потому что команда занялась root-cause фиксами и вычистила несколько хронических источников шума. MTTR вернулся к 25 минутам. Change Failure Rate стабилизировался около 8% - не elite, но в зоне приемлемого. Quarterly platform NPS, который в первом замере был отрицательным, во втором замере стал нейтральным; в третьем - положительным.
Что сделало переход возможным. Три вещи. Первая - поддержка CTO, который выдержал квартал «плохих» цифр на старых метриках. Вторая - перевод старых метрик в роль диагностики, а не их полное удаление; команда не чувствовала, что её обесценили. Третья - новый набор метрик включал и outcome (CFR, MTTR), и client-satisfaction (NPS, incoming tickets), и leading indicator (incoming tickets - снижение этой цифры предшествовало улучшению NPS). Это и есть checks and balances в действии.
DORA и SPACE: история фреймворков и что они измеряют
DORA и SPACE возникли с разницей примерно в десять лет и из очень разных мотиваций. DORA родилась как эмпирический проект Николь Форсгрен, исследователя организационного поведения с PhD в IT-менеджменте. С 2014 по 2018 годы она вместе с командой DevOps Research and Assessment проводила ежегодный State of DevOps Report - анкетирование 30 000+ инженеров и руководителей по всему миру. К 2018 году у них накопилось достаточно данных, чтобы сформулировать главный вывод книги «Accelerate» (Форсгрен, Хамбл, Ким, IT Revolution Press, 2018): четыре конкретные метрики статистически отличают «elite» команды от средних, и эти же метрики коррелируют с финансовыми результатами компании в целом.
Важно, что Хамбл и Ким принесли в эту работу собственные книги. Джез Хамбл вместе с Дэвидом Фарли написал «Continuous Delivery» (Addison-Wesley, 2010), задавшую язык для описания deployment pipeline и rolling release. Джин Ким - автор «The Phoenix Project» (2013) и «The DevOps Handbook» (IT Revolution, 2016). DORA-четвёрка опирается на их предыдущие работы как на фундамент: Continuous Delivery дал определения lead time и deployment frequency, DevOps Handbook - связь между технической практикой и организационным результатом. «Accelerate» добавил статистическую базу.
DORA (DevOps Research and Assessment)
DORA измеряет outcomes и impact на уровне команды/системы:
| Метрика | Что показывает | Elite benchmark |
|---|---|---|
| Deployment Frequency | Как часто доставляем ценность | Несколько раз в день |
| Lead Time for Changes | Как быстро от коммита до production | < 1 часа |
| Change Failure Rate | % деплоев, вызывающих сбои | 0-5% |
| Mean Time to Recovery | Как быстро восстанавливаемся | < 1 часа |
SPACE
SPACE появился в марте-апреле 2021 года в виде статьи «The SPACE of Developer Productivity: There's More to It Than You Think», опубликованной в журнале ACM Queue. Авторы - Николь Форсгрен (та же, что в DORA), Маргарет-Энн Стори (профессор University of Victoria, два десятка лет занимающаяся developer experience), Чандра Маддила, Томас Циммерман, Брайан Хоук и Дженна Батлер (все - Microsoft Research). Мотивация авторов прямо названа в первой же странице: за пандемию COVID-19 руководители массово начали внедрять «productivity tracking» с акцентом на индивидуальные показатели, и многие из этих внедрений ломали команды быстрее, чем приносили пользу. SPACE - это попытка дать руководителям альтернативный, многомерный язык.
Фреймворк предлагает измерять продуктивность по пяти осям:
- Satisfaction and well-being - удовлетворённость работой и инструментами. Измеряется опросами. Низкая удовлетворённость коррелирует с текучкой и снижением качества.
- Performance - достижение результатов. Качество кода, надёжность, отсутствие инцидентов.
- Activity - объём работы. Количество коммитов, PR, code reviews. Наиболее подвержена gaming'у.
- Communication and collaboration - коллаборация. Скорость code review, качество документации, доступность знаний.
- Efficiency and flow - эффективность процессов. Время от идеи до production, количество переключений контекста.
SPACE рекомендует выбирать метрики из минимум трёх категорий, чтобы избежать однобокости. Например: Satisfaction (опросы) + Performance (change failure rate) + Efficiency (lead time). И второе правило, на котором авторы настаивают отдельно - не использовать SPACE-метрики на индивидуальном уровне; они предназначены для команды или системы.
Как одна команда выстраивает checks-and-balances
Знать DORA и SPACE - не то же, что внедрить их. Большинство компаний, которые «внедрили DORA», поставили дашборд - и на этом остановились. Дашборд без процесса вокруг него - это украшение стены. Ниже - последовательность шагов, которая в моей практике работает; она собрана из публичных материалов GitLab, Atlassian и Stripe и из нескольких внутренних кейсов в B2B SaaS.
Шаг 1. Собрать DORA-четвёрку из существующих систем. Деплои - из CI/CD (GitLab, Argo, Spinnaker, GitHub Actions). Lead time - из связки Jira/Linear и Git: время от первого коммита PR до merge + время от merge до production. Change failure rate - из инцидент-трекера (PagerDuty, Opsgenie) с тегом «вызвано релизом». MTTR - оттуда же. На сборе всех четырёх обычно уходит 2-4 недели и обнаруживается, что половина данных не собирается чисто, а часть инцидентов вообще не размечается. Это нормальный первый этап: вы не строите аналитику, вы строите измерительный аппарат.
Шаг 2. Добавить минимум один satisfaction-сигнал. Без «S» из SPACE команда измеряет только то, что видно снаружи. Простейшая форма - короткий ежеквартальный опрос на 4-6 вопросов: «насколько ты доволен инструментами», «насколько часто ты испытываешь flow», «есть ли у тебя достаточно автономии», «как ты оцениваешь нагрузку 1-10». Сложнее, но сильнее - DevEx survey по методике Microsoft Research или GitHub (см. доклады DX team). Данные обрабатывает не менеджер команды, а кто-то на стороне (HR, People Ops), чтобы анонимность реально работала.
Шаг 3. Привязать метрики к ритуалу обсуждения. Метрики, которые никто не обсуждает, перестают что-либо менять через два-три месяца. Минимальный ритуал - ежемесячный engineering review на 60 минут, на котором команда смотрит на DORA-четвёрку и satisfaction-сигнал, и каждое отклонение разбирается: что произошло, что мы делаем дальше, нужно ли что-то менять в процессе. Главное правило ритуала - не наказывать за плохие цифры. Цифры - это сигнал для разговора, а не основание для PIP.
Шаг 4. Добавить один outcome-показатель снаружи. DORA измеряет, как мы доставляем; SPACE - как чувствуем себя. Нужен ещё один сигнал: что от этой доставки реально происходит у клиента. У Pragmatic Engineer есть две хорошие формулировки - «customer-facing thing per team per week» (минимум одно изменение, видимое клиенту) и «business impact committed by team» (команда сама коммитится на бизнес-результат и отвечает за него). У Amazon роль такого индикатора играет процедура Working Backwards - PR/FAQ-документ перед началом работ описывает, что именно увидит клиент в момент запуска. Это не метрика в привычном смысле, но это outcome-якорь: команда обязана начать с того, что увидит клиент, а не с того, что технически удобно.
Шаг 5. Различать leading и lagging indicators. Lead time - lagging: вы видите его уже после факта. PR review time, время в статусе «in review», количество PR в очереди - leading: они меняются раньше и предсказывают рост lead time. Change Failure Rate - lagging; покрытие тестами по новым PR и доля смерженных PR без CI-флапов - leading. Полезный набор - 2-3 lagging метрики (DORA-четвёрка) и 2-3 leading индикатора, на которые команда может прямо влиять на следующей неделе. Без leading-индикаторов команде нечего обсуждать, кроме «вот, опять цифра уехала».
Шаг 6. Не сравнивать команды между собой. Самая частая ошибка - усреднять DORA по всем командам компании и сравнивать одну команду с другой. Маленькая инфраструктурная команда из 4 человек, которая релизит платформу раз в день, и продуктовая команда из 12 человек, которая релизит фичу в spа-приложение каждый час - это разные миры, и одна цифра не должна их ранжировать. Каждая команда сравнивается со своей траекторией во времени, а не с соседом.
Stripe в публичных материалах Брэндура Лича и команды (см. блог Stripe Engineering) описывает культуру zero-downtime деплоев как продолжение этой модели: deploy frequency на платформенных сервисах достигает десятков релизов в день, но change failure rate отслеживается жёстче, чем deploy frequency, потому что один плохой релиз стоит больше, чем сто хороших. Это и есть пример checks and balances: одна метрика не может вырасти без второй; обе измеряют один процесс с разных сторон.
Антипаттерны и реальные сценарии gaming-а
Опытные инженерные руководители видят одни и те же провалы внедрения метрик снова и снова. Ниже - восемь паттернов, каждый из которых ломает либо саму метрику, либо команду вокруг неё. Большинство легко поймать, если знать, что искать.
1. Vanity metrics: lines of code и коммиты на разработчика
Классика, которую критикуют со времён Билла Гейтса («measuring software productivity by lines of code is like measuring progress on an airplane by how much it weighs»). Любая метрика, которая растёт от добавления текста, поощряет добавление текста. В современных AI-инструментах эта проблема обострилась: автогенерация может за минуту создать сотни строк, формально засчитываемых как «production code». Если бонус привязан к LOC, экономика гарантированно поломается.
2. Single-metric tunnel vision
Команда смотрит только на deployment frequency и игнорирует change failure rate - получает 30 деплоев в день и 40% инцидентов после релиза. Команда смотрит только на code coverage и пишет тесты, дублирующие очевидное. Команда смотрит только на ticket throughput и режет тикеты, чтобы счёт сходился. Лекарство - всегда минимум две метрики, которые двигаются в разные стороны: рост одной без удержания второй должен быть невозможен.
3. Метрика-как-таргет (Goodhart triggered)
Сама по себе метрика - сигнал; цель - объяснить отклонения и подкорректировать процесс. Превращение метрики в KPI с привязкой к бонусу или к performance review запускает закон Гудхарта в полную силу. Признак, что вы попали в ловушку: за две недели до конца квартала разработчики начинают «фиксить» цифры на дашборде вместо обычной работы.
4. Игнорирование «S» в SPACE
Самый частый способ внедрить SPACE - выкинуть satisfaction. Activity, Performance, Communication, Efficiency легко вытаскиваются из инструментов; satisfaction требует опроса людей и обработки качественных ответов. В итоге фреймворк, придуманный как противовес дегуманизации метрик, превращается в ещё один dashboard без человека. Если из SPACE убрать «S», получается «PACE» - и теряется смысл всего фреймворка.
5. Tooling без процесса
Поставили DataDog DORA dashboard или LinearB - и решили, что внедрили DORA. Дашборд показывает deployment frequency 2.3 в день, lead time 6 часов, всё зелёное. Что дальше? Если вокруг дашборда не выстроен ритуал обсуждения, retro-разговор, разбор отклонений - метрики не меняют поведение. Через полгода дашборд перестают открывать.
6. Усреднение по разнородным командам
Усреднили DORA-четвёрку по 30 командам, получили «у нас компания high performers», отчитались наверх. Внутри: одна платформенная команда тянет deployment frequency вверх, шесть продуктовых лежат внизу, трое вообще релизят раз в две недели и в среднем уходят в шум. Метрики имеют смысл только в разрезе команд, и тот же разрез должен быть у всех ритуалов обсуждения. Усреднение по компании - это управленческая отчётность для C-level, а не инженерная метрика.
7. Путаница leading и lagging
Lead time - lagging: вы можете воздействовать на него только косвенно. Если ставите команде цель «сократить lead time на 30% за квартал», но не даёте ей рычагов на leading-индикаторы (PR review time, размер PR, частота merge-конфликтов), команда либо не сделает ничего, либо начнёт хитрить с замером. Хороший паттерн - таргет на leading, мониторинг на lagging.
8. SPACE-опросник «в режиме паники»
Команда полгода жалуется на нагрузку, менеджер игнорирует, потом по фидбеку HR-Performance заказывает «срочный SPACE-замер» с 40 вопросами на одного человека. Опрос приходит после двух недель аврала, проводится один раз, никто не объясняет, что будет с результатами. Команда отвечает либо дежурно, либо враждебно; данные оказываются бесполезны; доверие к опросам падает на год вперёд. SPACE-опрос работает только как регулярный ритуал на короткой анкете, а не как разовое спасение в момент кризиса.
Практические рекомендации
Что измерять кроме DORA
The Pragmatic Engineer предлагает два дополнительных outcome-oriented показателя:
| Customer-facing thing per team per week | Минимум одна штука, видимая клиенту, от каждой команды каждую неделю |
| Business impact committed by team | Команда сама коммитится на бизнес-impact и отвечает за его достижение |
Принципы измерения
- Измеряйте команды, не индивидов. Outcome - командный результат.
- Фокус на outcomes и impact, не на effort и output. DORA - хороший выбор.
- Используйте checks and balances. Одна метрика - это ловушка.
- Метрики - для разговора, не для KPI. «Почему lead time вырос?» - хороший вопрос для ретро.
- Клиент-ориентированность. Если метрика не связана с клиентом - зачем она?
- Различайте leading и lagging. Таргет ставится на leading, мониторинг - на lagging.
- Не сравнивайте команды между собой. Каждая сравнивается со своей траекторией.
Резюме
Измерять продуктивность можно, но осторожно:
- Закон Гудхарта неизбежен: любая метрика, ставшая целью, перестаёт быть мерой
- Effort и Output легко измерить, но легко gaming'ить
- Outcome и Impact сложнее, но ценнее
- Индивидуальные метрики разрушают команду и психологическую безопасность
- DORA измеряет outcomes - это работает, потому что её сложно обыграть без реального улучшения
- SPACE добавляет человеческое измерение, но «S» нельзя выкидывать
- Лучшая метрика: customer-facing результат каждую неделю + checks and balances вокруг него
Источники и смежные статьи
Книги и первоисточники
- Nicole Forsgren, Jez Humble, Gene Kim. Accelerate: The Science of Lean Software and DevOps (IT Revolution Press, 2018). Книга, в которой обоснована DORA-четвёрка на основе шестилетнего State of DevOps Report.
- Jez Humble, David Farley. Continuous Delivery (Addison-Wesley, 2010). Источник определений lead time и deployment frequency.
- Gene Kim, Jez Humble, Patrick Debois, John Willis. The DevOps Handbook (IT Revolution, 2016). Связь технических практик и организационного результата.
- Forsgren, Storey, Maddila, Zimmermann, Houck, Butler. The SPACE of Developer Productivity - ACM Queue, март-апрель 2021. Формальное введение SPACE-фреймворка.
- Charles Goodhart, заметка для Банка Англии (1975); более известная формулировка - Marilyn Strathern, «Improving ratings: audit in the British University system» (1997).
Реальные кейсы и публичные практики
- GitLab - DORA metrics in the handbook (апрель 2023). Описание того, как GitLab внедрил DORA внутри и снаружи.
- Atlassian - DORA metrics в DevOps. Публичное руководство и practitioner-материалы.
- Etsy Code as Craft. Историческая площадка с постами Erik Kastner и John Allspaw о deployment-velocity культуре.
- Stripe Engineering blog. Посты Brandur Leach и команды о zero-downtime деплоях и observability.
- Google re:Work - Project Aristotle. Исследование, показавшее, что психологическая безопасность важнее любого индивидуального показателя.
- AWS - Working Backwards и PR/FAQ. Outcome-first процедура как proxy для метрики «что увидит клиент».
Аналитика и обзоры
- McKinsey - Yes, you can measure software developer productivity (август 2023). Попытка свести DORA, SPACE и продуктовые метрики в единую систему.
- DORA.dev. Текущая площадка проекта с ежегодными State of DevOps Reports и quick check.
- The Pragmatic Engineer (Гергей Орос). Регулярные разборы того, как инженерные руководители реально применяют DORA и SPACE в продуктовых компаниях.