Scrum

老板和走路人的游戏(boss walker)- 敏捷自组织团队游戏

这个游戏一共分两轮

第一轮

  • 两人结对
  • 一人是老板,另一人是走路人
  • 老板负责给出指令:走,停,左,右,快,慢
  • 走路人必须遵守老板的命令
  • 老板负责保证走路人在60秒内完成60步
  • 走路人负责数步子
  • 老板可以命令走路人,但不能有身体接触,也不能帮忙
  • 不能站在原地,必须结对行动
  • 必须在房间内

第二轮

  • 老板也要参与到走路的过程,即老板也变成走路人
  • 走路人自己负责找出如何走60步
  • 限定时间30秒
  • 其他规则同第一轮

总结

这个是一个非常简短而有力的游戏,快速地体会命令控制和自组织团队的差别。总结的时候可以结合Richard Hackman写的《Leading Teams》里面授权矩阵,介绍自组织(自管理)团队的职责,以及自指导和自统治团队是什么样子的。

敏捷估算--Scrum系列

本文谈及的均为Scrum中的估算行为,这些方法不是Scrum原创的。

为什么要估算

谈估算,我想先从为什么要做估算谈起。

每次在我的培训课上,学员们会给出各种各样的答案。比如为了估计成本、为了设定发布日期、为了知道什么时候可以做完、为了……。但我认为估算最重要的目的是为了

达成共识

如果没有进行估算,关于需求或任务会有一些假设或者背景被忽略掉。因此在Scrum中,估算是一个集体行为,而不是某个专家拍拍脑袋出来的结果。

如何做估算

估算的方式分为两大类,绝对估算和相对估算。绝对估算耗时更长,并且需要依赖上下文,最后的结果也会产生较大误差。而与之相对,相对估算更快,结果容易达成一致。Scrum中对产品列表(product backlog)的估算常常使用的就是相对估算,估算单位为故事点(没有意义的单位)。【注意:不要将故事点和小时数做一一对应!】最常用的方法就是计划扑克。

计划扑克是由斐波那契数列组成的一串数字扑克,如下图:

crispdeck

对产品列表条目(product backlog item)进行估算的步骤,简单描述如下:

  1. 首先估算需要开发团队所有成员参加,每个人手里有一套上图的扑克
  2. 取出一个产品列表条目,产品负责人进行描述
  3. 每个团队成员根据自己的理解,拿出一张代表估算值的扑克并扣着放在桌面上。(这个过程不要讨论,不要说话,不要把你的结果告诉其他人,具体原因参见百度百科“锚效应”)
  4. 所有成员出牌完成后,大家同时亮出自己的结果
  5. 接下来邀请估算最小的成员解释一下原因,还要邀请估算最大的成员解释一下原因。讨论过程中注意遵守团队礼节。
  6. 解释完毕后,重复步骤3到步骤5,直至最后大家的估算结果一致。

相对估算还有另外一种方法,称为三角估算法。

  1. 从产品列表中挑选一个较小但不是最小的条目,比如条目A,并设定它的估算值为3 (故事点)
  2. 从产品列表的最上面取出一个条目B,和A进行对比。如果比A大,放在A的右边。如果比A小,放在A的左边。如果和A差不多大小,放在A的下面。
  3. 继续从产品列表取出条目C,重复步骤2,分别和条目A与条目B进行比较。直到为条目C找到合适的位置。
  4. 重复步骤2和步骤3,直至所有的产品列表条目都完成放置。
  5. 比较一下A左边的产品列表条目,估算值为2还是1,把左边的所有条目估算值设置为2或1.同样的把A右边的条目,按列标明估算值。
  6. 最后的结果如下图:

123

Scrum系列:

产品列表梳理(需求梳理)--Scrum入门基础系列

产品列表梳理会议是Scrum中非常重要,而很容易被忽略的一个会议。说它重要,是因为Scrum开始之前就需要有准备就绪的输入,这个输入就来自于产品列表梳理会议的结果,即初始的产品列表。而对于刚开始转型敏捷的团队,往往会忽略掉产品列表梳理会(需求梳理),从而造成迭代计划会时间过长,或者无法准时开始迭代等等问题。要想解决这个问题,需要首先明确为什么在迭代开始之前要进行梳理会议,以及谁需要参加这个会议,在这个会议都有哪些活动等。

产品列表梳理会议,是迭代就绪的很好的指示,即只有产品列表准备好了,才可以进入迭代。另外,梳理会议是由产品负责人发起或负责,可以召集开发团队参与,也可以只有相关的开发团队成员或相关的利益干系人参与。

产品列表梳理会议的内容可以总结为如下几个字:增删改。首先需要明确一点的是产品列表不是固定不变的,它是可以随着新需求的出现而变化的(即好的产品列表符合DEEP原则,参加博文产品待办列表和用户故事)。

  1. 增:那么当出现新需求的时候,就需要增加一条产品列表条目,并且针对新的条目也需要符合良好用户故事的标准(INVEST)。
  2. 删:某条需求如果已经不再需要,或者市场条件变化后该需求就可以删除了。
  3. 改:产品列表的修改还可以分为以下几类:
    • 重新估算用户故事大小、
    • 重新排用户故事的顺序、
    • 用户故事拆分等。
    • 调整发布计划

Scrum入门基础系列:

Scrum工件-Scrum入门基础系列

Scrum工件主要包含一下3种:

  1. 产品Backlog
  2. Sprint Backlog
  3. 产品增量

产品Backlog

在Scrum中,主要由产品负责人[参见Scrum入门基础系列之Scrum角色]整理和维护产品Backlog。产品Backlog是Scrum中维护需求的主要工件,也是做好Scrum的第一步。一个好的产品Backlog,是要符合DEEP原则的,即,产品Backlog是详略得当的(Detailed Appropriate),涌现的(Emergent),估算的(Estimated)和排序的(Prioritised)。详情参考参考之前我发的博文“产品Backlog和用户故事的原则”。

一般来讲,产品Backlog里面都可能包含哪些内容呢?新特性、改进项、缺陷修复、文档需求等。

Sprint Backlog

Sprint Backlog主要由挑选的当前Sprint要完成的产品Backlog条目,以及根据这些条目进行拆分后的任务组成的,在Sprint Backlog中还有一个很重要的东西就是当前Sprint的目标,团队根据这个目标以及产品Backlog的排序来进行挑选。 Sprint Backlog的内容是由团队来决定的,具体的工作方法和实现方式,也是团队自己来决定的。在这一点上,充分体现了团队的自组织能力。

产品增量

产品增量是Scrum中非常重要的工件,因为产品增量才是最终交付给客户的内容。因此每个Sprint团队必须交付产品增量,以符合如下原则:

  • 交付的产品增量必须是高质量的。也就是说每个产品增量是潜在可以发布的。
  • 交付的产品增量符合团队的完成定义(Definition of Done)
  • 产品负责人(或客户)能够接受产品增量

另外,产品增量也是团队进展的一个标识。开发团队通过不断地交付产品增量,给团队本身和利益相干人以信心,促使产品最终发布。团队进展还有其他常用的标识是燃尽图和任务板。一般使用燃尽图和任务板时,是为了使当前的进度公开给更多的其他团队或干系人。

完成定义,指的是当产品增量完成的时候,必须是团队成员共同理解的完成,而不会出现歧义。并且产品增量需要是高质量的,潜在可以发布的。也就是说,当产品负责人要发布当前的产品增量的时候,马上可以发布出去。完成的定义,是团队根据团队当前的情况,共同协商制定的,共同同意并理解的。还有,完成的定义也不是一成不变的,随着时间的推移,团队倾向于更加严格的定义,比如把更多的内容添加到完成定义中。

Scrum入门基础系列:

Product Backlog Refinement

Here I would like to talk about product backlog refinement meeting, including what activities should be in this meeting, who should join this meeting and why we need refinement meeting.

Why to have product backlog refinement meeting

As the figure above, it occurs during sprint for product backlog refinement meeting, and normally no more than 5% total time of sprint. E.g during sprint 1, Product Owner (PO) will conduct refinement meeting for sprint 2 and sprint 3. So refinement is like beam of a car, normally we should choose low-beam model, otherwise we would like to watch something far away ahead, we need to switch the headlights to high-beam model. Refinement is the high-beam model for team. (Thank Daniel Teng for above metaphor)

敏捷会议-Scrum会议-Scrum入门基础系列

Scrum会议包含Sprint计划会、每日例会、Sprint评审会、Sprint回顾会。下面分别介绍这几个会议,按照一个简单模板进行介绍:

WHY、WHAT、WHEN、WHO、HOW,即为什么要有这个会议,这个会议的输入和输出是什么,什么时间开这个会,谁来参加,如何开好这个会议。

Sprint计划会

WHY

Sprint计划会是为当前Sprint做计划的会议。

WHAT

Sprint计划会的输入为产品Backlog,最新的产品增量,团队的能力和开发速率;输出为Sprint Backlog和Sprint目标。

WHEN

Sprint计划会议发生在Sprint开始的时候。对于一个4周的Sprint,计划会时间应该小于8小时,2周Sprint,计划会时间小于4小时,以此类推。

WHO

Scrum团队(产品负责人、开发团队、ScrumMaster)都应该参加Sprint计划会。

HOW

Sprint计划会议有两种方式。

方式一:传统的两段式会议 - 第一部分由产品负责人和开发团队一起决定要完成什么(What),第二部分由开发团队来决定如何完成(How)。

方式二:循环式 - 1 产品负责人和开发团队选择产品Backlog最上面的那个用户故事,2 开发团队根据团队能力和以往的速率决定是否可以完成这个用户故事, 3 如果可以完成,那么拆分用户故事为任务,否则选择结束Sprint计划会议。4 重复上述1,2,3直到团队无法承诺更多的用户故事。

每日例会

WHY

团队每天同步信息

WHAT

团队会根据每日例会的情况,1. 调整燃尽图(如果有的话) 2. 调整Sprint Backlog或Sprint Backlog中的任务。

WHEN

强烈建议每天固定时间和地点开始

WHO

开发团队、ScrumMaster、产品负责人(可选)、其他利益干系人(可选)

HOW

团队围成圈,面对彼此,回答如下3个问题:1. 从上次例会到现在我完成了什么? 2.从现在到下次例会我将会完成什么? 3. 有什么障碍或问题?在整个每日例会过程中,只有猪(隐喻投身Scrum的角色)才可以发言。

Sprint评审会

WHY

在Sprint结束前,产品负责人接收或拒绝开发团队的Sprint目标。团队检视和调整开发的产品增量。

WHAT

输入为Sprint目标和Sprint Backlog,输出为潜在可交付的产品增量和调整的发布计划。

WHEN

Sprint结束前

WHO

开发团队、ScrumMaster、产品负责人、其他利益干系人(建议邀请,尤其是有关联工作的)

HOW

Sprint评审会是一个非正式会议,即这个会议上不需要准备幻灯片来进行完美的表演,团队需要展示出他们的工作成果。另外产品负责人应该不是第一次看到Sprint的成果,也就是说很可能在平时,开发团队每完成一个用户故事,产品负责人就已经评审一个。最后不过是一个仪式,可以让团队拥有成就感。

Sprint回顾会

WHY

Sprint结束前,团队一起为开发流程做出改进而努力。

WHAT

输入为各类主观和客观数据,输出为行动计划,有可能放在专门的改进Backlog,也可能放在下一个Sprint的Backlog中。

WHEN

Sprint结束前,一般在Sprint评审会之后。

WHO

开发团队、ScrumMaster、产品负责人。(一般不建议经理参加)

HOW

  1. 设置环境
  2. 收集数据
  3. 产生洞察
  4. 确定行动
  5. 结束会议

具体细节请参考《敏捷回顾》一书(Agile Retrospectives)

Scrum角色-Scrum入门基础系列

Scrum中定义有三个角色

  • 产品负责人
  • ScrumMaster
  • 开发团队

另外还会提到两个常见角色(经理和项目经理)在Scrum当中的职责。

产品负责人

职责

  • 产品负责人最大的职责是为产品的投入产出比(ROI)负责,即最大化团队的投入产出比。在Scrum当中,由于Sprint是时间盒(即时间是固定的),且成本(软件开发中人力成本是最大的成本,其他忽略不计)也是固定的,那么最大化投入产出比就是如何做出最有价值的产品增量。
  • 创建产品愿景
  • 创建与维护产品Backlog(插播一句,Jeff Patton同学很不喜欢Backlog这个词,听起来产品还没有开始开发就落后了,如果谁有更好的词我们可以一起交流)
  • 主持产品Backlog优化会(增加、删除、修改或细化用户故事,并根据需要进行排序)
  • 协调干系人与开发团队之间的沟通
  • 参加团队的Scrum会议
  • 在Sprint计划会上和团队一起决定当前Sprint的开发内容
  • 接受或拒绝团队的产品增量
  • 决定何时发布

所需技能

根据上述的职责,作为产品负责人需要以下技能:

  • 业务能力 - 产品负责人首先要对产品以及所在行业有较深的认识和理解。这样才能根据业务价值来对不同的需求进行排序,或者对产品的整体方向有感觉。
  • 技术能力 - 虽然产品负责人不必是技术专家(SME),但懂一些技术对于需求排序、拆分、优化是有很大帮助的,特别是在参加Sprint计划会的时候,可以很容易的理解开发团队。
  • 决策力 - 产品负责人接受或拒绝产品增量,那么对于产品负责人他就要有授权,可以决策哪些是可以接受,哪些要拒绝。以及决定什么时候发布,什么特性优先级高等等重要事项。
  • 沟通协调能力 - 产品负责人需要有很强的沟通协调能力,因为他是干系人与团队之间的润滑剂。

谁来担任

简单的回答,可以完成上述职责并拥有上述技能的人都可以来担任产品负责人。较常见的是产品经理担任。我见过的还有项目经理、架构师等不同岗位转型为产品负责人的。

ScrumMaster

职责

  • Scrum权威 - ScrumMaster是团队中最熟悉和了解Scrum框架的,并可以根据实际情况对团队进行指导。
  • 辅导团队和产品负责人 - 如果产品负责人或团队不知道该怎么办,ScrumMaster需要提供相应的辅导、培训或支持。
  • 保护团队 - 在一个Sprint中,ScrumMaster要保护团队不受打扰,可以专注于Sprint目标和承诺。
  • 移除障碍 - ScrumMaster要善于发现障碍,并可以帮助团队移除障碍,包含但不限于个人障碍,团队障碍以及组织级的障碍。
  • 变革大师 - ScrumMaster不仅要在团队内实行Scrum,还要能够影响并促进组织或整个公司内的变革。

所需技能

  • 热情 - 首先ScrumMaster需要是一个有热情(Passion)的人。热爱并喜欢自己的工作,充满激情,并且可以感染周围的人。
  • 主动学习 - 学习是永无止境的,作为ScrumMaster,需要主动的学习,补充自己的短板,刻意的练习,成为真正的master(大师)。
  • 善于提问 - ScrumMaster不一定是所有问题(尤其是技术上的)的大师,但他一定要能善于启发团队思考并行动。这往往是通过提问来实现的。好的问题可以让团队清晰的认识到自己。
  • 耐心 - 对于变革要有耐心,可以容忍团队犯错误。让团队在错误中学习并成长。
  • 协作沟通 - ScrumMaster需要和团队沟通,了解个人障碍和团队障碍。也需要和团队外的干系人沟通,来排除障碍或了解他们的期望。总体说,ScrumMaster需要较强的沟通能力(和产品负责人类似)。
  • 公开透明 - Scrum的三大支柱之一就是透明。因此作为ScrumMaster也需要公开透明,不仅仅是团队的进展要透明,所有的沟通交流也需要是透明的。只有信息透明,才能产生信任与尊重。详情可以参考《克服团队协作的五种障碍

谁来担任

常常问道的一个问题是,ScrumMaster是全职工作吗,可以兼职吗?对于一个新组建的团队,我强烈建议全职的ScrumMaster。因为有很多的事情需要ScrumMaster来做,参考上面的职责。如果是成熟的团队,ScrumMaster可以兼职,但不建议既做ScrumMaster又做开发工作;但可以同时是两个团队的ScrumMaster,因为工作类型是相似的。

Scrum框架-Scrum入门基础系列

Scrum入门基础系列之Scrum框架

读过几本Scrum书的人,想必对于Scrum框架都可以如数家珍,如Scrum的3个角色,5个会议,3个工件。在展开这些内容之前,我想先介绍一下Scrum的价值观以及敏捷宣言。

敏捷宣言[1]

我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:

个体与互动    胜于    流程与工具

可工作的软件    胜于    详尽的文档

客户协作    胜于    合同谈判

响应变化    胜于    遵循计划

也就是说,尽管右项有其价值,我们更看重左项。

Scrum价值观[2]

专注:一段时间内只专注于少数几件事情。Stop Starting, Start Finishing。团队的能力(精力)是有限的,在有限能力和有限时间范围内,专注于最有价值的事情,以取得更好的成果。

勇气:我们需要勇气去迎接各种挑战。

公开:在团队中公开进展(Progress),即可视化、透明,这样可以很容易的暴露出风险问题和障碍。并且透明也是尊重、信任的基础。

承诺:自组织团队开始的时候做出承诺,并在迭代期间尽全力完成履行承诺。

尊重:团队是坐在一起的,长期稳定的,这有助于加深彼此的尊重和了解。

Scrum框架

Scrum框架是不是银弹,也不是灵丹妙药。实行Scrum不需要团队成员都是精英。因为Scrum只是快速的把问题暴露出来,以至于我们无法忽视和忍受它。Scrum框架是一个团队的流程框架,由自组织的团队进行改进完善。该框架主要包含角色,会议和工件三大部分。

角色

产品负责人(Product Owner) - Scrum中对产品负有全部责任的唯一人。产品负责人需要创建和维护产品Backlog,并需要参加必须的Scrum会议,如Sprint计划会、Sprint评审会等。详情可以期待下一篇博文(Scrum角色)。

ScrumMaster - 这个角色是Scrum框架提出的新角色。他需要对整个Scrum框架非常熟悉,还需要是一个变革大师。在Scrum中,ScrumMaster没有授权,而还需要完成很多的工作,如移除风险等。

开发团队 - 开发团队指的是跨职能的自组织团队。开发团队中可能包含开发人员、测试人员、用户体验工程师、数据库专家等。开发团队负责完成端到端的工作,从而在Sprint结束的时候可以完成产品增量。

会议

Sprint计划会 - Sprint计划会主要分为2部分:做什么和如何做。Scrum团队一起决定他们要做什么,以及如何构建、测试承诺的工作。在计划会议过程中,产品负责人的重要职责之一是解释澄清模糊的需求。最后的产出为Sprint目标和Sprint Backlog。详情敬请期待后续博文。

每日例会(Daily Scrum) - 每天的15分钟站立会议。Scrum团队一起回答三个问题:从上一次例会到现在我完成了什么(重点在于是否完成承诺,以及暴露风险)?从现在到下一次例会我计划完成什么(重点在于承诺)?有什么风险或障碍(尽早暴露问题风险)?

Sprint评审会(Review) - 在Sprint评审会上,产品负责人接受或拒绝团队完成的用户故事。(注:产品负责人应该在平时的工作中进行评审,而不是只在评审会上进行这些工作)这是一个非正式的会议,准备时间不要超过1小时。(注:但必备的准备工作还是需要的)

Sprint回顾会(Retrospective) - Scrum团队一起检视和调整他们的工作方法,以达到成熟高效的自组织团队。

产品Backlog梳理会(Product Backlog Refinement) - 由产品负责人组织协调干系人或团队一起进行产品Backlog梳理,包含但不限于新增需求,删除需求,修改需求,拆分需求,改变需求顺序等等。

工件

产品Backlog - Scrum中需求存放的清单,常见的格式为用户故事,也可以包含其他类型的内容,如缺陷、用例、史诗故事等。

Sprint Backlog - 由Sprint中承诺的故事和相应的任务组成。在Sprint过程中,团队每天都会更新Sprint Backlog,在每日例会上讨论并同步有关Sprint Backlog的信息。

Scrum起源-Scrum历史-Scrum入门基础系列

Scrum入门基础系列之Scrum起源

说起Scrum就不得不提Scrum之父 - Jeff Sutherland和Ken Schwaber,Jeff在1993年结合他的工作实践创建了Scrum框架,1995年Ken在OOPSLA会议上第一次发表Scrum的论文。此后Scrum之父的两位分别撰写过多篇文章,并联合发布了《Scrum Guide》(Scrum指南)。有关具体的Scrum起源可以参考我之前的一篇博文 - Scrum起源

说到Scrum的起源,让我们再来看看Scrum的3大支柱:Inspect Adapt Transparent。

其中transparent(即透明性)为基础。离开了透明性(公开)的话,团队成员之间就没有信任和尊重的基础,也很容易发生更多的问题。

另外两个支柱经常一起提到,Inspect and Adapt,即检视与调整。检视与调整组成一个循环。检视,就是查看当前的可交付产品、流程等一切可见的内容;然后根据检视的结果进行反思,下一步如何调整工作计划、流程等等。说到这里,有没有觉得很耳熟呢?检视与调整,PDCA(Plan Do Check Act)环。计划、执行、检查、处理。是的,这就是著名的戴明环,是美国的质量大师在1950年提出的质量改进循环。

然而,PDCA环是戴明原创的吗?让我们往前推20年,看看1930年另一位美国的质量大师沃特 休哈特提出一个PDS(Plan Do See)的概念,和PDCA是不是很相似呢?是的,没错。戴明就是从休哈特的PDS中进一步发扬光大而提出的PDCA环的。

再一次发散一下,这让我想起我读过的一本书《偷师学艺》,书中开篇第一句就是“没有什么是原创的”。大师就是读很多很多书,然后能够吸收消化这些内容,把它们变成自己的再写出来。

怎么样,你有什么感想呢?

Scrum入门基础系列:

Scrum抛球游戏介绍

游戏规则

  • 一组或者多组都可以(每组建议5-9人——你懂得)
  • 从哪个人开始,到那个人结束
  • 不允许把球传给相邻的人
  • 球必须有滞空时间
  • 所有人都参加
  • 每个迭代2分钟
  • 迭代后有1分钟做回顾和下一迭代的估算
  • 一共5个迭代(可以酌情删减)

游戏手册

  • 介绍游戏(2分钟)
  • 介绍游戏规则(2分钟)
  • 团队准备时间(2分钟)
  • 估算能传递几个球
  • 开始第1个迭代
  • 回顾和下一个迭代的估算(1分钟)
  • 重复4次
  • 总结(15分钟)

计分用的表格

ball-point-game

总结的要点

  • 在游戏里发生了哪些事情?
  • 哪个迭代是最好的?为什么?
  • 哪个地方能体现出Scrum工作流的好处?

洞察(Insight)

  • Scrum工作流=PDCA(戴明环)
  • 系统都会有一个固有速度(类似于系统有上限、瓶颈)
  • 只有挑战是可行的时候,才会有工作流

游戏规则的例子

ballpointgame-rules

游戏手册的例子

ballpointgame-playbooks

戴明环

deming

我在QCon 2013北京上带领大家做的抛球游戏

抛球游戏的创始人链接bor!sgloger