CategoryResourceRepost/极客时间专栏/研发效率破局之道/研发效能综述/03 | 效能度量:如何选对指标与方法,真正提升效能?.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

177 lines
16 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="03 | 效能度量:如何选对指标与方法,真正提升效能?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/19/01/19af57fa963560b23e3749d4d8d12701.mp3"></audio>
你好,我是葛俊。今天,我来和你聊聊如何正确使用效能度量。
在上一篇文章,我给你介绍了效能度量的定义、作用,以及几个使用误区。我们先简单回顾一下:
- 软件系统异常复杂,度量指标无法覆盖其所有参数,从而容易被“数字游戏”欺骗。
- 竖井指标的提高不等于全局指标的提高,局部优化不等于全局优化。
- 研发效能度量指标一般用来衡量软件产品的生产过程和产品质量,但公司真正需要关注的是能否产生用户价值。这两者之间存在着难以跨越的鸿沟。
正是因为这种种看似难以解决的问题,业界甚至有人认为研发效能的度量是一个无解的问题。但我并不这样认为。如果使用得当,效能度量可以给公司的研发带来非常大的好处。
举一个真实的例子。国内一个大概20人的研发团队研发流程混乱产品发布经常推迟但是大家都不清楚问题出在哪儿。于是团队负责人决定引入数据驱动开发项目经理正式跟踪研发过程中每部分的耗时并在功能发布后复盘。复盘时大家发现整个研发过程耗时分布如下
- 开发耗时1周
- 联调耗时1周
- 测试、发布耗时1周。
大家一致认为联调耗时一周是最需要优化的地方。于是对联调部分进行深入讨论发现根本原因在于前后端沟通不顺畅常常出现后端改动API但前端不知情的情况这是耗时最主要的原因。
为解决这个问题团队最终引入了一个Mock Service并规定在每个功能开发之前前后端要规定好API格式并由后端产生一个Mock Service让前端从一开始就有明确的API可以调用。后端如果要改变API格式必须通知整个团队并立即更新这个Mock Service。这就最大程度地避免了沟通不畅造成的时间浪费。
两个月以后,这个团队的平均开发周期有了明显改善,分布如下:
- 定义和生成Mock Service耗时1天
- 开发耗时1周
- 联调耗时1天
- 测试、发布耗时3天。
可以看到虽然定义和生成Mock Service需要额外的一天但是联调周期缩短了4天测试、发布周期也缩短了2天。所以整个开发周期从3周降到2周效果显著。
在这个成功使用度量的例子中,该团队主要做对了以下三点:
- 从全局的角度考虑度量指标,度量产品生产周期中各个阶段的数据,而不是直接查看某个竖井;
- 使用度量来寻找问题而不是用来做绩效考评;
- 使用度量来检验改进措施的效果。
从我的经验看,成功使用度量的关键在于:首先要对度量的分类有一个比较系统的了解,然后根据效能度量的特点,以及自己团队的目标来选取度量指标和方法。
## 效能度量的指标分类
在我看来要真正发挥度量的作用找到合适的度量指标必须先对指标进行分类。我推荐从团队和个人这两个维度对度量指标进行分类其中团队维度中又分为速度、准确度和质量3类所以一共是4类。
- **速度**:天下武功,唯快不破,速度指标主要用来衡量团队研发产品的速率。比如,前置时间,从任务产生到交付的时长。
- **准确度**关注产品是否跟计划吻合跟用户需求吻合能否提供较大的用户价值。一个例子是功能的采纳率也就是有百分之多少的用户使用了功能x。
- **质量**:如果质量有问题,产品的商业价值会被大打折扣。质量包括产品的性能、功能、可靠性、安全等方面。
- **个人效能**:个人开发过程中的效率指标,比如开发环境生成速度、本地构建速度等。
根据经验我总结了一张导图展示了这4个方面的度量指标供你参考。可以看到我一共给出了40多个指标从名字上可以看出它们大概要度量什么。
在后面的度量指标推荐时,我也会与你讨论其中几个指标。如果你不清楚哪条指标的具体含义,可以自行查阅,或者留言给我。另外,你现在只需要对这些指标有个整体概念,用到时再回过头深入研究,选出适合自己的就可以了。
<img src="https://static001.geekbang.org/resource/image/96/8f/967061c8d8d4ee26a34b5e7411fcf28f.png" alt="">
接下来,我就直接和你推荐度量效能的一个原则和四个使用方法。
## 效能度量的原则
效能度量不与绩效挂钩,是正确使用效能度量最重要的一点,再怎么强调也不为过。所以,我向你推荐的效能度量的原则就是:**效能度量不要与绩效挂钩,而应该作为参考和工具,帮助团队提高效能。**
因为无法覆盖100%的度量指标,把度量与绩效挂钩就一定会产生“做数字”的现象。这时,使用效能度量非但起不到正面效果,还会对公司和团队造成伤害。管理者常常倾向于使用度量与绩效挂钩这种方法,是因为它能具体到数字方便管理。这种错误,我们一定要注意避免。
**如果你只能记得这篇文章的一句话,那我希望这句话是“效能度量不要与绩效挂钩”。**
Facebook就刻意避免把效能度量跟绩效挂钩。比如代码审核相关的效能度量页面并没有包括审核的提交个数、代码审核的时长、代码审核通过率这些常见指标。
如果有团队提出要获取这些数据那么我们工具团队只会提供一些脚本由团队主管自己去获取所需数据而且获取的方式并不那么方便。同时团队成员也不能在Phabricator网站上直接看到这些数据。
这是一个比较典型的主动避免度量,从而避免它与绩效挂钩的例子。
不能把效能度量与绩效挂钩,那怎样才能使用度量提高效率呢?答案是:**提供度量作参考和工具,帮助团队提高效能。**
度量一旦与绩效脱离关系,就可以作为重要参考和工具,帮助团队持续进步。比如,下面这些度量指标:
- 缺陷密度,可以让团队了解产品质量的走向。
- 新旧Bug占比一定程度上可以反映技术债的严重程度。
即使是代码行数这样臭名昭著的度量指标,如果只是用作参考,都可以帮助团队和成员提高。
在Facebook有超过4套的数据展示面板工具。这些面板工具使用起来非常灵活开发人员可以定制面板展示对自己有价值的效率度量比如上线前高优先级Bug数、未完成Bug数、燃尽图等。我们每个团队都是**主动**使用这些面板,来帮助团队达成业务目标。
下面我就来向你推荐4个度量使用方法。
## 效能度量的推荐方法
### 第一,目标驱动,度量对的事
提供用户价值是公司存在的根本,因此与之相关的指标是最最重要的。这一点非常好理解。从这个角度来看,以下几个相关度量指标比较有效:
1. 净推荐值(Net Promoter ScoreNPS),是通过调研了解用户满意度,实用性很强。如果你不了解的话,可以看一下[这篇文章](https://zhuanlan.zhihu.com/p/38117396)对NPS的介绍。
1. 系统/App宕机时间(System/App Downtime) 和严重线上事故数(Incidents),衡量的是系统的可用性,通常与用户价值直接挂钩。
1. 热修复上线时间(Hotfix Time),指的是一个热修复从编码完成到部署到生产的时长,关系到解决重大缺陷的效率,与用户价值强相关。
我的建议是你可以再去看看准确度的其他衡量指标根据团队情况找到能够最直接衡量产出有效性的指标而不是一定要采用上面这3个指标。
### 第二,先从全局上找瓶颈,再深入细节
前面提到过,在度量效能时,很多团队往往是一上来就不加辨别地扎到某几个竖井里去寻找问题。这样的局部优化往往对全局优化无效,还会影响团队之间的关系,带来负面效果。正确的做法应该是,先检查全局,找到关键瓶颈之后,再进入细节分析和解决的环节。
具体实现起来,方法也很简单,就是收集产品周期中每一个阶段所占用的时间,包括计划的时间和最后实际花费的时间,然后寻找问题最大的地方。
具体的**耗时收集**方法,大致有两种:
1. 人工收集。比如,文章开头提到的项目经理手工收集研发过程中每环节的耗时。
1. 通过工具收集。比如Trello的任务显示看板或者Jira的看板都可以清楚地看到每个环节有多少任务以及流动情况从而直观地识别瓶颈。
收集到了每环节的耗时之后,下一步就是去**发现瓶颈**。除了直观的观察之外我推荐一个工具累积流程图Cumulative Flow Diagram)。具体方法是横轴是日期纵轴是每天统计的各节点任务数量绘制出来就形成了累积流程图。比如我们统计待办Backlog、开发Dev、测试Test、生产Production这几个节点累积流程图如下所示
<img src="https://static001.geekbang.org/resource/image/0e/a1/0eb672f2d6784b919a8032cfce68e2a1.png" alt="">
从水平方向看待办和生产这两条线的距离就是交付时间Cycle Time也就是从开始开发到交付的时长。垂直方向的距离代表WIP也就是系统中的任务数。通过这张图我们就可以一目了然地看到任务在流程中的流动情况并直观地发现问题。比如WIP数值变大大、交付时间变长通常都代表研发效能下降。
可以看到,累积流程图对于查找全局瓶颈非常有用。实际上,我们还可以通过它预估发布日期,查看开发是否被阻塞等。这里有一篇[文章](https://ruddyblog.wordpress.com/2018/04/23/%E7%B4%AF%E7%A9%8D%E6%B5%81%E7%A8%8B%E5%9C%96-cumulative-flow-diagram-%E8%A7%A3%E5%AF%86/),讲述了如何通过累积流程图,找到问题并进行调整,供你参考。
### 第三,通过主观的方式来评价、提高效能
没有客观的方法去衡量开发人员的生产效率,并不意味着你无法衡量它。 一个办法是,你可以尽量公平地去主观地测量它。事实上,平时工作中我们也确实是这么做的。
比如在一个团队里面大家通常都能对谁是技术大牛达成共识。这是我们的大脑依据平日收集的点滴事实做出的判断也是因为当前还没有AI系统能够自动做出这样的分析才显得非常主观。
所以,**我推荐收集人工反馈的办法,来帮助我们做出尽量公平的主观评价。**
针对研发环境、流程、工具的效能进行评价,可以使用**公司成员对研发效能满意度的净推荐值**。虽然现在还没有很强的理论依据可以证明,这个指标可以大幅提高研发效率,但从我看到的许多真实案例来说,事实确实如此:满意度让员工工作更积极,而工作积极又能提高满意度,是一个良性循环。
我在Facebook内部工具团队工作时我们每个季度都通过调查问卷收集开发人员的建议另外我们还有IRC聊天室类似的工具供讨论和吐槽。这些反馈都会成为工具团队调整工作内容和优先级的依据。
至于调查问卷的内容,具体来说可以关注以下这几个方面:冲刺的准备充分度、团队沟通有效性、冲刺过程效率、交付价值如何、交付信心如何、对产品方向及路线的兴奋度等。
**针对个人研发效能作评价可以采用类似360度绩效考评的方式来收集同事之间的评价**。评价的标准基于在用户价值输出上做出的贡献包括自身产生的价值以及帮助团队成员产生的用户价值。如果一个员工可以很好地产出用户价值那他的研发效率通常不会差。其实Facebook就是使用这种方式来评价员工效能的虽然主观但很公正。
我整理了一张表格,列了一些可以用来收集反馈的问题,涵盖开发效率、质量、团队贡献等方面。
<img src="https://static001.geekbang.org/resource/image/f4/1e/f4767b13d8f1eba1ec08a0c88f3d511e.png" alt="">
### 第四,关注个人维度的指标提高效能
个人效能相关的度量,直接反映开发人员的开发效率和满意度,对团队产出影响很大。所以,作为管理者/内部效能团队,应该关注开发人员的高频活动,并自动化和优化这些步骤,让开发人员能专注开发。
一般来说,“个人调测环境构建速度”是一个比较重要的指标。它描述的是开发人员在本地做好一个改动,到能够进行本地调测的时长。开发人员每次修改自行验证都要经历这个步骤,对它进行优化非常有用。
我以前在Facebook的时候后端代码及网站的绝大部分修改都可以在一分钟之内在本地开发机器上使用线上数据进行验证非常爽快效率极高。
但是,我曾经在其他公司见到过这样一种情况:一个修改需要在本地编码,上传到服务器编译,再通过工具下载到另外一个机器上验证。这个过程至少需要一个小时,在这种情况下,即使是在验证时发现一个简单错误,修改后简单验证也需要再花费一个小时。
不难想象这种情况下开发者的沮丧心情。如果能解决个人效能维度上的痛点,必然对提高产出和士气有重大作用。
## 小结
好了,这就是我今天要和你分享的效能度量的指标和方法了。接下来,我与你总结下今天的核心知识点。
首先我将度量指标分为了准确度、速度、质量和个人效能4个方面并列举了40多个具体指标。然后我根据软件研发以及效能度量的特点给出了1个原则和4种建议的度量方法。原则是不要与绩效挂钩度量方法包括目标驱动度量对的事先从全局上找瓶颈再深入细节通过主观的方式来评价、提高效能关注个人维度的指标提高效能。
我把这4种方法以及基本思路总结成了一张表格方便你理解与记忆。
<img src="https://static001.geekbang.org/resource/image/a5/9e/a52387c453af2f78e3e68842dd19569e.png" alt="">
研发效能的度量很灵活,也很容易踩坑。所以,我希望上面的这些原则和方法能够作为你实施度量的参考,从而达到以下几个目的:
- 跟踪团队的表现、提高团队的绩效;
- 提高项目计划的精确度;
- 了解流程是否高效,寻找需要改进的关键领域。
最后,我来分享一下我个人对效能度量的两大感受:
1. 度量只是工具,不是目的。切记度量的真正的目标是提高效能,不要舍本逐末。比如说,如果度量花费的时间超过了收益,那就不要去做。
1. 虽然我们推崇数字驱动,但在效能的度量上,不要迷信数字,适当使用主观反馈效果反而更好。
## 思考题
你能从下面这张累积流程图中,看出什么问题吗?
<img src="https://static001.geekbang.org/resource/image/2a/67/2a25cdb23692a921f6b20af9bfe76b67.png" alt="">
感谢你的收听,欢迎你在评论区给我留言分享你的观点,也欢迎你把这篇文章分享给更多的朋友一起阅读。我们下期再见!