Оглавление главы
Приложение C: Процесс разработки и артефакты проекта
Этот документ — практическая “карта местности”: какие документы (артефакты) нужны в нормальном инженерном процессе, зачем они нужны и какие риски закрывают.
Это не про “бумажки ради бумажек”. В книге артефакты — это доказательства: наблюдаемые сигналы, что вы управляете качеством, безопасностью и поставкой изменений.
1) Карта процесса (end-to-end)#
Идея и ставки
|
v
Спецификация
|
v
План
|
v
Архитектура
|
v
Реализация (через SOP)
|
v
Проверка и верификация
|
v
Деплой и откат
|
v
Операции и инциденты
|
v
Улучшения
|
└───────────────> обратно в Спецификацию
См. также: эталонный полный цикл — Глава 10.
2) Артефакты по этапам (что, зачем, кто владелец, критерий “готово”)#
Ниже — минимальный набор. Он может быть “толще”, но не должен быть “пустым”.
Где живут артефакты (Git-first, чтобы работало устойчиво)#
Артефакты процесса должны быть долгоживущими: переживать смену таск‑трекера, быть версионируемыми и ревьюируемыми.
- Git (GitLab/GitHub) — место правды для артефактов:
SOP, промпты,DoD/чеклисты,runbooks, ADR (версионирование, ревью, история, связка с изменениями кода). - Таск‑трекер (Kaiten/Jira) — управление работой: карточки/статусы/обсуждения + ссылки на конкретные версии артефактов в Git (commit/tag) + доказательства (PR/CI/результаты проверки).
Дополнение: если вы используете Agent Skills (папки с SKILL.md) как формат переносимых процедур, логика та же — SKILL.md должен жить в Git и проходить ревью, потому что это часть производственного процесса (инструкции, шаблоны, проверки), а не “заметки в чате”.
2.1 Идея / постановка задачи#
Краткое резюме (коротко, без воды)
- Зачем: зафиксировать зачем это делаем, кому больно, что меняется.
- Владелец: руководитель/инициатор, менеджер продукта/проекта, техлид.
- Готово, если: есть несколько тезисов “зачем/что/как измерим” и явные ограничения.
- См. также: Глава 10 (валидация), Приложение A (бизнес‑обоснование).
Термины и “контракт исполнения” (коротко, чтобы не путаться)
- AC (Acceptance Criteria): что должно получиться (ожидаемое поведение/результат).
- DoD (Definition of Done): какие доказательства считаем достаточными, чтобы назвать результат готовым (несколько проверяемых пунктов).
- План проверки: как именно получить эти доказательства (тесты/метрики/выборка/крайние случаи).
- STOP: когда исполнитель обязан остановиться и эскалировать (неясный контекст, высокий риск, нет способа проверить).
- TRACE: где видно, на чём “стоял” ответ: какие правила/
SKILL.md/артефакты реально были использованы. Практика: TRACE кладём рядом с основным артефактом (ответ/пакет решения) и прикладываем в тикет/PR как доказательства. - Почему важно: человек иногда “дотягивает” AC контекстом и диалогом; автоматизация — нет, поэтому DoD + план проверки + STOP — обязательный минимум. Ниже AC и DoD перечислены ещё раз как артефакты процесса (с владельцем и критерием “готово”).
AC / критерии приёмки
- Зачем: чтобы “готово” было проверяемым, а не “сделай хорошо”.
- Владелец: автор изменения + ревьюер (принятие).
- Готово, если: критерии измеримы/проверяемы, есть негативные сценарии и крайние случаи.
- См. также: Глава 3, Глава 10.
DoD / критерии “готово” для задачи/итерации
- Зачем: стандартизировать качество поставки (код, тесты, проверка, откат, наблюдаемость).
- Владелец: команда (процесс), техлид/EM (применение).
- Готово, если: DoD короткий, обязателен и реально проверяется.
- См. также: Глава 5 (контрольные точки), Глава 9 (принудительное применение).
2.2 Спецификация#
Спецификация (ФТ/НФТ/AC)
- Зачем: определить границы, компромиссы и критерии успеха до реализации.
- Владелец: автор изменения (обычно Senior/Staff) + стейкхолдеры.
- Готово, если: есть ФТ/НФТ, критерии приёмки, ограничения и явные предположения.
- См. также: Глава 3, Глава 10.
Чеклист рисков (внутри спецификации / SOP / PR)
- Зачем: зафиксировать “что может пойти не так” и митигации без отдельной бюрократии.
- Владелец: автор изменения + ревьюеры.
- Готово, если: перечислены top‑риски и для каждого есть митигация + способ проверки/наблюдения.
- См. также: Глава 3, Глава 5, Глава 7.
2.3 Планирование#
- План работ (декомпозиция)
- Зачем: сделать путь к результату управляемым (а не “увидим по ходу”).
- Владелец: автор изменения + команда.
- Готово, если: есть этапы, зависимости, критический путь и контрольные точки.
- См. также: Глава 3.
Практическая ремарка: план — это не “черновик в чате”, а отдельный ревьюируемый артефакт. Его удобно править и переигрывать цикл исполнения: если агент делает “не то”, часто быстрее вернуться к плану, уточнить входы/ограничения/DoD и повторить, чем латать результат перепиской. См. Cursor: Best practices for coding with agents (разделы про планы и «starting over from a plan»).
2.3.1 Усиление по триггерам риска/зрелости (опционально)#
- Реестр рисков (как отдельный артефакт)
- Зачем: портфельный контроль рисков, когда риски повторяются и нужен единый обзор.
- Когда вводить: если класс рисков повторяется регулярно, задействует несколько команд или цена ошибки высока.
- Владелец: автор изменения + ревьюеры; на уровне портфеля — техлид/EM/владелец практики.
- Готово, если: у каждого риска есть митигация, триггеры и способ проверки/мониторинга.
- См. также: Глава 3, Глава 7.
2.4 Архитектура#
Архитектурный документ (v1)
- Зачем: явно задать компоненты, границы ответственности и контракты.
- Владелец: Staff/Principal (или назначенный архитектор).
- Готово, если: ясны компоненты/границы, есть компромиссы и “когда пересмотреть”.
- См. также: Глава 4.
ADR / записи архитектурных решений
- Зачем: сохранить “почему мы так решили”, чтобы не делать реверс‑инжиниринг через год.
- Владелец: автор решения (обычно Staff/Principal) + ревью.
- Готово, если: контекст → решение → последствия → триггеры пересмотра.
- См. также: Глава 4.
2.5 Реализация и проверка (через SOP и контрольные точки)#
SOPна изменение- Зачем: сделать выполнение воспроизводимым: шаги, условия остановки, проверки, выход.
- Владелец: автор изменения; применяет — инженер (или автоматизация).
- Готово, если: есть контрольные точки, план проверки и условия остановки; путь отката определён (обычно revert → redeploy), а план отката — по триггерам риска.
- См. также: Глава 5.
План проверки
- Зачем: доказать корректность результата (выборка + крайние случаи + метрики).
- Владелец: автор изменения; подтверждает — ревьюер.
- Готово, если: проверка повторяема и даёт наблюдаемые результаты.
- См. также: Глава 5, Глава 10.
Роли проверки (верификатор / тест‑раннер)
- Зачем: сделать качество “реальным”, а не “по обещанию”: один исполнитель делает изменение, другой независимо доказывает, что оно работает.
- Готово, если: есть отчёт “что проверено и прошло / что сломано / что не проверено” + результаты прогонов тестов/проверок (включая golden tests, если они применимы).
- См. также: Глава 8.
PR + ревью человеком
- Зачем: контроль качества и совместная ответственность.
- Владелец: автор PR; ревьюер — человек.
- Готово, если: описание, план проверки, результаты проверок приложены; путь отката определён (и, если требуется по триггерам риска, приложен/проверен подробный план отката).
- См. также: Глава 5.
2.6 Деплой и безопасность изменений#
Модель угроз
- Зачем: заранее перечислить угрозы и митигации (особенно для автоматизации и изменений в инфраструктуре/доступах).
- Владелец: владелец системы + security/ревью.
- Готово, если: активы/угрозы/векторы/митигации/проверки описаны.
- См. также: Глава 7.
План изменений (деплоя)
- Зачем: безопасная выкатка, минимизация риска, наблюдаемость.
- Владелец: инженер/эксплуатация (DevOps/SRE) + ревью.
- Готово, если: есть шаги, контрольные точки, метрики мониторинга и критерии отката.
- См. также: Глава 7.
Откат (путь отката и план отката)
- Зачем: быстро вернуться в стабильное состояние при деградации.
- Владелец: автор изменения.
- Готово, если:
- путь отката определён всегда (обычно revert → redeploy по вашему стандарту)
- план отката (шаги, время, проверка) и тест отката на стейджинге — если требуется по триггерам риска (данные/миграции/безопасность/платежи/доступность/необратимые операции)
- См. также: Глава 5, Глава 7.
2.7 Операции и инциденты#
runbookдля инцидента- Зачем: воспроизводимое реагирование: шаги, окна, проверки, эскалация.
- Владелец: SRE/дежурная команда; применяет — инженер (или автоматизация).
- Готово, если: есть шаги триажа, исправления, проверки результата и пост‑действия.
- См. также: Глава 6.
Отладчик (Debugger) как роль RCA
- Зачем: отделить поиск первопричины от рискованных действий; вернуть проверяемый вклад в пакет решения (доказательства, локализация, проверка).
- См. также: Глава 6, Глава 9.
Отчёт по инциденту
- Зачем: фиксировать факты, первопричину, действия и “что улучшим”, а не терять знания.
- Владелец: команда сервиса + SRE.
- Готово, если: есть хронология, первопричина, исправление, дальнейшие действия и проверка, что действия выполнены.
- См. также: Глава 6.
2.8 Качество изменений (измеримость)#
- eval-набор + golden tests
- Зачем: измерять качество изменений и ловить регрессии до продакшена.
- Владелец: владелец практики/системы.
- Готово, если: eval-набор репрезентативен, golden tests стабильны и запускаются регулярно.
- См. также: Глава 8.
2.9 Управление практикой (чтобы работало “по умолчанию”)#
- Базовый уровень + контрольные точки качества
- Зачем: сделать качество и безопасность обязательными, а не “по желанию”.
- Владелец: владелец практики/платформы (обычно Staff/Principal) + руководство.
- Готово, если: есть правила, где контрольные точки обязательны, и механизм принудительного применения (например, через CI/CD).
- См. также: Глава 9.
3) Мини‑шаблоны (минимально достаточные)#
3.1 DoD (минимальный)#
## DoD (критерии “готово”)
- [ ] Критерии приёмки (AC) выполнены и проверены
- [ ] План проверки выполнен: выборка + крайние случаи
- [ ] Нет новых предупреждений линтера
- [ ] Путь отката определён (обычно revert → redeploy); план отката и тест отката — если требуется по триггерам риска
- [ ] Обновлён `runbook` (если изменение влияет на операции)
- [ ] Описаны риски/компромиссы (и зафиксированы решения, если нужно)
3.2 ADR (минимальный)#
# ADR: <DECISION_SHORT_NAME>
## Контекст
- <CONTEXT>
## Решение
- <DECISION_AND_RATIONALE>
## Последствия
- <что стало проще/сложнее, какой долг/риски появляются>
## Когда пересмотреть
- <триггеры: рост нагрузки, новые требования, инциденты, SLO и т.п.>
3.3 Пакет решения (decision packet): минимальный контракт#
Пакет решения (decision packet) — это артефакт, который делает решение проверяемым: отделяет факты от гипотез, фиксирует риск и явно показывает, что требует подтверждения человека.
Минимально достаточные поля (смысл важнее имён полей):
summary: 1–3 предложения «что случилось / что делаем дальше».timeline[]: ключевые события с временем (что произошло и когда).hypotheses[]: гипотезы с уровнем уверенности + почему (на каких фактах основано).evidence[]: доказательства (логи/метрики/ссылки на дашборды/PR) — без “кажется”.next_checks[]: следующие безопасные проверки (безопасные по умолчанию).risk: что может пойти не так (данные/безопасность/радиус поражения) и почему это важно.rollback: как откатываем/останавливаем ухудшение (если применимо).verification: как проверим, что стало лучше (метрики/тесты/выборка).requires_approval: что именно требует подтверждения человека и почему.unknowns[]: что мы не знаем (и что нужно, чтобы узнать).
Пример (JSON):
{
"summary": "INC-...: payroll деградировал после деплоя. Гипотеза: миграция/схема. Дальше — безопасные проверки, затем эскалация.",
"timeline": [
{"time": "02:10", "event": "deploy payroll-service v1.2.3"},
{"time": "02:12", "event": "5xx spike started"}
],
"hypotheses": [
{
"id": "H1",
"summary": "failed DB migration / schema mismatch",
"confidence": "MEDIUM",
"why": ["errors mention missing column", "deploy shortly before incident"]
}
],
"evidence": [
{"source": "logs", "snippet": "ERROR: column \"new_field\" does not exist"},
{"source": "dashboard", "link": "<URL>"}
],
"next_checks": [
{"id": "C1", "description": "confirm migration status", "safe": true}
],
"risk": {"data_risk": "unknown", "blast_radius": "payroll"},
"rollback": {"plan": "revert deploy (approval required)"},
"verification": {"success_criteria": ["5xx back to baseline", "latency p95 < <WINDOW>"]},
"requires_approval": {"required": true, "reason": "prod change / insufficient evidence"},
"unknowns": ["migration status", "rollback readiness"]
}
3.4 Skill Router: протокол маршрутизации ролей (копируемый)#
Этот протокол — “рабочая дисциплина” для агента: перед любым ответом агент обязан выбрать одну базовую роль (исполнитель) и 0..N проверяющих ролей (по рискам/точкам касания), затем явно зафиксировать TRACE (что реально прочитано).
ROLE ROUTING (MANDATORY)
Before ANY answer you MUST:
1) Run Skill Router and select roles:
- base role: exactly 1 main role
- checker roles: 0..N validating roles (based on risks/touchpoints)
2) Immediately print markers (Markdown):
- **[ROUTER]:** selected skills = <LIST> (base=<BASE>, checkers=<CHECKERS_OR_NONE>)
- **[TRACE]** read: rules=[...]; skills=[...]; refs=[...]
TRACE rules:
- list only actually read files (rules/skills/references)
- use workspace-relative paths for readability
- if there are many files: first N + “+X more”
3) Then write the answer using role markers only:
- **[<ROLE>]:** ...
- **--- [SWITCHING TO <ROLE>] ---**
- **--- [RETURNING TO <ROLE>] ---**
IF THE ROLE IS NOT DEFINED
A role is “not defined” when:
- no skill from the catalog matches the task/expected behavior
- or the user explicitly requests behavior/style not covered by available skills/project roles
Then you MUST:
- NOT perform the task
- ask the user to provide a Role Spec (template below)
- after receiving Role Spec, treat it as a “project role” and route to it alongside skills
PROJECT ROLES (sticky, per-project)
If this system prompt (or the conversation) contains Role Specs, treat them as available project roles and use them for routing.
ROLE SPEC TEMPLATE (user must provide)
ROLE: <ROLE_NAME>
WhoIAm: <WHO_I_AM>
Goal: <GOAL>
Tone: <TONE>
Format: <FORMAT>
Constraints: <CONSTRAINTS>
QualityBar: <QUALITY_BAR>
3.5 Масштабирование автономной работы: planners / workers / judge (паттерн)#
Если один агент “тонет” в большом проекте, естественный шаг — параллелить. Практика показывает, что плоская само‑координация через общий список задач и блокировки часто деградирует в bottleneck и хрупкость. Более устойчивый паттерн — разделение ролей:
- Planners (планировщики): непрерывно исследуют систему и нарезают задачи.
- Workers (исполнители): берут конкретные задачи и доводят до результата, не пытаясь удерживать “большую картину”.
- Judge (арбитр итерации): на конце цикла решает, продолжать ли итерацию, и когда делать “fresh start”, чтобы сдерживать drift/tunnel vision.
Источник/пруф (доп. чтение): Cursor: Scaling long-running autonomous coding.
Ремарка: на практике “fresh start” чаще всего реализуется как возврат к плану (plan‑first): уточнить требования/ограничения, обновить план и перезапустить выполнение по нему, вместо того чтобы чинить результат цепочкой уточнений. См. Cursor: Best practices for coding with agents.
4) Типовые ошибки (анти‑паттерны)#
- Нет DoD: “готово” становится мнением, качество плавает.
- Нет ADR: спустя время решения приходится восстанавливать по следам.
- Нет пути отката (и нет плана, когда он нужен): любой сбой превращается в инцидент с высоким MTTR.
- Нет
runbook: реагирование “на героизме”, знания не воспроизводимы. - Нет eval/регрессионного набора перед деплоем изменений: регрессии уезжают в продакшен.