<audio id="audio" title="02 | 效能度量：效果不好甚至有副作用，怎么回事？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/59/af/5947c186d71f13281914a84479f059af.mp3"></audio>

你好，我是葛俊。今天，我来和你聊聊研发效能的度量。

在和技术管理者，尤其是高层管理者聊起研发效能的时候，常常提起效能的度量这个话题。管理学大师彼得 · 德鲁克（Peter Drucker）曾经说过，“一个事物，你如果无法度量它，就无法管理它”（If you can’t measure it, you can’t manage it）。要想提高研发效能，自然要首先解决效能的度量的问题。

在软件研发过程中，数据驱动的手段被大量采用，比如说通过使用漏斗指标和A/B测试，用数据来指导产品的方向。按理说，软件开发行业是数据驱动的高手，用数据驱动来理解研发效能应该早被研究透了啊。

但事实上，效能的度量却是一个出了名的难题，至今没有哪个公司敢号称已经找到了效能度量的完美答案。不仅如此，绝大部分软件公司在使用研发效能度量这个工具时，不但没有起到正向作用，还伤害了产出和团队氛围。

所以，在今天这篇文章中，我就与你一起看看研发效能度量到底是什么、常见错误，以及度量困难的原因。

## 研发效能度量的定义和作用

首先，我来介绍一下效能度量的定义和作用。

研发效能的度量代表一组可量化的数据或参数，用来跟踪和评估开发过程的“健康”状况。 换句话说，**研发效能的度量，从应用程序开发的生命周期中获取数据，并使用这些数据来衡量软件开发人员的工作效率**。我们希望通过这样的度量，能够根据客观的数据而不是个人的主观意见去决策，从而实现以下几点：

1. **跟踪团队的表现、提高团队的绩效。**通过确定研发效能指标，公司可以明确团队和成员的工作预期，从而使得开发人员能够目标性更清晰地投入研发。同时，这些生产指标可以作为“晴雨表”，帮助团队定位影响工作效率的不良因素，从而帮助团队消除这些因素，最终达到团队更快乐、绩效更高的目的。
1. **提高项目计划的精确度。**团队负责人可以通过度量来估算一个需求端到端的成本，包括收集成本、设计系统成本、开发测试成本，以及运维成本等，来了解每项活动在项目总成本中的占比，从而更好地确定这些活动的优先级。同时，我们可以了解哪些步骤有较大风险和不确定性，从而提高预测项目进展的精准度。
1. **了解流程是否高效，寻找需要改进的关键领域。**我们可以衡量进行每项研发活动所需的时间，并估算其对质量和生产效率的影响，然后比较成本和收益，最终确定哪些步骤是高效的，以及哪些步骤是需要改善的。我们还可以对不同的实践进行A/B测试，以此来选择更好的方法。

提高团队绩效、提高计划精确度，以及寻找关键的待改进领域，这三个因素的结合有助于简化工作流程，发现瓶颈，帮助团队持续改善现有产品的生命周期，从而更高效地生产出质量更好的产品。

## 效能度量的错误案例

因为上述作用，绝大多数公司都非常重视研发效能的度量，并且基本上所有公司都或多或少地采用了度量。但遗憾的是，能够将其用好的公司少之又少，而且我见到的公司中还存在大量误用的情况。

接下来，我与你分享一些真实案例，我们一起来看看它们错在哪里，以及可以如何调整。

### 案例1：全公司范围内推行一套效能度量指标

某大型公司为了提高效能，专门成立了一个不小的团队，通过详细调研，制定了一组研发效能度量指标，并引入和开发了相应的工具。客观来讲，这些度量方式的质量很高。

准备就绪后，这个公司找了几个团队做试点，把这些效能度量数据作为参考提供给它们使用。三四个月下来，试点效果不错，这几个团队的产出速度有了一定的提高。于是，公司高层决定在全公司范围内推行这套方案。

但，随着大范围的推广，一些团队发现，它们的研发流程跟试点团队差别较大，需要花费相当多的时间去收集度量数据，受益却不明显，甚至是得不偿失。

更极端的情况是，有一个团队的开发环境和这套效能度量工具的环境差别实在太大，所以不得不专门为这个工具部署了一个环境。然后每周六，他们就要到这个环境里，为度量系统提供数据，还常常被迫提供一些“假数据”，以满足度量系统的需求。

因此，这些团队觉得这套方案并不适合自己，公司内逐步出现了些许反对声音。但是，公司推进这套流程的态度非常强硬，为了顺利推进，还把这套流程与团队绩效绑定到了一起。一旦某个团队的指标未能达到要求，就直接实行绩效扣分。由此，效能度量的负面作用逐渐凸显。大量团队为了好的绩效，而被迫去玩数字游戏。

全公司范围推行这套方案的一年多，可以说是怨声载道。明明是一套高质量的度量系统，却阻碍了团队业务的发展，并严重伤害了员工的积极性。直至最后这个实际情况被反馈到一位高管那里，这套度量系统才被完全取缔。

### 案例2：一个中型公司推行质量方面的指标

一个500人左右的公司，公司的组织架构按照职能进行水平划分，并没有进行矩阵式管理。为了提高公司的产品质量，QA团队提出了一组软件质量方面的度量指标，包括Bug严重性定义、每一个发布里不同级别的Bug的未解决率，以及上线的一些质量流程。QA团队得到了公司高层的支持，强制推行这些指标。

这些指标针对的主要是开发活动，但开发团队却认为，这些度量用处不大。他们认为，公司研发过程中的真正问题在于产品定义变化过快，常常是在冲刺开始后还不断更改需求。这就导致开发和测试团队即使拼命加班还常常错过发布日期，产品的Bug也不少。所以，开发团队提出，真正应该度量的是产品需求的稳定性。但是，公司高层认为需求变化是为了满足用户需求，所以没有批准开发团队的这个要求。

结果是，研发人员觉得公司效能度量只是用来束缚他们的，根本不能帮助他们工作，于是工作积极性下降，离职率上升。同时，产品质量也并没有因为这些度量指标的推行而提高。直到我写下这篇文章的时候，这个公司还是这个情况。

### 案例3：某创业公司聚焦度量开发、测试、上线准确度等指标

一个由10多个人组成的、拿到了Pre-A投资的创业公司，正处在研发产品寻找市场吻合度的阶段。掌权的CEO和产品副总坚信数据驱动，于是对研发流程定义了严格的度量和指标，比如App上线周期准时率、Bug的关闭速度、性能参数，等等。

整个团队很专业，也很敬业。他们花了很多精力去严格完成这些度量指标，做到了绝大部分情况下准时、高质量地上线产品。但是，CEO和产品副总并不是产品专家，只关注了开发过程中的数据，却没有收集其他步骤的数据去快速试错和寻找产品方向。

结果就是，虽然产品的每一个发布都很准时，质量也非常高，但因为公司在寻找市场需求吻合度方面动作迟缓，导致用户增长缓慢。因此，一年半以后，资金耗尽，投资人失去信心，公司倒闭。

这3个案例只是不同规模公司的几个典型场景，类似的失败案例数不胜数。那么，上面这些案例的问题出在什么地方？效能度量为什么这么难？

## 效能度量被大量误用，问题究竟出在哪儿？

**研发效能难以度量的最根本原因在于**，软件开发工作是一项创造性很强的知识性工作，非常复杂且伴随有大量不确定因素。

比如，软件产品的需求变化很快，需求文档的更新常常滞后于工程实现，甚至有的敏捷方法论提倡完全抛弃需求文档。

又比如，软件产品的实现方式有很大的不确定性。一个相同的功能，可以采用多种语言、框架、平台，使用各种不同的研发流程生产出来。在这种情况下，我们很难通过度量来衡量这些不同研发方法和中间过程的优劣。

**面对这样的一个复杂系统，我们不可能覆盖其全部参数。而如果这时，研发人员的利益和这个度量结果相关，那么他就很可能会通过“做数字”来欺骗度量系统。**

关于这个主题，美国著名学者罗伯特 · 奥斯汀（Robert Austin）写过一本书，叫作[《衡量和管理组织绩效》(Measuring and Managing Performance in Organizations)](https://amzn.to/2IxXjR9) 。他在这本书中给出的结论是，如果你不能度量一个事物的所有方面，那就不要去度量它。否则，你将得到“做数字”的欺骗行为。

这里有一组有名的Dilbert漫画，讲的是一个公司宣布使用Bug修复数量做度量，每修复一个Bug奖励10美元，消息一出，开发人员欢呼雀跃。一个程序员当场表示，当天下午就要给自己写出一辆汽车，因为他很容易就可以写出很多简单的Bug，然后马上去修复它们。

通过这个例子，我想要和你说明的重点是：度量与绩效挂钩，结果是指标上去了，却没给软件产品带来任何好处。

<img src="https://static001.geekbang.org/resource/image/58/89/58261fef0dd2ecaab2a986f0b21e1e89.png" alt="">

> 
备注：图片来自[https://dilbert.com/strip/1995-11-13](https://dilbert.com/strip/1995-11-13)


而我刚刚和你举的大型公司全公司范围内推行一套度量指标的案例，正是犯了度量与绩效挂钩的错误，这种情况下，很容易出现“做数字”的不良行为。这也是使用度量时最常见的错误，我们一定要留意。

**研发效能难以度量的第二个原因**，和上面提到的根本原因相关，但有其特殊性。很多公司有竖井（silo）存在，所以常常会把注意力放到某一两个竖井上，进行局部优化。但是，局部优化并不代表全局优化，甚至会让全局恶化。

上面那个中型公司推行质量方面指标的案例，就是在进行局部优化，不但没能提高产品质量，反而导致员工积极性受损，同时影响了团队之间的关系。

这样的问题，在按职能划分团队的公司很容易出现。因为在这样的组织划分下，更容易出现竖井，自然就更容易按照竖井来考虑小团队的表现。如果你的公司基于职能划分，一定要多加留意。

**研发效能难以度量的第三个原因在于**，度量指标一般用来度量软件产品的生产过程和产品质量，但是公司真正需要关注的是产品能否解决用户问题，也就是说能否产生用户价值。技术产品输出和用户价值输出之间的沟壑难以打通。

上面案例中那家创业公司聚焦度量开发测试指标，就是犯了这样的错误。产品质量再好，发布再准时，如果没有用户价值也是白费工夫。

当然了，研发效能难以度量还有一些其他原因，比如：

- 度量数据的收集难易程度不同，人们倾向拿容易收集的数据去关联效率，但事实上难以收集的数据对度量可能才真正有用。比如说代码行数容易衡量，但是用处很小。相比之下，产品用户价值的度量要困难得多，但用处却大得多。
- 软件开发和实践有一个滞后效应。比如，在团队中引入代码审查，在刚开始实行的时候，总体效率会出现短时间的下降，一两个月后才会逐步显现正面效果。那么，你现在要怎么度量它才好呢？

## 总结

在今天的分享中，我给出了效能度量的定义及作用，列举了三个典型的失败案例，并通过这几个例子和你详细分析了度量困难的几个主要原因。

研发效能的度量一直以来都是个难题，很多业界大佬也都发表过“研发效率不可度量”的观点。比如，马丁 · 福勒（Martin Fowler）在一篇叫作“[无法衡量生产效率”](https://martinfowler.com/bliki/CannotMeasureProductivity.html) (CannotMeasureProductivity)的文章中指出：这是我认为我们必须承认无知的地方。

周思博（Joel Spolsky）在一篇名为“[飙高音](https://www.joelonsoftware.com/2005/07/25/hitting-the-high-notes/)”（做到最好，Hitting the High Notes）的文章中写到，衡量程序员的工作效率相当困难，原因如下：

- 几乎任何你能想到的指标（比如，调测过的代码行数、功能点、命令行参数的个数）都很容易被“做数字”；
- 我们极少要求两个程序员做完全相同的事情，所以很难获取大型项目的有价值度量数据作为参考。

那是不是说在研发软件时，我们就不能使用度量效能的方法来指导工作了呢？如果是的话，这对于软件团队管理者而言，将会是一个难以接受的事实。

这个问题的答案，我们就留到下一篇文章再揭晓吧，敬请期待。

## 思考题

你在工作中有没有经历过研发效能度量的失败案例？如果有的话，你觉得失败的原因是什么？关于度量谜题怎么解决，你有没有什么建议？

感谢你的收听，欢迎你在评论区给我留言分享你的观点，也欢迎你把这篇文章分享给更多的朋友一起阅读。我们下期再见！


