几十年来,软件开发遵循一个隐含假设:代码是王。
传统流程:
需求文档 → 设计文档 → 代码 → 测试 → 文档腐烂
↓ ↓ ↑
(参考) (指导) (真相)
规范服务于代码——它们是搭建后即丢弃的脚手架。我们写 PRD 来指导开发,画架构图来说明设计,但这些都从属于代码本身。代码是真相,其他一切充其量是"良好意愿"。随着代码演进,规范很少能跟上步伐。
Spec Kit 彻底颠覆这一范式:规范是王,代码服务于规范。
SDD 流程:
规范(Spec) → 计划(Plan) → 任务(Tasks) → 代码
↑__________________________________|
生产反馈闭环
这不是渐进式改良,而是对"什么驱动开发"的根本性重构。当规范直接生成代码时,意图与实现之间的鸿沟不复存在——只有转换。
| 敏捷/Scrum 概念 | Spec Kit 对应 | 本质区别 |
|---|---|---|
| Epic | specs/[feature]/ 目录 |
Epic 是管理单元;Spec 目录是可执行的生成源 |
| User Story | spec.md 中的用户故事 |
Story 是沟通工具;Spec 中的故事是 AI 的执行指令 |
| Acceptance Criteria | Given/When/Then 场景 | AC 用于验收;Spec 中的场景直接生成测试代码 |
| Sprint Backlog | tasks.md |
Backlog 是承诺;Tasks 是带依赖关系的执行图 |
| Definition of Done | checklists/*.md |
DoD 是检查清单;Checklist 是"需求的单元测试" |
| Technical Spike | research.md |
Spike 是时间盒探索;Research 是持久化的技术决策 |
| Sprint Planning | /speckit.plan 命令 |
Planning 是会议;Plan 是自动生成的技术方案 |
| Retrospective | Constitution 演进 | Retro 产出行动项;Constitution 是不可变的架构基因 |
敏捷关注"谁在什么时候做什么"
Sprint 1:
- Story A (5 points) → Alice
- Story B (3 points) → Bob
- Story C (8 points) → Team
Spec Kit 关注"AI 需要什么上下文才能生成正确代码"
specs/001-user-auth/
├── spec.md # WHAT: 用户需要什么
├── plan.md # HOW: 技术如何实现
├── tasks.md # SEQUENCE: 执行顺序和依赖
└── contracts/ # INTERFACE: API 契约定义
| 维度 | Jira Issue | Spec Kit 文档 |
|---|---|---|
| 本质 | 工作项跟踪 (Who & When) | 设计文档 (What & How) |
| 目的 | 管理人员协作 | 指导 AI 生成代码 |
| 粒度 | 任务/Bug/Story 级别 | 功能级别 (Feature) |
| 内容 | 状态、指派人、截止日期、评论 | 验收标准、技术方案、任务分解 |
| 生命周期 | 完成即关闭 | 随代码版本演进 |
| 消费者 | 项目经理、团队成员 | AI 编程助手 |
Jira Issue 结构:
Issue: AUTH-123
Type: Story
Summary: "用户可以通过邮箱登录"
Description: "作为用户,我希望..."
Status: In Progress
Assignee: Alice
Sprint: Sprint 5
Story Points: 5
Labels: [auth, mvp]
Comments: [讨论历史...]
Spec Kit spec.md 结构:
# Feature: User Authentication
## User Story 1 - Email Login (P1)
**Why this priority**: 核心功能,阻塞其他所有功能
**Independent Test**: 可通过登录流程独立验证
**Acceptance Scenarios**:
1. Given 有效邮箱和密码
When 用户提交登录表单
Then 返回 JWT token 并跳转到首页
2. Given 无效密码
When 用户提交登录表单
Then 显示错误信息,不泄露用户是否存在
## Functional Requirements
- FR-001: 系统必须支持邮箱+密码认证
- FR-002: 密码必须使用 bcrypt 哈希存储
- FR-003: 登录失败 5 次后锁定账户 15 分钟
## Success Criteria
- SC-001: 用户可在 3 秒内完成登录流程
- SC-002: 系统支持 1000 并发登录请求
Jira 的局限性:
Spec Kit 的优势:
tasks.md 明确定义执行顺序和并行机会
Spec Kit (设计时) Jira (执行时)
───────────────── ────────────
spec.md ──────────────────────→ Epic
└── User Story 1 ───────────→ Story
└── User Story 2 ───────────→ Story
tasks.md ─────────────────────→ Sub-tasks
└── T001 Setup ─────────────→ Sub-task (Alice)
└── T002 Model ─────────────→ Sub-task (Bob)
/speckit.taskstoissues 命令可自动同步到 GitHub Issues
敏捷/Jira 中没有对应概念。
Constitution 是项目的"架构 DNA"——一组不可变原则,确保每次生成的代码都遵循相同的架构哲学:
# Project Constitution
## I. Library-First
每个功能必须先是独立库,不允许直接在应用代码中实现
## II. CLI Interface
所有库必须通过 CLI 暴露功能,文本输入/输出
## III. Test-First (NON-NEGOTIABLE)
没有测试就没有代码,红-绿-重构严格执行
## VII. Simplicity
最多 3 个项目,复杂度必须被证明而非假设
为什么需要 Constitution?
传统 Checklist: 验证实现是否正确
- [ ] 验证登录按钮可点击
- [ ] 测试错误提示显示正确
- [ ] 确认跳转到首页
Spec Kit Checklist: 验证需求是否写得正确
- [ ] 登录失败的错误信息是否明确定义?[Completeness, Gap]
- [ ] "快速登录"是否量化为具体时间指标?[Clarity, Spec §NFR-1]
- [ ] 移动端和桌面端的登录流程是否一致?[Consistency]
- [ ] 是否定义了账户锁定后的解锁流程?[Coverage, Edge Case]
核心区别:
Jira 的依赖: 弱链接,主要用于甘特图展示
AUTH-124 blocks AUTH-125
AUTH-126 is blocked by AUTH-124
Spec Kit 的依赖: 强约束,直接影响执行顺序
## Phase 2: Foundational (BLOCKS all user stories)
- [ ] T004 Setup database schema
- [ ] T005 [P] Implement auth framework # 可与 T006 并行
- [ ] T006 [P] Setup API routing # 可与 T005 并行
- [ ] T007 Create base models (depends on T004)
## Phase 3: User Story 1
- [ ] T010 [P] [US1] Create User model # 可与 T011 并行
- [ ] T011 [P] [US1] Create Session model # 可与 T010 并行
- [ ] T012 [US1] Implement AuthService (depends on T010, T011)
[P] 标记的含义:
Sprint Planning → Daily Standup → Development → Review → Retro
(会议) (会议) (编码) (会议) (会议)
特点: 以会议为节点,人工协调,代码是产出物
/speckit.specify → /speckit.plan → /speckit.tasks → /speckit.implement
(生成规范) (生成计划) (生成任务) (生成代码)
↓ ↓ ↓ ↓
spec.md plan.md tasks.md src/*.py
research.md
data-model.md
contracts/
特点: 以命令为节点,自动生成,规范是产出物(代码是规范的表达)
| 活动 | 传统敏捷 | Spec Kit SDD |
|---|---|---|
| 需求文档 | 2-3 小时 | 5 分钟 (/speckit.specify) |
| 技术设计 | 3-4 小时 | 5 分钟 (/speckit.plan) |
| 任务分解 | 1-2 小时 | 5 分钟 (/speckit.tasks) |
| 总计 | ~10 小时 | ~15 分钟 |
Bug 发现 → 创建 Issue → 分配 → 修复 → 关闭
↓
(与原需求脱节)
Bug 修复往往是"打补丁",不更新原始需求文档。
Bug 发现 → 更新 Spec → 重新生成 Plan → 重新生成 Tasks → 重新生成代码
↓
(规范演进)
"Production metrics and incidents don't just trigger hotfixes—they update specifications for the next regeneration."
Bug 不是独立事件,而是规范不完整的信号。修复 Bug 意味着完善规范。
Spec Kit 目前没有专门的 Bug 处理模板,这是一个设计上的空白:
这反映了 SDD 的理想主义:所有问题都应该回归到规范层面解决。实际项目中可能需要补充轻量级的 Bug 处理流程。
三股力量的交汇使 Spec Kit 成为可能:
自然语言规范可以可靠地生成工作代码。这不是替代开发者,而是放大开发者的效能——自动化从规范到实现的机械翻译。
现代系统集成数十个服务、框架和依赖。通过手动流程保持所有部分与原始意图对齐越来越困难。SDD 通过规范驱动生成提供系统性对齐。
需求变更不再是例外,而是日常。传统开发将变更视为干扰——每次转向都需要手动传播变更到文档、设计和代码。SDD 将需求变更从障碍转变为正常工作流:改变规范中的核心需求,受影响的实现计划自动更新。
Spec Kit 的哲学是:与其让代码慢慢偏离意图,不如让意图持续生成代码。
这套方法论将开发者从"代码的维护者"转变为"规范的策展人",将创造力聚焦于定义"做什么"和"为什么",而非"怎么做"的机械劳动。
| Spec Kit 概念 | 文件位置 | 敏捷对应 | Jira 对应 |
|---|---|---|---|
| Feature Spec | specs/[name]/spec.md |
Epic + Stories | Epic |
| Plan | specs/[name]/plan.md |
Technical Design | - |
| Tasks | specs/[name]/tasks.md |
Sprint Backlog | Sub-tasks |
| Checklist | specs/[name]/checklists/*.md |
Definition of Done | - |
| Constitution | memory/constitution.md |
Team Agreements | - |
| Research | specs/[name]/research.md |
Technical Spike | - |
| Contracts | specs/[name]/contracts/ |
API Documentation | - |
| Data Model | specs/[name]/data-model.md |
- | - |
| Quickstart | specs/[name]/quickstart.md |
- | - |