指南
基于《敏捷宣言》原文(agilemanifesto.org,2001)与 12 条原则(agilemanifesto.org/principles.html)编写
速查
- 4 价值观的试金石:「左>右」非「左弃右」,宣言明文「尽管右项有其价值,我们更重视左项」
- 价值观一(以人为本):流程与工具是手段,个体判断与跨职能互动是源头
- 价值观二(可用软件):可运行的软件比纸面文档更能验证方向,文档服务于沟通而非替代品
- 价值观三(客户协作):用持续协作替代对立式合同谈判,把客户拉进开发回路
- 价值观四(响应变化):计划是滚动的、可自适应的,而非一次性冻结
- 原则主线:早交付(1/3)、欢迎变化(2)、每日协作(4)、自组织(5/11)、面对面(6)、可用软件度量(7)、可持续节奏(8)、技术卓越(9)、简洁(10)、反思改进(12)
- 工程实践:TDD、持续集成、重构、结对——这些是「敏捷能持续」的工程底座(源自 XP)
- 计划方法:滚动式计划(近期细、远期粗)+ 估算用于容量规划而非承诺
- 敏捷工程纪律:没有自动化测试的「拥抱变化」= 持续制造技术债
- 反敏捷信号:站会变汇报、回顾变甩锅、估算变承诺、迭代无 Definition of Done
- 规模化困境:单团队敏捷顺,多团队需 SAFe/LeSS/Nexus;扩展框架引入复杂度,慎用
- 核心共识:敏捷是价值观不是流程,落地要贴合团队上下文,工程能力是地基
4 价值观深度解读
价值观一:个体与互动 高于 流程与工具
这条针对的是「把人当资源、把流程当万能药」的倾向。工具(Jira、Confluence、CI)和流程(变更审批、门禁)能提升一致性,但软件最终由有判断力的人做出。当流程压制了人的判断(如一个明显错误的变更要等 3 天审批),或工具定义了工作方式(如「Jira 里没建的任务不许做」导致紧急修复被阻塞),就违背了这条价值观。
落地含义:跨职能小团队(开发 + 测试 + 设计坐一起)、面对面或实时沟通优先、决策权下放给离信息最近的人。
价值观二:工作的软件 高于 详尽的文档
这是最常被误读的一条。宣言没有否定文档,它说的是「优先级」——能跑的软件比 200 页设计稿更能验证需求是否正确。文档的正当性在于「促进理解与协作」,而非「作为交付物的形式合规」。
落地含义:每个迭代产出可演示的增量(Increment),而非「设计文档 100% 完成」;文档写「够用」的(架构决策记录 ADR、API 契约、上手指南),而非事无巨细。
价值观三:客户协作 高于 合同谈判
传统外包模式靠「需求规格说明书 + 验收条款」把甲乙双方置于对立面——甲方想多要、乙方想少做。敏捷主张把客户(或产品负责人)拉进开发回路,每个迭代共同 Review、共同调整优先级。这要求合同模式从「固定范围」转向「固定预算 + 时间,范围可变」。
落地含义:Product Owner 代表客户声音、迭代 Review 邀请真实用户、用「工作软件」替代「需求确认单」做决策依据。
价值观四:响应变化 高于 遵循计划
软件开发的本质不确定性使「详尽的前期计划」注定失准。敏捷不反对计划,而是让计划滚动(rolling):近期(下个迭代)计划细,远期(3 个月后)计划粗,并随反馈调整。关键前提是有工程安全网(自动化测试、持续集成),否则频繁变化会迅速积累技术债。
落地含义:需求以 Product Backlog 形式按价值排序,每个迭代只承诺近期;估算用于「容量规划」而非「对客户的硬承诺」。
12 原则逐条要点
| # | 原则(要点) | 实践落点 |
|---|---|---|
| 1 | 最高优先级是通过早并持续交付有价值软件满足客户 | 短迭代 + 每个 Sprint 产出可用增量 |
| 2 | 即使开发后期也欢迎需求变更 | Backlog 持续优先级排序,不冻结需求 |
| 3 | 频繁交付可用软件(数周到数月,倾向更短) | Sprint 长度 1-4 周,越短反馈越快 |
| 4 | 业务人员与开发者每日协作 | PO 与团队同处一室 / 每日同步 |
| 5 | 围绕有动力的个体建项目,给环境与支持,信任他们 | 自组织团队、去掉微观管理 |
| 6 | 面对面沟通是最有效的信息传递 | 白板、结对、立会优先于长文档 |
| 7 | 可用软件是进度的首要度量 | 用「能演示的功能」而非「完成的任务数」度量 |
| 8 | 敏捷过程倡导可持续开发,恒定节奏 | 不靠加班堆迭代,长期可持续 |
| 9 | 持续关注技术卓越与良好设计增强敏捷 | 重构、TDD、干净架构 |
| 10 | 简洁——最大化未完成工作的艺术 | 砍掉不增价值的功能与流程 |
| 11 | 最好的架构/需求/设计由自组织团队涌现 | 团队自主决定技术方案 |
| 12 | 团队定期反思并调整行为 | Sprint Retrospective |
敏捷工程实践
敏捷宣言本身不谈工程,但「能拥抱变化」必须有工程底座,否则就是裸奔。这套实践主要来自 XP(极限编程):
自动化测试 → 没有它,每次变更都是赌博
持续集成 → 没有它,集成债越积越大
重构 → 没有它,代码腐烂,变更成本指数上升
结对/评审 → 没有它,知识锁在个人脑中| 实践 | 作用 | 失去后的风险 |
|---|---|---|
| TDD(测试驱动开发) | 变更有安全网,回归可自动捕获 | 「拥抱变化」沦为制造技术债 |
| 持续集成(CI) | 频繁集成,问题早暴露 | 集成阶段爆炸,迭代末期通宵 |
| 重构 | 持续改善设计,控制复杂度 | 代码腐烂,新功能越来越慢 |
| 结对编程 / 代码评审 | 知识共享,质量内建 | 巴士因子低,单点故障 |
| 简单设计 | 只做当下需要的,YAGNI | 过度设计,维护负担重 |
计划与估算
敏捷的计划是滚动的,估算服务于容量规划,不服务于对客户的硬承诺。
Product Backlog(远期,粗估,按价值排序)
│ 每个 Sprint Planning 拉一批
▼
Sprint Backlog(本期,细估,承诺完成)
│ 每日立会跟踪
▼
Increment(可用的增量,满足 Definition of Done)估算方法:故事点(Story Point,相对复杂度)或理想日(Ideal Day)。要点:估算用于「这个迭代能装多少」,而非「这个功能 3 月 1 日上线」。
反模式清单
| 反模式 | 表现 | 纠正 |
|---|---|---|
| 假敏捷 | 拿「敏捷」当不写文档/不做设计的借口 | 补 Definition of Done、补架构 ADR |
| 站会变汇报 | Daily Scrum 变成给经理的进度汇报 | 聚焦「计划是否需调整」,经理不发言 |
| 估算变承诺 | 故事点被当成对客户的交付承诺 | 估算仅用于容量规划 |
| 回顾变甩锅 | Retro 沦为互相指责 | 聚焦流程改进,对事不对人 |
| 无 DoD 的迭代 | 「完成」没有客观标准 | 定义 Definition of Done |
| 只做不回顾 | 迭代结束直接进下一个 | 强制 Retro,哪怕 15 分钟 |
规模化敏捷的取舍
单团队敏捷(5-9 人)通常顺畅。当团队规模放大到几十上百人,纯 Scrum 不够,需扩展框架:
| 框架 | 思路 | 取舍 |
|---|---|---|
| Scrum of Scrums | 多个 Scrum 团队的代表定期同步 | 轻量,但协调弱 |
| Nexus | 多团队共用一个 Product Backlog,一个集成 Sprint | Scrum 官方扩展,较轻 |
| LeSS(Large-Scale Scrum) | 保持 Scrum 简洁,多团队一 PO | 简洁但要求高 |
| SAFe | 层级化(团队/项目群/组合),强流程 | 重,适合超大型强合规组织 |
共识:先让单团队敏捷跑顺,再谈规模扩展。用 SAFe 救不了根本不会敏捷的团队。
敏捷与 DevOps 的关系
| 维度 | 敏捷 | DevOps |
|---|---|---|
| 关注 | 开发阶段的需求与协作 | 开发与运维的协同与自动化 |
| 核心实践 | 短迭代、回顾、自组织 | CI/CD、基础设施即代码、监控 |
| 关系 | 敏捷「写」软件,DevOps「交付并运行」软件;二者互补 |
敏捷持续交付的理念(每个迭代产出可用增量)需要 DevOps 的 CI/CD 管线才能真正「频繁上线」。无 DevOps 的敏捷,迭代产物常堆在「待发布」队列里。