敏捷和瀑布流是两种主流的项目管理框架,关于它们的讨论已经持续了几十年。在实际工作中,大多数团队不会纯粹地遵循某一种——他们根据项目情况,混合使用两种方法的元素。但理解核心区别,才能让这种混合是有意识的选择,而不是随机拼凑。
这篇文章解释两种方法各自的本质是什么、各自在哪里真正好用,以及如何判断你的项目更适合哪种。
什么是瀑布流?
瀑布流是一种顺序式的项目管理方法。工作按照固定的阶段依次推进——通常是:需求、设计、开发、测试、部署——每个阶段必须完成才能开始下一个。
名字来自水从台阶上依次流下的画面:一旦经过某个阶段,就不再回头。需求在设计开始前就要全部确定。设计完成才能开始开发。需求阶段没有代码,开发阶段不接受新需求。
瀑布流项目的特征:
- 项目开始时制定详细计划
- 范围固定,提前确定
- 以完成各阶段来衡量进度
- 项目结束时一次性交付
规划和追踪瀑布项目的核心工具是甘特图——将每个阶段和任务排布在项目时间线上的可视化图表。
什么是敏捷?
敏捷是一种迭代式方法。工作被拆分成短周期的循环,叫做 Sprint(通常一到四周),每个 Sprint 产出一个可用的产品增量。需求在与利益相关方持续协作中演进,团队根据反馈随时调整方向。
敏捷不是最后一次性交付,而是在整个项目过程中持续交付小的、可用的产品片段。每个 Sprint 结束时有评审会,利益相关方看到已完成的内容,并对下一步施加影响。
敏捷项目的特征:
- 范围灵活,持续演进
- 短周期规划
- 以可运行的软件来衡量进度
- 全程持续交付价值
敏捷团队的核心工具是 Sprint 规划看板和看板(Kanban)——持续更新的可视化系统,展示什么在计划中、什么在进行中、什么已完成。
关键区别
规划方式
瀑布流: 所有规划都在前期完成。项目范围、时间线和预算在工作开始前就已确定。这让瀑布流更容易估算——你在开始之前就知道要做什么。
敏捷: 规划是持续的。团队一次只规划一个 Sprint,未来工作只有粗略的待办列表。这让总成本和时间线更难预测,但允许计划随着构建过程中的发现而调整。
应对变化
瀑布流: 变化代价很高。项目中期增加新需求,往往需要修改设计,继而导致开发返工。这套流程明确设计为尽早锁定需求,并对其进行保护。
敏捷: 变化是被预期的。迭代结构意味着来自用户、市场、测试的新信息,可以在下一个 Sprint 中被吸收。变化的成本不会像瀑布流那样层层叠加。
交付方式
瀑布流: 项目结束时一次交付。利益相关方在项目完成前看不到可用的软件,这意味着后期发现的问题修复成本极高。
敏捷: 持续交付。利益相关方在每个 Sprint 结束时都能看到可用的软件,反馈因此是持续的,问题能早早浮出水面。
风险
瀑布流: 风险集中在需求阶段的前端。如果需求本身是错的,整个项目就建立在错误的基础上,而错误直到测试或交付才会被发现。这是瀑布流的失败模式:准时按预算交付了完全符合规格的产品,却完全不是用户真正需要的东西。
敏捷: 风险分散在每个 Sprint 中。一个错误的假设在一个 Sprint 周期内就会被发现,而不是一年之后。失败模式也不同:如果缺乏纪律,敏捷团队可能失去方向,不断迭代却没有清晰的进展。
团队结构
瀑布流: 团队通常按职能组织——设计团队、开发团队、QA 团队——依次交接工作。项目经理负责跨团队协调。
敏捷: 团队通常跨职能——一个小组同时包含设计、开发和 QA,全程协作。团队从概念到交付都对产品负责。
文档
瀑布流: 文档详尽且前置。需求文档、设计规格和测试计划都是流程的产出物。
敏捷: 文档轻量且即时。可运行的软件是核心产出物,文档只在帮助理解时才写,而不是用来驱动工作。
瀑布流更合适的场景
瀑布流在某些情况下确实是正确的选择:
固定范围、固定合同。 如果你在按规格书交付——政府合同、固定价格项目、法规要求——瀑布流的顺序结构与约束条件吻合。合同固定的情况下,敏捷的范围灵活性反而是负担。
问题清晰、方案成熟。 如果你做过这类系统,需求稳定,技术选型已知,瀑布流的前期规划不会浪费时间在不成熟的迭代上。规划的成本换来可预期性,是合算的。
硬件和实体交付物。 当你在建造有物理依赖关系的东西——制造业、建筑、有硬件约束的嵌入式系统——往往无法像软件团队那样自由迭代。制造中途修改电路板设计,和修改软件功能完全不是同一个量级。
受监管行业。 医疗、航空、金融系统等受监管领域,往往要求详细的前期文档和顺序签字作为合规的一部分。敏捷在这些场景也能运作,但需要适配。
敏捷更合适的场景
需求不明确或持续演变。 如果你还不确定在做什么——不确定市场的新产品、还在摸索用户需求的内部工具——敏捷的迭代方式让你在做的过程中学习。把不完全理解的东西的需求提前锁死,正是瀑布流项目按时按预算做出了错误产品的原因。
有真实用户的软件产品。 用户反馈改变了什么更重要。需求阶段看起来必不可少的功能,可能在第三个 Sprint 发现的某个东西面前变得无足轻重。敏捷创造了响应这一点的结构。
快速变化的竞争环境。 当市场在变、快速交付价值比完美的前期规划更重要时,敏捷的持续交付给团队提供了更快的反馈循环。
长期且高度不确定的项目。 项目持续时间越长,外部世界在此期间发生变化的可能性越大。在一个快速变化的行业里做两年的瀑布项目,是在赌两年内什么重要的事都不会改变。敏捷把这个风险分散开来。
现实:大多数团队两者兼用
纯粹的敏捷和纯粹的瀑布都是理想状态。大多数团队实际上是混合使用的:
- 带瀑布节点的敏捷: Sprint 开发,但有固定的发布截止日期和定义的发布范围
- 融入敏捷实践的瀑布: 顺序阶段,但在每个阶段内嵌入用户测试和反馈循环
- 不同项目用不同方法: 同一个组织,对合规驱动的基础设施项目用瀑布,对产品开发用敏捷
真正有用的问题不是"我们用敏捷还是瀑布"——而是"我们的项目哪些部分需求明确,哪些不明确?"需求稳定的地方用顺序规划,需求不明确的地方用迭代规划。
各自对应的工具
瀑布流: 核心规划工具是甘特图——将每个阶段、持续时间和依赖关系排布在项目时间线上。
敏捷: 核心工具是看板(持续流动)和 Sprint 规划看板。
总结
| 维度 | 瀑布流 | 敏捷 |
|---|---|---|
| 规划 | 前期完整规划 | 持续增量规划 |
| 范围 | 固定 | 灵活 |
| 交付 | 最终一次性交付 | 全程持续交付 |
| 变化 | 代价高 | 被预期并管理 |
| 风险 | 集中在后期 | 分散在每个 Sprint |
| 适合 | 需求明确、合同固定 | 需求演变、市场不确定 |
没有哪种方法天生更优越。正确的选择取决于你对自己在做什么的理解程度、需求的稳定性,以及项目期间外部环境可能发生多大的变化。