软件分析与设计笔记 03:Agile 与 Scrum:迭代、角色与产出物

从「三周做完交付,客户说这不是我要的」讲起,说清瀑布式与迭代式的根本差别,Scrum 的三个角色和三种产出物,一个 sprint 里四次固定活动各自在解决什么问题,以及敏捷里最常见的几个误解。

学习#敏捷开发#Scrum#项目管理#学习笔记

本文是 《软件分析与设计笔记》 系列的第 3 篇,共 28 篇

这是我在学习软件分析与设计时整理的系列笔记。概念部分是我按自己的理解写的,场景与图示都是自己编、自己画的,参考的主要是敏捷宣言与 Scrum Guide 这类公开资料。理解有偏差的地方欢迎指出。

贯穿案例:片区家电维修派单系统。这一篇讲这套东西怎么被组织起来做出来 —— 尤其是一个 backlog 该怎么排。

0 一次典型的返工

一个五人团队花了三个月,按需求文档一路做完,交付会上片区经理王姐看了十分钟说:

「我要的不是这个。」

团队做的是一套「全片区排期总览」—— 40 位工程师 × 7 天的大表,一屏铺满颜色。他们完全按当初的需求文档做的,文档里写的就是「能看到所有工程师的排期」。

此时回头看,问题不在团队不够努力,而在反馈来得太晚。三个月里团队一直在按自己理解的文档推进,没有任何一个时刻能让小林或王姐指着屏幕说「对,就是这个」或者「不是这个」。

迭代式开发要解决的正是这个问题:把一次长达数月的赌注,拆成一串为期一到四周的小赌注,每次都能拿到真实反馈。

1 瀑布式与迭代式的根本差别

1.1 六个维度的差别

瀑布式(Waterfall)迭代式(Iterative / Agile)
需求何时确定开工前尽量确定完逐步细化,允许高优先级先定
反馈周期项目末期才有真实反馈每个迭代都拿到反馈
风险暴露时间晚,往往来不及改早,代价小
变更的成本越晚越贵相对平缓
适合的场景需求稳定、合规性强的项目需求不确定、需要探索的项目
主要风险做完了才发现没用容易被理解成「不需要计划」

这张表里最该记住的是第三行:迭代不是让风险消失,而是让风险早点暴露。

本例里这个差别有一个具体的对照:如果按瀑布式做,王姐会在第三个月末才知道「总览页不好用」;如果按迭代式做,团队第一周就能做出一个只含「今日待派单 + 3 个候选人」的粗版,让小林实际用两天 —— 那两天里她一定会说「我还要看距离」,于是第一周就改了。

2 Scrum 的三个角色

2.1 三个角色各自负责什么

Scrum 的三个角色、sprint 循环与三种产出物:角色是 Product Owner、Scrum Master、Development Team;sprint 循环依次是 Sprint Planning、Daily Stand-up、Sprint Review、Sprint Retrospective;产出物是 Product Backlog、Sprint Backlog、Increment

  • Product Owner(产品负责人) —— 代表业务方,负责决定「先做什么后做什么」。他的核心工作产出是产品待办清单的排序。
  • Scrum Master(敏捷教练) —— 负责流程本身:移除障碍、保护迭代节奏、把流程跑歪的地方纠正回来。
  • Development Team(开发团队) —— 自组织团队(self-organizing team),也是跨职能团队(cross-functional team)—— 自己决定「怎么做」,也自己承诺每个迭代能完成多少。

2.2 一个高频误解

这里有个高频误解:Scrum Master 不是项目经理。项目经理对结果负责、分配任务;Scrum Master 对流程负责,不分配任务,团队自己决定怎么做。这个区别在「谁能决定工期」这件事上体现得最明显。

本例里还有个更实际的难点:谁是 Product Owner?王姐(片区经理)是业务方,但她并不清楚每天的操作细节;小林懂细节,但她不能决定预算。

常见的做法是王姐当 PO,但她的排序意见主要来自小林。这个安排要写在明面上,否则会出现「王姐说要先做看板、小林说先做派单」这类冲突,而团队无从判断该听谁。

3 三种产出物

3.1 三者的分工

产出物是什么谁负责本例
Product Backlog(产品待办清单)全部需求条目,按价值排序,永远不完整Product Owner07 篇那 10 条用户故事 + 后续新增
Sprint Backlog(迭代待办清单)本次迭代承诺要完成的条目,以及拆解出的任务开发团队第一轮只挑第 3、5、8 三条
Increment(增量)本次迭代结束时真正可用的那部分产品开发团队「能看排期 + 能派单 + 能申请配件」的可用版本

3.2 为什么 backlog 是「活的」

关键点是清单的属性:product backlog 是一个持续变化的列表,而不是一份签过字的需求文档。需求分析的工作并没有在项目开始时做完,而是随着每次迭代往前滚动。

本例里这条会真实发生:第一轮做完「看排期 + 派单」之后,小林一定会提出新条目 —— 比如「我要能一次改派三个单」。这一条在做第一轮时根本想不到,但它是真的需求。如果按瀑布式,它只能进「第二期」;按迭代式,它进 backlog 排队即可。

3.3 两个辅助指标

团队通常还会用两个辅助指标观察节奏:velocity(速率)用来估算一个迭代大概能完成多少,burndown chart(燃尽图)用来展示剩余工作量随时间的变化。这两个指标是团队自我观察用的,不该拿去考核个人 —— 一旦变成考核指标,数字就会失真。

顺带解释一个后面的伏笔:backlog 里的条目通常就写成用户故事(user story) 的形式 —— 这是笔记 07 的主题。

4 一个 sprint 里的四次活动

4.1 四次活动分别在回答什么

活动回答什么问题常见时长本例
Sprint Planning这个迭代我们做什么?靠什么完成?1–2 小时(每两周)定「本轮做看排期 + 派单 + 申请配件」
Daily Stand-up昨天做了什么、今天做什么、卡在哪?15 分钟「供应商接口联调卡住了,需要对方测试环境」
Sprint Review做出来的东西业务方认不认?1 小时让小林当场派三个单
Sprint Retrospective我们的流程哪里该改?1 小时「需求变更太随意,下轮要先进 backlog」

4.2 Review 与 Retrospective 的分工

Review 和 Retrospective 最容易混。一句话区分:Review 看产品,Retrospective 看流程。Review 上讨论「这个功能对不对」,Retrospective 上讨论「我们为什么老是延期」。

本例里这个区别有个具体的体现:Review 上小林说「候选人按距离排序不对,我要按技能匹配度排」—— 这是产品问题;Retrospective 上团队说「这轮需求变了三次,因为王姐直接找了开发」—— 这是流程问题。

两个问题如果混在一起讨论,结果是产品改了但流程照旧,下轮还会重演。

这四个活动都有时间盒(timebox):到点就结束,不因为讨论没完而延长。这不是形式主义 —— 时间盒保证的是迭代节奏本身不被侵蚀。

5 「完成」的定义

5.1 为什么需要一份完成定义

一个迭代结束时,什么算「完成」?如果不事先说清楚,就会出现「90% 完成」这种状态(而 90% 完成约等于没完成)。

所以团队需要一份 Definition of Done(完成定义),例如:

  • 代码通过评审并合并;
  • 有自动化测试,且全部通过;
  • 部署到测试环境并验证过;
  • 文档更新到最新。

这份清单是团队自己定的,但它必须是能被检验的。「基本上做完」不属于完成定义。

本例里这份清单还要多加两条,因为派单系统的特殊之处:

  • 小林能在测试环境里用真实数据派出 10 个单,不报错;
  • 供应商接口超时的情况下,流程能降级继续(对应 15 篇那条降级策略)。

第一条的价值在于:它把「用户能不能用」写进了完成定义。否则会出现「功能都做完了,但小林说没法用」这种情况。

6 几个常见误解

  • 「敏捷就是不用写文档」 —— 敏捷宣言说的是「可工作的软件重于详尽的文档」,不是「不要文档」。该留的设计说明还要留,只是不写没人看的那种。本例里那张数据字典必须留,因为开发天天要看;
  • 「每日站会是汇报进度」 —— 站会是团队对齐用的,不是给上级汇报的。一旦变成汇报,问题就会被藏起来;
  • 「迭代就是加班冲刺」 —— 迭代的节奏应该是可持续的。靠加班填坑,下一轮坑会更深;
  • 「敏捷等于没有计划」 —— 迭代背后有清晰的优先级和验收标准,只是不假装能预知三个月后的一切。

7 这套东西和需求分析的关系

7.1 渐进明细

前面几篇讲的需求分析,在敏捷语境里并没有消失,而是改变了发生的时间:

  • 高优先级的条目要在进入迭代前细化到可开发的程度(用例、字段、边界条件);
  • 低优先级的条目可以先只写一句话;
  • 每一次 Review 都是一次需求验证的机会。

这种「先粗后细、按需细化」的做法通常叫渐进明细(progressive elaboration)。它对应的风险是:如果永远不细化,backlog 就变成一张愿望清单。

本例里第一轮的细化程度可以做个对照:

条目进第一轮前细化到为什么
看排期活动图 + 字段清单 + 三条验收标准本轮要做,必须能开发
派单活动图 + 顺序图 + 五条测试本轮要做,而且最核心
申请配件活动图 + 领域模型相关部分本轮要做
评价服务一句话本轮不做,先占位
配件预测一句话 + 06 篇那张分析表本轮不做,但数据前提要先确认

注意最后一行:虽然本轮不做,但「数据能不能拿到」这件事要提前确认 —— 因为 06 篇发现「只有 8 个月数据、做不到 Predictive」。如果等做的时候才发现,时间就白排了。

这就是「渐进明细」里最容易被忽略的一条:细化的不只是需求,还包括「前提是否成立」。

本节自测

  1. 迭代式开发和瀑布式开发,风险暴露的时间点有什么不同?这个差别为什么重要?
  2. Scrum Master 和项目经理的职责差别是什么?
  3. Product Backlog 和 Sprint Backlog 分别由谁维护?内容有什么不同?
  4. Sprint Review 和 Sprint Retrospective 分别在讨论什么?本例中各举一个例子。
  5. 为什么需要一份「完成定义」?没有它会出现什么典型问题?
  6. 本例里「谁是 Product Owner」为什么需要一个明确的安排?不明确会出什么问题?
  7. 「渐进明细」里最容易忽略的是哪一条?本例怎么体现?

参考答案

  1. 瀑布式在项目末期才暴露风险,迭代式每个迭代都暴露。重要是因为越晚改代价越高 —— 本例按瀑布式王姐第三个月末才知道总览页不好用;按迭代式第一周就能让她用上粗版并当场改(§1.1)。
  2. 项目经理对结果负责并分配任务;Scrum Master 对流程负责、不分配任务,团队自己决定怎么做。区别在「谁能决定工期」上最明显(§2.2)。
  3. Product Backlog 由 PO 维护(全部条目、按价值排序、永远不完整);Sprint Backlog 由开发团队维护(本次承诺的条目 + 拆解出的任务)(§3.1)。
  4. Review 看产品,Retrospective 看流程。本例:Review 上小林说「候选人要按技能匹配度排」是产品问题;Retrospective 上团队说「这轮需求变了三次,因为王姐直接找了开发」是流程问题(§4.2)。
  5. 因为不写清就会出现「90% 完成」这种状态(约等于没完成)。这份清单必须能被检验,「基本上做完」不算(§5.1)。
  6. 因为王姐是业务方但不清楚操作细节,小林懂细节但不能决定预算。需要明确「王姐当 PO,排序意见主要来自小林」,否则会出现「王姐说先做看板、小林说先做派单」而团队无从判断(§2.2)。
  7. 最容易忽略的是 「前提是否成立」也要一起细化。本例:配件预测本轮不做,但 06 篇已经确认「只有 8 个月数据、做不到 Predictive」—— 这个结论要提前有,否则等做时才发现,时间就白排了(§7.1)。

术语表

术语中文一句话解释
Agile敏捷以短迭代、持续反馈应对需求不确定的开发方式
Waterfall瀑布式按阶段线性推进、需求前期尽量定完的开发方式
ScrumScrum一种具体的迭代式框架,规定了角色、活动与产出物
Product Owner产品负责人代表业务方决定需求优先级的人
Scrum Master敏捷教练对流程负责、移除障碍的人,不分配任务
Development Team开发团队自组织、跨职能、自己承诺工作量的团队
self-organizing team自组织团队自行决定分工与做法的团队
cross-functional team跨职能团队具备完成交付所需全部技能的团队
sprint迭代一个固定长度的开发周期,通常 1–4 周
timebox时间盒给活动设定固定时长,到点结束
sprint planning迭代计划会决定本次迭代做什么、怎么做
daily stand-up每日站会15 分钟的进度与障碍同步
sprint review迭代评审会向业务方演示成果并收集反馈
sprint retrospective迭代回顾会回看流程本身并决定改进项
product backlog产品待办清单按价值排序的全部需求条目
sprint backlog迭代待办清单本次迭代承诺完成的条目与任务
increment增量迭代结束时真正可用的产品部分
Definition of Done完成定义团队约定的「算完成」的检验清单
progressive elaboration渐进明细需求先粗略记录、按优先级逐步细化
velocity速率团队每个迭代能完成的量,用来辅助估算
burndown chart燃尽图展示剩余工作量随时间变化的图

© 2026 HuanYu Blog

记录技术,也记录思考