为什么瀑布模型会「失速」

项目启动会上,需求文档写得满满当当,评审通过、排期冻结,一切看起来井井有条。三个月后交付,用户却指着屏幕说:这不是我想要的。这不是个例,而是瀑布模型最典型的失效场景——它假设需求在开工前就能被完整、准确地描述清楚,并且在整个开发周期里保持稳定。一旦这个假设不成立,越往后走,返工的代价越大。

瀑布模型把开发切成需求、设计、编码、测试、交付这几个阶段,每个阶段必须「流」到下一个阶段才开工。它的优点是阶段清晰、文档齐全、便于按合同验收;缺点同样明显:反馈回路太长。用户在项目末期才第一次看到可运行的软件,此时任何需求偏差都已经渗透进了设计、代码和测试用例。

瀑布模型最大的问题不是「慢」,而是把「验证」放在了整条链路的尽头。软件开发的不确定性越高,这种「先做完再验收」的模式就越危险。

于是行业开始寻找一种能缩短反馈回路的方法:把大块交付拆成小块,每一小块都完整地走一遍需求、设计、开发、测试,并在每个循环结束时拿到反馈。这,就是敏捷的出发点。

本文核心知识点
  • 反馈回路迭代式交付把验证前移,让偏差在低代价阶段被纠正。
  • 敏捷宣言四条价值观与十二条原则,是方法的源头而非仪式清单。
  • Scrum用固定长度的迭代、明确的角色与工件,把「敏捷」变成可执行的流程。
  • 用户故事以「作为…我想要…以便…」的结构承载需求,并配上验收标准。
  • 度量速率、燃尽图与在制品限制,用来暴露问题而不是考核个人。
敏捷开发示意:三列迭代看板、循环箭头与围坐协作的团队剪影组成的蓝色扁平插画
迭代的本质是一圈圈更短的反馈回路:看板让工作可见,循环让改进有节奏。

敏捷宣言与四条价值观

2001 年,十七位开发者在雪鸟城写下了《敏捷宣言》。它没有给出任何具体流程,只提出了四条价值观,并强调「左项虽重要,但更看重右项」:

  • 个体与互动 高于流程与工具——工具是为协作服务的,别让流程压过沟通。
  • 可工作的软件 高于详尽的文档——文档仍要写,但可运行的交付物才是进度的唯一证据。
  • 客户协作 高于合同谈判——与需求方持续对齐,比一次性签死需求更有效。
  • 响应变化 高于遵循计划——计划是导航而非轨道。

四条价值观之下还有十二条原则,其中几条对工程实践影响最深:尽早、持续地交付有价值的软件;欢迎需求变更;以自组织团队为中心;以及技术卓越与良好设计——这条常被忽略,但它恰恰是敏捷能否持续的前提。没有良好的工程实践,迭代只会加速积累技术债务。

需要特别提醒的是:敏捷不等于「没有计划」,也不等于「取消文档」。它反对的是没有反馈的过度计划和为了文档而文档。一份只为应付评审、从没人回看的说明书,才是敏捷真正想淘汰的东西。

Scrum 的角色、事件与工件

Scrum 是目前落地最广的敏捷框架,它用一组清晰的角色、事件与工件,把抽象的价值观变成每天可执行的节奏。三者相互咬合:事件由角色主导,工件在事件中被检视和调整。

类别组成作用
角色产品负责人 / Scrum Master / 开发团队分别负责价值排序、流程守护与交付实现
事件迭代计划会 / 每日站会 / 迭代评审 / 迭代回顾在固定节奏里完成计划、同步、演示与改进
工件产品待办列表 / 迭代待办列表 / 增量承载需求、当前计划与可交付成果

迭代通常固定为两到四周,长度一旦确定就不轻易改变——固定节奏本身就是一种纪律。每个迭代结束时必须产出一个可交付的增量,否则迭代的反馈价值就被架空了。

一个常见误区是把 Scrum Master 当成「项目经理」。Scrum Master 不分配任务、不催进度,他的职责是移除障碍、守护流程,让团队能够自组织地完成工作。同样,产品负责人也不是「需求传声筒」,他要对价值排序负责:先做哪件事、为什么先做它。

用户故事与需求拆解

需求要进入迭代,先要变成团队能估算、能验收的小块。最常用的载体是用户故事,它用一句话把「谁、要什么、为什么」讲清楚,并配上可验证的验收标准:

# 用户故事的标准结构
作为 <角色>
我想要 <某个功能>
以便 <获得某种价值>

# 示例
作为 会员用户
我想要 用手机号一键登录
以便 不必记住复杂的密码

# 验收标准(Acceptance Criteria)用 Given-When-Then 描述
Given 用户已注册且手机号可用
When  用户在登录页填写手机号并获取验证码
Then  输入正确验证码后成功进入首页
And   验证码错误时提示「验证码不正确」并允许重试

写用户故事时,最容易犯的错误是把技术方案写进需求里。用户故事应该描述问题与价值,而不是实现方式;真正的技术设计放到后面的架构阶段去做。

一个用户故事如果无法在一个迭代内完成,就要继续拆分。常用拆法有按数据流拆、按业务规则拆、按操作步骤拆,以及先做「最薄的一条竖切」——把从界面到数据库的首尾链路打通,再逐层加厚。

迭代计划与看板管理

迭代计划会要回答两个问题:这个迭代做什么,以及团队大概能做完多少。前者由产品负责人依据价值排序决定优先级,后者由团队依据历史速率共同承诺。承诺必须由团队自己给出,管理者代拍的数字通常只是美好愿望。

任务进入执行后,看板是最直观的可视化工具。一个基本的看板至少包含「待办 / 进行中 / 待验证 / 已完成」几列,并为「进行中」设置在制品(WIP)上限。WIP 上限的意义在于:限制并行,逼迫团队先完成再开始,避免大量任务同时半途而废。

# 一个看板状态的简化数据结构
board:
  todo:        ["登录页表单校验", "短信服务接入"]
  in_progress: ["验证码接口联调"]        # WIP 上限 = 2
  review:      ["登录接口单元测试"]
  done:        ["数据库用户表建模"]

wip_limit:
  in_progress: 2
  review:      2

看板要「真实」。如果卡片被压着不动,不要急着把卡片挪到「已完成」来美化进度,而要在每日站会或回顾中把阻塞暴露出来——可视化工具的价值,恰恰在于让问题无法被藏住。