文章

使用特性团队(Feature Team)

敏捷团队更有利于关注价值交付,对这一主题产生了相反的矢量。实际上对于敏捷团队的组织,几乎普遍接受的方式是围绕特性的。如下图所示。
scrumcn1352366254

特性团队方式的优点也非常明显:团队可以形成对实际领域和系统使用方式的专业知识,而且通常可以加速任何特性的价值交付。这种方式的开销更少,因为在对特性的实现中,多支团队不必来回传递待办事项条目。而且在团队之间的相互依赖少很多,计划工作与执行也更简练。

与核心技能对应于技术栈中某一层形成对比的是,特性团队的核心能力对应于某个特性(或特性集)。团队的待办事项被简化了,在任何时间只有一到两个特性,这样必然可以促进高增值特性的快速交付!

也有一些其他作者支持以特性为焦点的方式。例如Highsmith写道:

基于特性的交付意味着工程团队将构建最终产品的特性。

当然,这并不是说团队本身必然是“按特性组织”的,因为所有工程团队到了最后都是为最终产品构建特性,虽然他所说的可能含有某种合理推断。其他人—包括Larman和Vodde,更直接(而且坚决)地提倡特性团队作为组织敏捷团队的最佳方式,他们指出:

特性团队是一种长期、跨职能的团队,能够一个接一个地完成一些端到端的顾客特性。其优点包括提高价值产量、方便知识学习、简化计划、降低浪费….

Larman和Vodde还认为应该“避免构件团队”。不管怎样,他们也指出了采取特性团队方式的若干难题,包括需要更宽泛的技能和产品知识、对代码的同时访问、共享设计职责、以及在实现复用和基础设施工作中的困难,而且还有围绕边界的组织对齐造成某些团队成员错位的可能性。

有时候界限是模糊的

即便有着这样的建议,我们也必须承认特性和构件都是抽象概念,它们的界限并不明确,一个人设计的特性可能是另一人的构件。而且有时候,单一特性最好被实现为独立的、面向服务的构件。

举例来说,TradeStation Securities构建一个在线交易系统,其中“记录”是一个关键的交易者功能,由少量集中的敏捷团队一起在“记录”功能上工作。表面上看起来这是特性团队的一个良好示例,因为记录是该系统的主要特性。

在开发新的在线交易功能时,如“外币兑换交易”(Forex),必须添加新的记录功能。然而驱动这一新记录功能的是一些主要构件,如流化数据、账户管理、与外汇交易市场的交换接口。是应该把新特性的价值流描述为“通过专门的记录功能完成与外汇交易市场的所有交易”吗?如果是,很明显应该产生垂直特性流,而且可能要重新组织团队,从各构件团队吸纳某些成员并针对外汇交易市场的交易创建新的垂直特性团队。或者是否把新特性描述为“Forex交易”加“Forex绘图”?这种情况下的绘图团队是否已经有了适当的组织?这种记录功能是特性集还是构件呢?或者是二者?对这种状况起个什么名字真的重要吗?

即使认为其称谓是可以明确的,特性团队总是最佳选择吗?Keith Black(TradeStation Technologies的副总裁)写道:

在线交易要求在许多不同层次上有着相当深度的专业技能和行业知识,我们没有办法对来自所有构件领域的成员合理地形成特性团队。

因此,在我们向敏捷转型中,我们首先是围绕构件团队进行组织,在成熟之后,我们现在针对特殊情况组建特性团队。虽然特性团队在推动一个计划直到完成中是出色的,但是某些情况下它们就不合理。例如,有二十支特性团队而且他们都依赖某个公共构件,比如一个时间关键型的联机事务处理引擎,让20支不同的团队都参与到这一关键构件是不明智的。相反,可以选择使其中的变更由单一团队控制,由该团队代理20支团队的需要,并通过对具体特性作出修改确保其他团队不危及他们不了解的区域。

向特性团队倾斜

鉴于每种方式的优点与缺点,答案并非一直都那么明显。但是考虑到敏捷对直接价值交付的焦点,可以向特性团队适当倾斜。正如Mike Cottmeyer指出的:

我倾向于从特性团队开始,只在必须的情况下才转向构件…但这种决定是基于特定状况的。

为了做出这种决定,将必须分析你们的技术多样性…你们系统设计的如何…使用什么工具来管理代码基…你们团队的规模与技能…团队是如何定位以及分布在哪里…还包括你们的基础设施自动化的品质。

必须认真研究要把特性团队分解到什么程度…到了某种规模特性团队会瓦解。伸缩到这样的程度是我们必须现在处理的吗,还是可以等待?

Scrum中的工作量估算

当我们提起工作量估算的时候,我们会碰到同样的问题,我们如何来做估算?有什么方法可以遵循呢?如何估算才更准确?我对某个功能做了估算,但它超出了预计的开发时间,为什么?

Scrum团队已经做了很严肃的承诺去完成开发工作(可以交付的产品),必须要深思熟虑才可能成功。成功的工作里昂估算的几个步骤:

估算每个团队成员有多少时间可以在Sprint中被使用:

估算每一个团队成员在当前的Sprint中有多少时间可以被使用时Sprint计划会议的一个非常非常重要的部分。需要注意的是如果一个开发人员估算一个任务8小时可以完成,这个并不等于他一天可以做完。事实上,没有人会做在座位上一动不动,工作8个小时,参加会议的时间,午饭时间,意外的打断,看email, 接听电话等等都要考虑进去。

刚刚开始实践Scrum的人经常会问“是否需要预留一些时间来做bug修改?”。我当然不会准备两个Sprint,一个用来做产品backlog的开发,一个做bug修改。bug修改的时间应该是每天例行的时间,也就是说这是我们每天例行工作的一部分,扣除这些例行的时间,剩下的才是你可以承诺给Sprint的时间。1. 估算每个成员有多少时间花在和Sprint相关的工作上。

Sprint可用的工作时间= 平均日工作时间 – 其他活动.
平均日工作时间 = e.g. 8 hours
其他活动: = e.g. 4 hours
Emails and Phone : 1 Hrs
午饭: 1 Hrs
读Blogs/bbs : 0.5 Hrs
Bug fixes : 1.5 hrs
Sprint可用的工作时间= 4 hours

为产品Backlog中的每个项目估算工作量: 

有完成过类似工作经验的人来做相关的估算会更好一些,有历史数据可供参考。最好是让相关的有类似工作经验的人参与进来做适当的估算。经过几个Sprint之后,团队成员就会找准自己的位置,知道自己可完成多少工作。这也会使估算更为准确一些。

2. 所有的团队成员都要参与工作量估算的游戏。

3. 从Product Backlog中挑出排列好优先级的项目,要能够完全理解它,知道应该做什么,有哪些依赖、复杂度,风险等。如果需要的话让Product Owner做相关的澄清。
4. 细化理解后的项目为2-16 h/m工作量的小任务。

5. 为每个小的任务估算时间.

关于工作量估算的一些注意点:
1.一旦已经承诺要递交的Sprint的工作任务,团队成员不应该在受到外界的干扰,比如指派新的工作任务,或改变工作任务等。

2. 余下的工作将被移动到下个Sprint中。
3. 为了达到目标,团队必须是自我组织,并且团队成员之间是透明的。

故事点是工作量,而非复杂度

是工作量,而不是复杂度
有个客户问我,“我的团队什么时候才能完成这个项目?”我已经被问过千百次类似的敏捷项目管理问题了。
但却从来没人问过我,“开发这个项目我的团队要费多少工作量去进行思考?”
客户,老板,顾客以及干系人只会关心一个产品要耗时多久,却不会去理会要交付该产品我们得多么殚精竭虑地思考,除非这些必要性的思考会带来时间或成本风险。 Read more

敏捷的心跳

一直以来,如何在Scrum中预测团队可以在一个Sprint交付的工作量都是一项挑战。很多人把一定的工作量定义为一个故事点来尝试建立一个基 准,而没有留意团队的实际工作方式。例如,有些团队把对一个有8个字段的数据表的CRUD操作定义为一个故事点数。这种方法实际上是行不通的,因为团队里 面的每个人都有不同的经验、专长和特质。每个团队都拥有自己的特质,每个团队完成同一项任务所需要的时间也不一样,所遇到的困难也不尽相同。总而言之,对 于一个由人类组成的团体而言,也许会有生产效率的统计标准,但是永远不会有可预测的而且精确的工业标准。这个时候,我们所面临的问题是:是制定一个计划, 然后为了合同或者公司利益按照计划勇往直前,还是先制定一个目标,然后一直跟踪团队的效率成长来不断调整项目计划,为团队创造良好而且高效的工作环境,最 终令客户满意更好? Read more

一切在于交付

许多传统的瀑布型项目依赖一套称为“挣值”(Earned Value)和“进度执行指数”(SPI)的计算来显示他们的项目是否在按计划进行。这些指标可能带有误导性,并经常掩盖掉某些进度耽延。论及进度、范围和财政预算,比起传统“挣值”和“进度执行指数”为瀑布项目提供的,Scrum为项目利益相关者提供了更加准确的预测。 Read more

创建一个好的Sprint Backlog 的8个小贴士

Sprint Backlog是Scrum 团队在当前Sprint必须完成的任务清单,根据Sprint backlog ,Scrum团队在Sprint的最后交付一个带有增量功能的软件。创建Sprint Backlog发生在sprint计划会议的第二部分,每一个团队成员都需要参加。真正的重视这个过程是更好地了解Sprint中团队应做哪些工作,以及更好的做Sprint的计划的基础。尽管这样,许多团队仍然为这个事情挣扎。我希望如下这些建议对他们有点帮助。 Read more