Khi nào Spec, Khi nào Agent - Nghệ thuật phối hợp SDD + ADD
Chương 1-12 đã xây dựng hai framework đầy đủ: SDD cho các phần cần chính xác ngay từ đầu và ADD cho phần cần tốc độ triển khai. Câu hỏi thực tế của mọi đội là chọn cái nào cho mỗi task, và khi nào cần chuyển trạng thái từ Spec-driven sang Agent-driven.
Chương 13 trả lời bằng bộ công cụ vận hành: mô hình Core & Shell, ma trận quyết định 3 chiều, workflow 7 bước có Escape Hatch, template thư mục và Git strategy, cùng Constitution mẫu cho đồ án 20 tuần.
Thông điệp trung tâm của chương là triết lý điều phối: Spec ở tầng kiến trúc, Agent ở tầng implementation. Không phải quy tắc cứng nhắc, mà là cách giữ cân bằng giữa rủi ro, tốc độ và chất lượng.
Mô hình Core & Shell mượn tư duy kiến trúc hệ thống: phần lõi cần ổn định tuyệt đối, phần vỏ cần linh hoạt để thích nghi nhanh.
Trong Hybrid Framework, SDD bảo vệ CORE còn ADD triển khai SHELL. Core chứa database schema, API contract, security, authentication, state machine và payment flow. Shell chứa UI, business logic, CRUD, boilerplate, tests và docs.
| Core element | Tại sao không được sai | SDD level cần | Cost khi sai |
|---|---|---|---|
| Database schema | Migration phá dữ liệu production | Formal mức 3 | Mất ngày restore backup, data loss |
| API contracts | Breaking change ảnh hưởng consumers | Formal | Clients lỗi hàng loạt, SLA breach |
| Authentication flow | Security vulnerability | Formal + security review | Data breach, legal liability |
| Payment state machine | Mất tiền hoặc duplicate charge | Formal + audit trail | Financial loss, churn |
| Data models | Sai domain kéo theo sai toàn hệ thống | Detailed/Formal | Refactor nhiều tháng |
| Security policies | Compliance violation | Formal + compliance review | Fine, reputational damage |
Shell là vùng mà lỗi có thể sửa nhanh với chi phí thấp. UI sai có thể chỉnh CSS trong vài phút, logic sai có thể debug trong sprint, test thiếu có thể bổ sung. Vì vậy mô hình Agent-first phù hợp.
| Shell element | Tại sao Agent-first OK | ADD approach | Iteration cycle |
|---|---|---|---|
| UI Components | Visual feedback kiểm chứng nhanh | Agentic với Cline/Cursor | Minutes - hours |
| Business Logic | Test-driven correction khả thi | Agentic + DoD | Hours - days |
| CRUD operations | Pattern-based, complexity thấp | Template + Agent | Minutes |
| Boilerplate | Mechanical, dễ verify | Fully agentic | Seconds - minutes |
| Tests | Acceptance criteria rõ | Agent from spec | Hours |
| Documentation | Nội dung quan trọng hơn format | Agent + human review | Hours |
Ranh giới không luôn rõ ràng. Ví dụ email validation tưởng là Shell nhưng nếu email là unique identifier ở database thì nó trở thành Core.
Công cụ này trả lời ba câu hỏi cho mọi task: cần spec sâu bao nhiêu, trao autonomy cho agent ở mức nào, và risk thực tế là gì.
| Chiều | Levels | Định nghĩa |
|---|---|---|
| Spec Depth | None / Light / Full | None: prompt; Light: EARS + scope + DoD; Full: 8-component + EARS + state diagram |
| Agent Autonomy | Guided / Agentic / Multi-agent | Guided: human-in-loop từng bước; Agentic: tự execute có gates; Multi-agent: team có orchestrator |
| Risk Level | Low / Medium / High | Low: lỗi dễ sửa; Medium: ảnh hưởng UX/data; High: tiền, security, compliance |
| Spec \ Autonomy | Guided | Agentic | Multi-agent |
|---|---|---|---|
| No Spec | Tránh: output khó đoán, chỉ hợp hackathon | Có thể dùng cho CSS tweak, utility đơn giản | Tránh: nhiều agent không contract sẽ hỗn loạn |
| Light Spec | Tốt cho feature medium risk, module đơn | Sweet spot cho đa số feature UI/logic/tests | Tốt cho parallel FE+BE với shared contracts |
| Full Spec | Mandatory cho payment/auth/compliance | Standard cho feature phức tạp có business rules | Enterprise cross-team, API chia sẻ, regulated |
| Risk | Spec depth | Autonomy | Ví dụ | Approach |
|---|---|---|---|---|
| High + Complex | Full mandatory | Guided | Payment/Auth | Full SDD - Guided Agent - Audit |
| High + Simple | Full | Agentic with gates | Rate limiting config | Spec + Agentic + Constitution |
| Medium + Complex | Light - Full | Agentic | Order management, reports | Light spec + Agentic + tests |
| Medium + Simple | Light | Agentic | Profile update | EARS + Agent + DoD |
| Low + Complex | Light | Multi-agent | Dashboard nhiều chart | Shared contracts + parallel agents |
| Low + Simple | None | Autonomous | CSS button, utils | Direct prompt - accept output |
| Tình huống | Risk | Complexity | Quyết định | Thực hiện |
|---|---|---|---|---|
| Thêm màu button | Low | Low | No Spec + Agentic | Prompt trực tiếp, accept output |
| Add pagination danh sách | Low | Medium | Light Spec + Agentic | EARS + scope + DoD, 1 agent |
| Implement user registration | Medium | Medium | Light Spec + Agentic | EARS + auth constraints + DoD |
| Tình huống | Risk | Complexity | Quyết định | Thực hiện |
|---|---|---|---|---|
| Payment checkout flow | High | Complex | Full Spec + Guided | Formal spec + state machine + human every step |
| Dashboard 3 charts | Low | Complex | Light Spec + Multi-agent | Shared API contract + 3 agents song song |
Mục tiêu của quy trình 7 bước là giảm rework ở CORE, tăng tốc ở SHELL, và chốt chất lượng bằng Validation Gate trước merge. Escape Hatch được thiết kế như cơ chế kiểm soát rủi ro, không phải thất bại.
| Artifact | File | Nội dung | Owner |
|---|---|---|---|
| Constitution | .sdd/constitution.md | Hard rules, architectural constraints, security | Tech Lead |
| Agent Persona | AGENTS.md | Stack, expertise, forbidden actions | Tech Lead |
| Project Context | CLAUDE.md | Architecture, patterns, lessons learned | Team |
| Global Constraints | .sdd/constraints/*.md | Tech stack, business rules, safety | Tech Lead |
| Skill Library | .sdd/skills/*.md | Domain expertise, reusable patterns | Senior devs |
Ở B2, mỗi feature được chia thành Core elements và Shell elements. Core dùng Full Spec; Shell dùng Light/No Spec để giữ tốc độ.
Sau approve plan, agent tách task vào TASKS.md. Mỗi task nên dưới 4 giờ, có dependency rõ và DoD riêng.
B5 vận hành theo Plan-Act-Check. Human can thiệp ở approval gates hoặc khi agent stuck. Escape Hatch cho phép chuyển manual coding sau 3 lần loop lỗi hoặc khi thời hạn quá gấp.
| Layer | Kiểm tra | Tool | Fail = ? |
|---|---|---|---|
| L1 Automated | Unit tests, lint, type check | go test, eslint, mypy | Block merge, yêu cầu agent fix |
| L2 Spec Compliance | Mọi SHALL có code + EARS trace | Manual + AI-assisted | Task chưa được coi là done |
| L3 Constitution | Security, architecture, standards | CI pipeline checks | Block merge, escalate |
| L4 Acceptance | Criteria từ spec §7 | Manual test + demo | Quay lại B5 để làm rõ/fix |
B7 không lặp lại việc kiểm spec hoặc code quality (đã xử lý ở B6). B7 tập trung vào system fit, kiến trúc tổng thể và tác động tương lai.
Một cấu trúc thư mục tốt giúp agent và con người tìm đúng thông tin, giữ Git history rõ ràng, và cấu hình CI/CD đơn giản hơn.
| Artifact | Pattern | Ví dụ | Notes |
|---|---|---|---|
| Feature spec folder | feat-{kebab-name} | feat-user-profile | Lowercase + hyphens |
| Spec file | SPEC.md | SPEC.md | UPPERCASE, locked khi approved |
| Task file | TASKS.md | TASKS.md | Agent cập nhật |
| Skill file | {domain}-{name}.md | sql-performance.md | Kebab-case |
| ADR file | ADR-{n}-{name}.md | ADR-001-auth-approach.md | Zero-padded number |
| Git spec branch | spec/{feature} | spec/payment-v2 | Slash chỉ dùng cho prefix |
| Git agent branch | agent/{feature} | agent/payment-v2 | Match spec branch name |
| Git spec tag | spec/{name}/v{semver} | spec/payment/v1.0.0 | Semver cho spec versions |
Template này dành cho team 3-5 sinh viên, gồm rule bảo mật, ràng buộc kiến trúc, coding/testing standards, Git conventions, review process, deployment rules và agent policy.
Over-specification xảy ra khi team dùng Formal Spec cho task chỉ cần prompt hoặc Light Spec. Hệ quả là chậm velocity, spec tự mâu thuẫn và agent quá tải bởi instruction density.
"Tests pass" không đồng nghĩa với đúng spec. Nếu tests không cover business rule hoặc tests được viết theo implementation sai, team sẽ merge bug với độ tự tin cao.
Khi AGENTS.md, CLAUDE.md và shared_context.md không được cập nhật sau quyết định quan trọng, agent sẽ lặp lại pattern cũ đã bị deprecated.
| Anti-pattern | Dấu hiệu sớm | Cost nếu không sửa | Fix nhanh |
|---|---|---|---|
| Over-specification | Spec > 200 dòng cho task đơn giản | Slow velocity, giảm morale | Apply Risk Matrix trước khi viết spec |
| Blind Trust | Merge không qua Validation Gate | Security/compliance bugs | Mandatory Validation Gate checklist trong PR template |
| Context Amnesia | Agent lặp pattern deprecated | Rework, inconsistency, tech debt | Update AGENTS.md cùng PR code change |
| Section | Key Technique | Điểm cốt lõi |
|---|---|---|
| 13.1 Core & Shell | Phân loại theo risk | Xác định thành phần nào cần Full Spec, thành phần nào chạy Agent-first |
| 13.2 Decision Matrix | 9-cell + Risk overlay + Flowchart | Mọi task đều có cách chọn Spec depth và autonomy có hệ thống |
| 13.3 Workflow 7 bước | B1-B7 + Escape Hatch + Validation Gate | Không bỏ qua B6 nếu muốn reliability thật sự |
| 13.4 Directory template | Folder architecture + branch model | Tạo audit trail rõ giữa spec và code |
| 13.5 Constitution | 3-layer policy cho đồ án 20 tuần | Rule rõ + enforce được mới giữ chất lượng bền vững |
| 13.6 Anti-patterns | 3 cạm bẫy + cách né | Tránh over-spec, blind trust, context amnesia để giảm rework |
Khi model mạnh hơn và context window mở rộng, vai trò developer sẽ chuyển từ code executor sang system architect, policy designer và quality governor. Chương 14 phân tích cách SDD/ADD tiến hóa trong 5 năm tới.
Các phần như schema, auth, payment, security luôn cần Full Spec và approval rõ ràng trước khi code.
UI, CRUD, boilerplate, docs nên đi theo ADD để giảm cycle time và nhận feedback nhanh.
Dùng ba chiều Spec Depth x Autonomy x Risk để chọn chiến lược phù hợp cho từng task.
Không có L1-L4 đầy đủ thì không merge. "Done" từ agent không thay thế evidence.
Context docs phải được bảo trì liên tục để agent không tái tạo quyết định cũ đã lỗi thời.
PLAYBOOK SDD ADD & CODEX - Closing
Chương 13 - Khi nào Spec, Khi nào Agent
LinhNDM
Nguyễn Đình Mạnh Linh