Разработка на основе спецификации
Спецификация функции — выражение замысла, доступное для ревью. Она имеет смысл лишь там, где решения принимает ответственный человек.
Агент может исследовать проблему, подготовить документ, оспорить предположения, уточнить формулировки и предложить объём работ. Но его предложения — результат вероятностной генерации, а не замысел. Человек становится владельцем замысла, прорабатывая его на контрольной точке: уточняет, исправляет, корректирует, отклоняет — пока вероятностный вывод агента не станет решением, которое он способен защитить.
Именно принятие решений превращает спецификацию в контрольную точку с участием человека. Без этого агент превращает неоднозначность в код: объём работ, компромиссы, способы интеграции и поведение в граничных случаях определяются внутри diff. Спецификация выносит эти решения за пределы diff — самой дорогой формы ревью, доступной лишь квалифицированным инженерам, — на этап, где любой рецензент может отклонить направление, не разбирая уже созданную реализацию.
У документа две задачи:
- Дать людям компактную основу для оценки замысла, границ, риска и свидетельств.
- Дать агентам стабильную цель на протяжении нескольких планов и запусков выполнения.
Спецификация, которую никто внимательно не читает, — не контрольная точка. Это ритуал.
Спецификация и план
В четырёхфазном рабочем процессе план служит проверенным контрактом одного запуска выполнения. Спецификация функции находится уровнем выше.
| Документ | Область действия | Главный вопрос | Типичное содержимое |
|---|---|---|---|
| Спецификация функции | Всё изменение | Что должно быть истинно после завершения работы? | Замысел, границы, ограничения, компромиссы, свидетельства |
| План выполнения | Следующий ограниченный запуск | Что агент должен делать дальше? | Шаги, файлы, команды и проверка для текущего состояния кода |
Одна спецификация может служить основой нескольких планов:
Границы выполнения
Одна стабильная спецификация, несколько ограниченных запусков
Спецификация не опускается до механики, которую можно определить по текущему коду. Каждый план заново опирается на фактическую ситуацию, поскольку кодовая база меняется после каждого запуска.
Сделай замысел доступным для ревью
Полезная спецификация содержит достаточно информации, чтобы рецензент мог решить, правильно ли предлагаемое изменение, а не просто выглядит ли текст исчерпывающим. В зависимости от неопределённости она может включать:
- проблему и ожидаемый результат
- границы объёма работ и то, что не входит в задачу
- ограничения системы или продукта
- значимые компромиссы и отвергнутые альтернативы
- наблюдаемые критерии приёмки
- нерешённые вопросы, которые не должны превратиться в догадки агента
Критерии приёмки задают нижнюю границу: что обязательно должно выполняться. Границы задачи и исключённые цели задают верхнюю: что работа не должна в себя поглощать. Достижение нижней границы вместе с выпуском несогласованных дополнений всё равно нарушает замысел.
Суть не в структуре, формате или длине спецификации. Суть — в максимально ясных замысле и границах, которые можно как можно проще и эффективнее проверить. Рецензенты должны отличать то, что утвердил человек, от того, чего требуют свидетельства, и от того, что предлагает агент; способ обозначения выбираешь ты.
Правильная структура — это минимальный документ, сохраняющий замысел и рискованные границы. Формат, длина и процесс подготовки должны соответствовать случаю, а не каноническому шаблону. Пустой раздел заставляет рецензентов гадать, неприменим ли он или его пропустили.
Главное
- Ответственность человека относится к решениям, а не документам. Утверждение устанавливает ответственность лишь тогда, когда ответственные люди видят и выбирают существенные границы и дополнения.
- Спецификация — контрольная точка, а не шаблон. Её структура и длина определяются неопределённостью, риском и стоимостью ревью. Правильная спецификация — минимальный документ, сохраняющий замысел и рискованные границы.
- Спецификации и планы управляют разными масштабами. Спецификация координирует всё изменение; каждый план управляет одним запуском выполнения, основанным на фактической ситуации.