本章节将介绍 Scrum 的基础知识,以及对比 Scrum 与瀑布流式开发,也将介绍 Scrum 中的 3 个角色、3 个工件和 3 个活动。
首先介绍 Scrum 与传统瀑布流式开发之间的区别。
瀑布式开发通常花费数个月时间规划(Plan)产品,然后再花费数个月时间研发(Build)产品,接着测试(Test)产品、评审(Review),最终部署(Deploy)产品。
重点是,如果市场需求或技术环境发生变化,此时研发出的产品很可能无法满足市场需求,瀑布式开发在遇到这些变化时,将出现很多问题。首先,产品规划必须先于后续工作完成,在绝大部分案例中,规划环节结束时,还不能完全理解项目,但开发已经完成。通常情况下,整个项目必须回溯到规划阶段,然后从头再来。否则,研发人员将因不理解产品规划,而受到批评。研发工作完成时,这种情况将出现多次。比如研发工作已经完成,进行产品测试时发现问题,就得重新开发,有时甚至需要重新规划产品。在接下来的步骤中,也将多次出现同样的问题。这很可能导致产品发布时间滞后,短则数月,长则数年。
使用 Scrum(一种敏捷开发实现)时,该流程被分解成多个更小的部分。首先,我们为开始构建最小特性集合(min feature set)进行足够的规划,然后开发规划的东西。接下来,测试和评审该小特性集合,直到准备发布。该循环完成时,将得到可发布的产品。该流程通常只需要 1 - 3 周的时间。然后不断地重复该流程,以减少每次规划过程中从规划到开发到测试的时间。我们只执行完成下次增量发布的详尽规划,最终得到多个被称为 Sprint 的增量发布,一个 Sprint 通常需要 1 - 3 周的时间,只需不断重复 Sprint,直到产品功能齐全。有时,可能在第二个或第三个或第四个或甚至更久的 Sprint 后,最终塑造出产品。但不管怎么说,最终拥有一个潜在的可发布产品。
在 Scrum 中,团队正常工作需要三个关键角色。首先,产品负责人(Product Owner)负责阐明产品所需的功能。Scrum Master 是团队的负责人,负责帮助团队尽其所能地完成工作,组织会议和保障其它工作。Scrum 团队(Scrum Team)由开发、测试、文案以及其他帮助构建产品的人员组成,团队成员通常扮演多种角色,有时开发人员可能最终完成测试,或者测试人员可能最终完成文案。无论哪种方式,团队都在努力地完成产品。
Scrum 使用三种文档化的工件(Artifact)。第一种是产品待办事项列表(Product Backlog),产品负责人在其中创建可能被纳入产品的功能的优先级列表。用户故事(User Story)是一种描述功能集合的方式,它遵循「作为一个___,我需要___,以便___。」的格式。这种表述用户故事的方式,使产品负责人可以给团队指定合适的详细程度,以评估任务大小。最高优先级的用户故事将进入 Sprint 待办事项列表(Sprint Backlog),其余的被评估大小,并且被提交到下个 Sprint 中。燃尽图(Burndown Chart),在 Sprint 期间,展示 Sprint 待办事项列表中的任务的完成进度。当燃尽图曲线接近 0 时,意味着本次 Sprint 即将完工。
Scrum 由三种会议(或讨论)组成。Sprint 计划会(Sprint Plan Meeting)是产品负责人、Scrum Master、团队碰头的会议,用于讨论用户故事和估算工作量。每日例会(Daily Scrum)是我们熟知的站立会,在该会议中,整个团队简述工作进度,并且讨论是否有任务需要搁置或需要帮助。Sprint 临近尾声时,将举行评审会(Review)和回顾会(Retrospective),在该会议中,团队向产品负责人演示开发完成的工作,然后团队讨论是否有需要改进的地方。
接下来回顾 Scrum 的工作流程。
从产品待办事项列表开始,它是产品负责人建立可能纳入产品的创意和功能的列表的地方。产品负责人对该列表进行优先级排序,并且将排名靠前的条目带给团队讨论。团队、产品负责人和 Scrum Master 在 Sprint 计划会上讨论高优先级的用户故事,决定将哪些用户故事纳入到下个 Sprint。Sprint 计划会议的输出是 Sprint 待办事项列表,它是被提交到下个 Sprint 的用户故事列表。基于 Sprint 计划会议的讨论,整个团队和产品负责人必须对每个用户故事所涉及的东西有深刻的理解。Sprint 是 1 - 3 周的时间盒,Sprint 待办事项列表中承诺的工作将在该时间盒内被完成。在 Sprint 期间,每日例会用于团队交流他们已经完成什么任务,正在做什么任务,以及遇到的问题。Sprint 的产出是潜在的可发布产品。可发布意味着产品负责人决定是否发布,或者是否在发布前添加新功能。在 Sprint 结束时,举行 Sprint 评审会和 Sprint 回顾会。在 Sprint 评审会中,团队向产品负责人演示案例。在回顾会中,团队一起反思工作中可以改进的地方。每个 Sprint 都重复该工作流程。
在 Scrum 中,研发流程被分为多个 Sprint。每个 Sprint 的工作流程如下:
Sprint 遵循如下规则:
名称 | 描述 |
---|---|
产品负责人(Product Owner) | 产品负责人负责最大化产品以及团队工作的价值。 产品负责人是管理产品待办事项列表的唯一责任人。产品待办事项列表的管理包括: 1. 清晰地表达产品待办事项列表条目 2. 对产品待办事项列表中的条目进行排序,最好地实现目标和使命 3. 确保团队所执行工作的价值 4. 确保产品待办事项列表对所有人可见、透明、清晰,并且显示 Scrum 团队的下一步工作 5. 确保团队对产品待办事项列表中的条目达到一定程度的理解 产品负责人可以亲自完成上述工作,也可以让团队完成。但是产品负责人是负责任者。 产品负责人是一个人,而不是一个委员会。产品负责人可能在产品待办事项列表中体现委员会的需求,但想改变条目的优先级必须说服产品负责人。 为保证产品负责人的工作取得成功,组织中的所有人员都必须尊重其决定。产品负责人所作的决定在产品待办事项列表的内容和排序中要清晰可见。任何人不得要求团队按照另一套需求开展工作,开发团队也不能听从其他人的指令。 |
团队(Team) | 团队负责在每个 Sprint 结束时,交付潜在可发布的产品增量。只有团队成员能创造增量。 团队有如下特点: 1. 团队是自组织的,没有人(即便 Scrum Master 也不可以)告诉开发团队如何将产品待办事项列表变成潜在可发布的功能 2. 团队是跨职能的,团队作为整体拥有创造产品增量所需要的全部技能 3. Scrum 不认可团队成员的头衔,无论承担哪种工作,他们都是开发者。无一例外 4. 团队中的每个成员可以有特长和专注领域,但是责任归属于整个团队 5. 开发团队不包含如测试或业务分析等负责特定领域的子团队 团队规模: 团队最佳规模是小到足以保持敏捷性,大到足以完成重要工作。少于 3 人的团队没有足够的交互,因而所获得的生产力增长也不大。小团队在 Sprint 中可能受到技能限制,从而导致无法交付可发布的产品增量。大于 9 人的团队需要过多的协调沟通工作,大型团队将产生太多复杂性,不便于经验过程管理。产品负责人和 Scrum Master 不包含在此数字中,除非他们参与执行 Sprint 待办事项列表中的工作。 |
Scrum Master | Scrum Master 的职责包括: 1. 保证团队资源被完全利用,以及高产出 2. 保证各角色良好协作 3. 解决团队开发中的障碍 4. 作为团队和外部的接口,屏幕外部对团队成员的干扰 5. 保证开发过程按计划进行,组织 Daily Scrum、Sprint 评审和计划会 |
名称 | 描述 |
---|---|
产品待办事项列表(Product Backlog) | 产品待办事项列表存在(并且演化)于产品的整个生命周期,它是产品的路线图。 1. 使用用户故事描述的需求列表 2. 产品负责人对该列表进行优先级排序 3. Sprint 结束时,需要更新优先级 |
Sprint 待办事项列表(Sprint Backlog) | 定义 Sprint 目标,明确具体需要完成的任务。 管理 Sprint 待办事项列表的规则如下: 1. 团队成员自己挑选任务,而非指派任务 2. 对于每个任务,每天需要更新剩余的工作量估算 3. 每个团队成员都可以修改 Sprint 待办事项列表,增加、删除或修改任务 |
燃尽图(Burndown Chart) | 燃尽图是展示剩余任务数量的趋势图。图中 Y 轴代表剩余工作量,X 轴代表 Sprint 的工作日。 |
增量(Increment) | 增量是 Sprint 完成的产品待办事项列表,以及之前所有 Sprint 产生的增量的总和。在 Sprint 结束时,新的增量必须是完成的,这意味着它必须可用,并且达到 Scrum 团队“完成”的定义标准。无论产品负责人是否决定真正发布它,增量必须可用。 |
阻碍清单(Blocks List) | 列举团队内部及与团队相关的所有阻碍项目进度的问题。Scrum Master 需要确保所有问题都已分配,并且可以得到解决。 |
名称 | 会议内容 | 召开阶段 | 时长 | 参与人员 | 输入 | 输出 |
---|---|---|---|---|---|---|
产品待办事项列表梳理会议 (Release Planning) | 包含详细的需求分析,拆分大事项,估计新事项,以及重新估计已有事项 | 接近 Sprint 中部或结尾时 | Sprint 工作量的 10% | 1. 团队 2. 产品负责人 3. Scrum Master 4. 其它理解需求并且能给予团队帮助的人 | Product Backlog | |
Sprint 计划会议 (Sprint Plan Meeting) | 产品负责人和团队一起对 Product Backlog 进行评估。 会议流程如下: 1. 确定迭代目标(Sprint Goal) 2. 产品负责人介绍需要评估的 Product Backlog 中的内容,团队对 Product Backlog 进行评估 3. 确定日程安排:起止时间、演示日期、每日例会时间地点 4. 确定 Sprint Backlog:由产品负责人和团队讨论决定,每个 Product Backlog 都要有团队给出的时间及责任人(包括编码、测试、代码评审、会议、新技术应用、文档等要素) 5. 确定如何演示的产品,以及获得共识的“完成”标准 | 在每个 Sprint 开始前召开 | 2 - 4 小时 | 1. 团队 2. 产品负责人 3. Scrum Master | Product Backlog | Sprint Backlog |
每日 Scrum 会议 (Daily Scrum) | 在团队成员之间更新信息和进行协调。 会议内容包括: 1. 自上次会议以来,完成了哪些工作? 2. 在下次会议之前,哪些工作将被做完? 3. 遇到了什么障碍? | Sprint 开始后每天召开 | 最长 15 分钟 | 1. 团队 2. 产品负责人 3. Scrum Master 通常在场,但要保证团队自己主持会议 | Sprint Backlog | 1. 每日更新看板 2. 更新剩余工作量(燃尽图) 3. 如遇障碍,召开进一步的跟进会议 |
Sprint 评审会议 (Sprint Review Meeting) | 按照 Sprint 计划会议确定的演示日期,向产品负责人和其他成员演示 Sprint 的成果。 会议流程: 1. 团队成员按照产品待办列表,介绍工作成果 2. 产品负责人评估、核实是否与最终产品目标一致 | Sprint 结束前 1 - 2 天 | 时间盒为对应 Sprint 中的每一周为 1 个小时 | 1. 团队 2. 产品负责人(可邀请其他利益相关人参加) 3. Scrum Master | 待交付的软件 | 对当前 Sprint 的结果和整个产品的开发状态达成共识 |
Sprint 回顾会议 (Sprint Rectrospective Meeting) | 分析 Sprint 的成功经验和所遇到的障碍。 会议流程如下: 1. 比较预估的和实际的燃尽图执行情况 2. 团队中的每个成员回答:a)成功经验是什么?b)有什么需要改进的地方?c)哪些方面需要在下个 Sprint 改进 3. 产品负责人根据讨论明确改进之处及负责人,更新团队总结,为后续项目实施提供经验教训 | Sprint 结束后 | 时间盒为对应 Sprint 中的每周为 45 分钟 | 1. 团队 2. 产品负责人 3. Scrum Master | 包含相关改进以及负责人名单的会议纪要 |