CategoryResourceRepost/极客时间专栏/研发效率破局之道/研发效能综述/02 | 效能度量:效果不好甚至有副作用,怎么回事?.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

124 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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 cant measure it, you cant 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的文章中写到衡量程序员的工作效率相当困难原因如下
- 几乎任何你能想到的指标(比如,调测过的代码行数、功能点、命令行参数的个数)都很容易被“做数字”;
- 我们极少要求两个程序员做完全相同的事情,所以很难获取大型项目的有价值度量数据作为参考。
那是不是说在研发软件时,我们就不能使用度量效能的方法来指导工作了呢?如果是的话,这对于软件团队管理者而言,将会是一个难以接受的事实。
这个问题的答案,我们就留到下一篇文章再揭晓吧,敬请期待。
## 思考题
你在工作中有没有经历过研发效能度量的失败案例?如果有的话,你觉得失败的原因是什么?关于度量谜题怎么解决,你有没有什么建议?
感谢你的收听,欢迎你在评论区给我留言分享你的观点,也欢迎你把这篇文章分享给更多的朋友一起阅读。我们下期再见!