写点什么

怎么才能保证你的敏捷团队不会被指标毁掉

2013 年 11 月 01 日

我认为敏捷社区要改变评测敏捷团队是否成功的方法。我们收集指标以及从这些指标中获取信息的方法实际上妨碍了我们做出能用的软件,而这才是最重要的东西。

强推个体指标有时会导致过于关注其他人,影响团队的协作。这会歪曲我们要评测的内容,摧毁我们的真实意图。

在我看来主要有两个问题:

观察者效应: 观察者效应是指对一个流程进行观测可能会影响它的输出。比如告诉一个团队你会密切关注他们的速度,该团队可能会为了加快速度而过度估算他们的工作内容。这在处理 故事点 时尤其危险,因为根本就没有依据可以判断估算是否有效。

上图源自此处

尽管上面这幅漫画中的情况很有可能发生过,但并不是我理想中观察者效应的例子。我给你们讲一个我很久之前认识的技术支持工程师,我们叫他“杰森”好了,因为他的名字就是杰森。杰森是一位优秀的技术支持,在别人遇到特别困难的问题时他会施以援手,一般在客户打来第一个电话时他就能正确地把问题解决掉,而且客户对他的评价很高。问题是杰森接电话的时间太长,而这一指标对管理层来说非常重要。后来经过几次会议和一次考核之后,杰森明白他必须把时间缩短,否则就只能另谋高就了。很快几周就过去了,杰森的呼叫时长在整个支持团队中排到了前5 名。他是怎么做到的呢?如果不是我有一天接他班时提前到了一个小时,他可能永远都不会跟人讲起其中的秘密,那天我发现他原来是接了电话之后马上就挂掉了。

这挺有点儿意思,如果杰森的呼叫时长没有他的真实绩效重要,他就不会干那种事。以呼叫时长为指标评测他对产出产生了负面影响。除了这个糟糕的指标之外,即便没碰到过杰森这么极端的情况,我们也都遇到过只想尽快让你挂上电话的技术支持。问题是你的团队为了让自己的数值更好看挂了哪些电话?

路灯效应: 路灯效应是指我们人类倾向于寻找更容易的答案,而不是真实的信息。比如计算代码行数就很简单,但代码行数并不能告诉我们程序的质量如何,也不能表明程序提供的功能性甚至效率怎么样。

上图源自此处

我想起以前曾经工作过的一个团队,我们做了几个产品,每个产品的质量标准都不一样。当时的情形是“产品A”的质量标准要难得多,而产品B、产品C 或产品D 的质量标准不会是什么太大的问题,除非管理层在下次审查临近时改变了对这些产品质量的要求。

问题是“质量”这个概念有点模糊,真的不太好评测。而错误率就容易测量得多,因此那些做产品A 这个质量标准比较高的产品的人,在面对审查时就更加不利。那这份工作最终是由谁来完成的呢?大部分是实习生、临时工或做外包的那些人,或者其他任何人,总之没人愿意参与。

事实证明,即便是容易测量的错误率,也不能给出什么有价值的信息,因为出现错误的次数更多是由产品而不是员工决定的。我们反而赶走了几个不错的新员工,丢掉了客户,整个团队的士气也受挫了,因为他们工作时考虑更多的是在如何避免错误,而不是如何构建产品。

因为这两个都不是软件开发的例子,所以接下来我们把这些概念放到一些常见的、你所熟悉的“敏捷”指标上。容易测量的指标有哪些?

编写单元测试的数量: 大多数敏捷开发者都会写很多单元测试;测试驱动的开发创建的测试更多(两者都能带来更好的代码质量)。所以用一个开发人员编写的测试数量来评测他的生产率肯定是没错的!实际上观察者效应会把这个指标灭掉。告诉开发人员会用他们编写的测试数量来评测他,他们肯定会在不考虑质量的情况下写很多测试。我们不是为了交付测试代码;我们的目标是交付可用的软件。不管在什么时候,我对测试的态度都是宁缺毋滥。

个人的速度:观察者效应再一次把这个变成了一个糟糕的指标。如果开发人员知道他的绩效决定了他的个人等级,也知道只能通过他专职的工作得分,那实际上就是在打消他为团队做贡献的积极性。他被放在一个非常不敏捷的情境中,他要跟自己的团队竞争,而不是为团队做贡献。

在理想情况下,敏捷团队是相互协作的,彼此之间有互动,相互讨论和评审他们做的几乎所有事情。这有助于构建优质软件,快速解决问题,但如果把个人的生产率从团队里剥离出来,则几乎不可能形成这种层次的互动,所以不要做这种尝试,这样只会伤害团队做出优质软件的能力。

团队的速度: 这是Scrum 中最容易被误解的指标之一。一个团队的速度是独一无二的。不能拿来跟其他的团队比较。比如团队A 估计某项工作的工作量为一个50 点的sprint,而团队B 估计的sprint 相同,不过是150 点。如果两个团队都成功完成了sprint,那么团队A 的速度是50 点,而团队B 的速度是150 点。哪个团队效率更高?都一样。他们完成的工作是一样的。因为这个指标鼓励团队捏造估值,以影响他们规划下次sprint 的能力,所以这个指标特别邪恶。如果团队不能正确规划sprint,那整体软件的发布就有被延迟的危险。我之前专门写过一篇博客讨论 Scrum 团队的速度,可供参考。

好吧,大才子,我们应该用什么指标?
问得好,我们用交付的可用软件评测团队生产率。我们要评测的是实际产出,而不是贡献因素。这种方法更敏捷,因为团队可以自由选择能够成功构建软件的方法,而不是可以得到更高指标得分的方法。这也更合理,因为我们能带到银行去的就是能用的软件(当然是在卖给他们之后)。

那么新指标究竟有哪些?

交付的价值: 这个指标需要产品所有者参与。让他给出每个故事的价值,能体现这个故事对利益相关者的影响程度。你可以用实际的金额或某种明确的数字表示这个价值。在每次 sprint 完成后,你会得到一个数值,表明从产品所有者的角度来看你交付给客户的价值是多少。

这个指标不评测绩效,而是评测影响。理想情况下,产品所有者会按 backlog 中的顺序从高到低给出每个条目的价值,这样每次 sprint 所交付的价值就会尽可能的最大化。对于明确限定了范围的项目,一开始的 sprint 会有非常高的交付价值,随着不断向 backlog 中深入,sprint 交付的价值会逐级递减。有时会因为开发成本的原因消除再运行一次 sprint 的可能,通常这时开发团队就可以开始去做新的产品了。

交付的及时性: 有时我会听到有人跟我说他们公司推广敏捷开发方法的计划失败了,因为他们不能明确产品的交付日期。我不会认同这种说法。敏捷团队应该可以明确确定软件的具体交付日期。交付时可能会有些故事还没实现,但那通常是些低价值故事,对客户的影响不大。也就是说团队的速度应该是稳定的,如果速度加快或变慢,也应该是逐级变化的。如果不同 sprint 之间出现剧烈的速度波动,则很难做出长期规划。

接下来是我们的指标:如果团队预测接下来的 sprint 能完成 5 个故事,那他们完成 5 个故事后能挣到 2 分。如果他们交付了 4 个故事,或者他们交付提前的时间不到 2 天(根据你的情况选择天数),那他们能挣到 1 分。如果他们交付提前的时间超过 2 天,或只交付了 5 个中的 3 个,则不得分。在季度末,或一次发布结束,或年末时,团队预测 sprint 的准确程度就是评判他们的标准。

所以我们评测的是交付给客户的价值以及交付软件的及时性。只有这两个跟收钱有关的真实指标。

关于作者

肖恩·麦克休是 Axosoft 的一位敏捷大师, 敏捷开发工具 OnTime 的创建者。他的客户是那些想要为开发团队实现一个敏捷项目管理软件方案的公司,其中既有刚接触敏捷的,也有经验比较丰富的。他有机会接触到世界各地的敏捷团队,他们都有自己的困难和解决办法。他喜欢在公司博客上跟敏捷社区分享自己的想法和经验。

原文链接: How To Not Destroy your Agile Team with Metrics


感谢杨赛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013 年 11 月 01 日 01:201638
用户头像

发布了 45 篇内容, 共 22.3 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

week 13 学习总结

Geek_2e7dd7

19.解决 Flink 升级1.11 报错 No ExecutorFactory found to execute the application

小知识点

scala 大数据 flink

java安全编码指南之:表达式规则

程序那些事

java安全编码 java安全 安全编码规则

数据质量管理工具的意义和定位

苏槐

数据治理 数据质量管理 数据质量平台

太牛了,这份神仙级面试笔记把所有Java知识面试题都详解出来了

Java成神之路

Java redis 编程 程序员 面试

week13 作业

Geek_2e7dd7

读《阿里工程师的自我修养》的读后感

雨夜的博客

程序员人生 自我管理 自我思考 程序员成长

第三周作业

Vincent

极客大学

架构师训练营-week13-作业

晓-Michelle

极客大学架构师训练营

面试不会微服务没关系,跟着我4天学会微服务!

小Q

Java spring 架构 分布式 微服务

抽象可能从未停止过

架构师修行之路

系统设计 抽象 抽象思维

万字长文 | 23 个问题 TCP 疑难杂症全解析

yes的练级攻略

TCP 计算机网络

oeasy 教您玩转 linux 010207 黑客帝国 matrix

o

第三周学习总结

Vincent

极客大学

敏捷教练的软技能

技术管理Jo

软技能 敏捷教练 引导者

你认为高级程序员应该具备那些技术技能树呢?

雨夜的博客

技术技能树 技术书籍

用 Python 实现一个简易版的 Pong 游戏 (二)

Matrix Chan

Python Python Turtle Python 游戏编程

甲方日常 9

句子

Java 运维 工作 随笔杂谈 日常

嘿,我想要寄一封挂号信,收件时间是 6 年后,标题是: 让 6 年后的我,加倍奉还。

叶小鍵

学习 成功学 心理学 李笑来

解Bug之路-串包Bug

无毁的湖光

redis socket Java 分布式

第4周作业

Vincent

极客时间 极客大学

USDT承兑商币支付系统搭建,USDT跑分承兑商app

13823153121

【原创】经验分享:一个Content-Length引发的血案(almost....)

一枝花算不算浪漫

干货!如何平稳用户无感知的完成系统重构升级

X先生

架构 运维 后台

喷一喷坑爹的面向UI编程

架构师修行之路

就靠这几段代码,带你玩转rpc通信协议,不信你学不明白

小Q

Java 架构 面试 RPC 网络

JavaScript七大语言类型你知多少?

Walker

Java 前端 编程语言

Spring 5 中文解析测试篇-集成测试之概要和注解

青年IT男

单元测试 Spring5

通证与通证经济你真的理解吗

CECBC区块链专委会

区块链 通证经济

阿里内部超流行的“SpringBoot+微服务指南”,理论与实战双管齐下

Java成神之路

Java 编程 程序员 Spring Cloud Spring Boot 2

面试官:TCP/IP 协议到底在讲什么?想彻底搞懂TCP协议:还得从 TCP 三次握手四次挥手说起

云流

编程 程序员 互联网 计算机网络 面试求职

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

怎么才能保证你的敏捷团队不会被指标毁掉-InfoQ