← Spec-driven development: the spec is the prompt
06 / 07 · 45 min

Team workflows: specs in code review

Spec review before code review: a PR template linked to the spec, accepting generated code against criteria, and process health metrics.

Lesson content is currently available in Russian.

What you will learn

  • →Проводить ревью спеки как отдельный гейт до начала реализации.
  • →Ревьюить сгенерированный код по критериям спеки вместо построчной вычитки всего diff.
  • →Отслеживать здоровье процесса: долю PR со спекой, spec churn и rework rate.

Ревью спеки — первый гейт

Спор о сорока строках спеки стоит минуты; тот же спор над двумя тысячами строк готового diff стоит итерации переделки и чьей-то мотивации. Поэтому в командном SDD ревью спеки — отдельный гейт до начала реализации: спека публикуется как маленький PR (только spec.md), и реализация не стартует до его апрува.

Кто участвует: автор спеки, инженер, который будет вести реализацию (если это разные люди), и представитель продукта, если фича пользовательская. Смежные команды зовутся, когда спека трогает их контракты — общий API, общие данные. Что проверяет ревьюер спеки — три вопроса. Полнота: все ли роли, состояния и негативные сценарии названы; самый дешёвый способ — мысленно пройти путь злонамеренного или невезучего пользователя. Непротиворечивость: не конфликтуют ли критерии между собой и с constitution; классика — критерий скорости против критерия полноты данных. Проверяемость: каждый ли критерий можно превратить в тест; если нет — возвращаем на доработку по шаблонам второго урока.

Частое возражение: «это же водопад, мы теряем скорость». Опыт обратный: гейт занимает часы, а отменяет он недельные переделки. Водопад — это когда спека замораживается на год; здесь она живёт и меняется, просто изменения проходят через тот же дешёвый гейт. Скорость команды определяется не скоростью печати — с агентами она бесконечна, — а числом переделок.

PR со спекой: чек-лист ревьюера

Когда реализация готова, PR оформляется так, чтобы ревьюер мог принять его по контракту, а не расшифровывать намерения по diff. Шаблон описания PR:

## Спека
specs/001-csv-export/spec.md (апрув: #142)

## Критерии
- [x] AC-1: 10k строк < 5с — тест ac1.spec.ts
- [x] AC-2: 403 для viewer — тест ac2.spec.ts
- [ ] AC-6: фоновый экспорт — отложен, issue #157

## Изменения спеки в этом PR
AC-4 уточнён: кодировка UTF-8 with BOM.

Ревью сгенерированного кода отличается от классического. Вычитывать построчно две тысячи сгенерированных строк — бессмысленно и не нужно: корректность поведения уже доказывается тестами по критериям. Ревьюер работает сверху вниз: сверяет чек-лист критериев с тестами (все ли AC закрыты, честные ли тесты); проверяет, что изменения спеки в PR осмысленны и апрувнуты; и выборочно ныряет в рискованные места — безопасность, деньги, миграции, конкурентность — где цена ошибки оправдывает построчное чтение.

Красные флаги, требующие остановки: PR меняет поведение без изменения спеки (привет, drift из прошлого урока); тесты переписаны так, что критерий формально зелёный, но проверяет меньше, чем обещает; в diff есть код, не сводимый ни к одной задаче из tasks.md, — самодеятельность генератора, которую нужно либо легализовать, либо убрать.

Роли и constitution как командный контракт

В команде, где часть кода пишут агенты, роли смещаются, и полезно назвать их явно. Владелец спеки — человек, отвечающий за контракт фичи: он сводит вердикты re-sync, апрувит изменения критериев, его слово решает споры о поведении. Драйвер реализации — тот, кто ведёт агентов по конвейеру: отвечает на clarify, ревьюит план, принимает задачи. Ревьюер — внешние глаза: проверяет PR по чек-листу критериев. В маленькой команде две первые роли часто совмещаются; совмещать драйвера и ревьюера не стоит — теряется смысл внешней проверки.

Constitution из третьего урока на командном уровне превращается в главный разгрузочный механизм ревью. Всё, что записано в constitution — стек, стандарты тестов, правила обработки ошибок, запреты, — не обсуждается в каждом PR заново: ревьюер ссылается на пункт, а не ведёт дискуссию. Спор в комментариях PR, повторившийся дважды, — кандидат на новый пункт constitution: решите один раз и ссылайтесь.

Отдельный выигрыш — онбординг. Новый инженер (или новый агент) читает constitution и три-четыре спеки ключевых модулей — и получает то, что раньше добывалось месяцем вопросов в чатах: что система обязана делать, чего ей делать нельзя и почему. Спеки здесь работают документацией, которая не врёт, — ровно потому, что процессы предыдущих уроков не дают ей отстать от кода.

Метрики здоровья процесса

Процесс, который не мерят, деградирует молча. Для командного SDD достаточно четырёх метрик, каждая считается почти бесплатно из git и трекера.

Доля PR со спекой — какой процент содержательных PR ссылается на спеку (правки опечаток не в счёт). Здоровье — рост к 80–90%; падение означает, что команда возвращается к ad-hoc, обычно под дедлайном, и это разговор про приоритеты, а не про дисциплину. Spec churn — сколько раз спека правится после старта реализации. Ноль — подозрительно (спеку не сверяют с реальностью), постоянный шторм правок — сигнал, что гейт ревью спеки пропускает сырые контракты: clarify отрабатывают формально. Rework rate — доля задач, возвращённых с приёмки или ревью на переделку. Это главная метрика, ради которой всё затевалось: у команд на ad-hoc промптинге она достигает трети задач; работающий SDD давит её кратно. Время до первого ревью спеки — сколько спека ждёт первых глаз. Если дни, гейт стал бутылочным горлышком, и команда начнёт его обходить; лечится нормой «ревью спеки — в течение рабочего дня» и малым размером спек.

Важно, чем эти метрики не являются: это термометр процесса, а не KPI людей. Как только spec churn попадает в персональные цели, спеки перестают править после старта — вместе с правдой в них. Смотрите на тренды по команде, обсуждайте на ретро, и метрики останутся полезными.

Practice

Внедрение шаблона PR со спекой

Подготовьте для своей команды (или учебного репозитория) комплект процесса: шаблон PR с разделами «Спека», «Критерии», «Изменения спеки»; чек-лист ревьюера сгенерированного кода (5–7 пунктов, включая красные флаги из урока); и три пункта constitution, снимающие самые частые споры на ревью из вашей практики. Прогоните один реальный PR через этот процесс.

Deliverable

Файлы PULL_REQUEST_TEMPLATE.md и чек-лист ревьюера в репозитории, дополненная constitution и ссылка на PR, прошедший процесс от ревью спеки до приёмки по критериям.

Checkpoint

В PR на 1 800 сгенерированных строк все тесты зелёные. Опишите, как вы проведёте ревью за 30 минут и в какие места будете смотреть построчно.

  • ✓ Ревью начинается с чек-листа критериев и честности тестов, а не с построчной вычитки.
  • ✓ Названы места выборочного глубокого чтения: безопасность, деньги, миграции, конкурентность.
  • ✓ Перечислены красные флаги: поведение изменено без правки спеки, тесты ослаблены, код вне задач.

Check yourself

Почему ревью спеки выгоднее ревью готового кода как первый гейт?

01Почему ревью спеки выгоднее ревью готового кода как первый гейт?

Как ревьюер работает с PR на 2 000 сгенерированных строк?

02Как ревьюер работает с PR на 2 000 сгенерированных строк?

Повторившийся дважды спор в комментариях PR — это кандидат на…

03Повторившийся дважды спор в комментариях PR — это кандидат на…

О чём говорит spec churn, равный нулю на протяжении квартала?

04О чём говорит spec churn, равный нулю на протяжении квартала?

Почему метрики процесса нельзя делать персональными KPI?

05Почему метрики процесса нельзя делать персональными KPI?

Sources

Team workflows: specs in code review · Spec-driven development: the spec is the prompt · VORCL