时长16:53大小15.47M
你好,我是葛俊。今天,我来和你聊聊如何正确使用效能度量。
在上一篇文章,我给你介绍了效能度量的定义、作用,以及几个使用误区。我们先简单回顾一下:
正是因为这种种看似难以解决的问题,业界甚至有人认为研发效能的度量是一个无解的问题。但我并不这样认为。如果使用得当,效能度量可以给公司的研发带来非常大的好处。
举一个真实的例子。国内一个大概 20 人的研发团队,研发流程混乱,产品发布经常推迟,但是大家都不清楚问题出在哪儿。于是,团队负责人决定引入数据驱动开发:项目经理正式跟踪研发过程中每部分的耗时,并在功能发布后复盘。复盘时大家发现,整个研发过程耗时分布如下:
大家一致认为联调耗时一周,是最需要优化的地方。于是对联调部分进行深入讨论,发现根本原因在于前后端沟通不顺畅:常常出现后端改动 API,但前端不知情的情况,这是耗时最主要的原因。
为解决这个问题,团队最终引入了一个 Mock Service,并规定:在每个功能开发之前,前后端要规定好 API 格式,并由后端产生一个 Mock Service,让前端从一开始就有明确的 API 可以调用。后端如果要改变 API 格式,必须通知整个团队,并立即更新这个 Mock Service。这就最大程度地避免了沟通不畅造成的时间浪费。
两个月以后,这个团队的平均开发周期有了明显改善,分布如下:
可以看到,虽然定义和生成 Mock Service 需要额外的一天,但是联调周期缩短了 4 天,测试、发布周期也缩短了 2 天。所以,整个开发周期从 3 周降到 2 周,效果显著。
在这个成功使用度量的例子中,该团队主要做对了以下三点:
从我的经验看,成功使用度量的关键在于:首先要对度量的分类有一个比较系统的了解,然后根据效能度量的特点,以及自己团队的目标来选取度量指标和方法。
在我看来,要真正发挥度量的作用,找到合适的度量指标,必须先对指标进行分类。我推荐从团队和个人这两个维度对度量指标进行分类,其中团队维度中又分为速度、准确度和质量 3 类,所以一共是 4 类。
根据经验,我总结了一张导图,展示了这 4 个方面的度量指标,供你参考。可以看到,我一共给出了 40 多个指标,从名字上可以看出它们大概要度量什么。
在后面的度量指标推荐时,我也会与你讨论其中几个指标。如果你不清楚哪条指标的具体含义,可以自行查阅,或者留言给我。另外,你现在只需要对这些指标有个整体概念,用到时再回过头深入研究,选出适合自己的就可以了。
接下来,我就直接和你推荐度量效能的一个原则和四个使用方法。
效能度量不与绩效挂钩,是正确使用效能度量最重要的一点,再怎么强调也不为过。所以,我向你推荐的效能度量的原则就是:效能度量不要与绩效挂钩,而应该作为参考和工具,帮助团队提高效能。
因为无法覆盖 100% 的度量指标,把度量与绩效挂钩就一定会产生“做数字”的现象。这时,使用效能度量非但起不到正面效果,还会对公司和团队造成伤害。管理者常常倾向于使用度量与绩效挂钩这种方法,是因为它能具体到数字方便管理。这种错误,我们一定要注意避免。
如果你只能记得这篇文章的一句话,那我希望这句话是“效能度量不要与绩效挂钩”。
Facebook 就刻意避免把效能度量跟绩效挂钩。比如,代码审核相关的效能度量页面,并没有包括审核的提交个数、代码审核的时长、代码审核通过率这些常见指标。
如果有团队提出要获取这些数据,那么我们工具团队只会提供一些脚本,由团队主管自己去获取所需数据,而且获取的方式并不那么方便。同时,团队成员也不能在 Phabricator 网站上直接看到这些数据。
这是一个比较典型的主动避免度量,从而避免它与绩效挂钩的例子。
不能把效能度量与绩效挂钩,那怎样才能使用度量提高效率呢?答案是:提供度量作参考和工具,帮助团队提高效能。
度量一旦与绩效脱离关系,就可以作为重要参考和工具,帮助团队持续进步。比如,下面这些度量指标:
即使是代码行数这样臭名昭著的度量指标,如果只是用作参考,都可以帮助团队和成员提高。
在 Facebook,有超过 4 套的数据展示面板工具。这些面板工具使用起来非常灵活,开发人员可以定制面板,展示对自己有价值的效率度量,比如上线前高优先级 Bug 数、未完成 Bug 数、燃尽图等。我们每个团队都是主动使用这些面板,来帮助团队达成业务目标。
下面,我就来向你推荐 4 个度量使用方法。
提供用户价值是公司存在的根本,因此与之相关的指标是最最重要的。这一点非常好理解。从这个角度来看,以下几个相关度量指标比较有效:
我的建议是,你可以再去看看准确度的其他衡量指标,根据团队情况,找到能够最直接衡量产出有效性的指标,而不是一定要采用上面这 3 个指标。
前面提到过,在度量效能时,很多团队往往是一上来就不加辨别地扎到某几个竖井里去寻找问题。这样的局部优化往往对全局优化无效,还会影响团队之间的关系,带来负面效果。正确的做法应该是,先检查全局,找到关键瓶颈之后,再进入细节分析和解决的环节。
具体实现起来,方法也很简单,就是收集产品周期中每一个阶段所占用的时间,包括计划的时间和最后实际花费的时间,然后寻找问题最大的地方。
具体的耗时收集方法,大致有两种:
收集到了每环节的耗时之后,下一步就是去发现瓶颈。除了直观的观察之外,我推荐一个工具:累积流程图(Cumulative Flow Diagram)。具体方法是:横轴是日期,纵轴是每天统计的各节点任务数量,绘制出来就形成了累积流程图。比如,我们统计待办(Backlog)、开发(Dev)、测试(Test)、生产(Production)这几个节点,累积流程图如下所示:
从水平方向看,待办和生产这两条线的距离就是交付时间(Cycle Time),也就是从开始开发到交付的时长。垂直方向的距离代表 WIP,也就是系统中的任务数。通过这张图,我们就可以一目了然地看到任务在流程中的流动情况,并直观地发现问题。比如,WIP 数值变大大、交付时间变长通常都代表研发效能下降。
可以看到,累积流程图对于查找全局瓶颈非常有用。实际上,我们还可以通过它预估发布日期,查看开发是否被阻塞等。这里有一篇文章,讲述了如何通过累积流程图,找到问题并进行调整,供你参考。
没有客观的方法去衡量开发人员的生产效率,并不意味着你无法衡量它。 一个办法是,你可以尽量公平地去主观地测量它。事实上,平时工作中我们也确实是这么做的。
比如,在一个团队里面,大家通常都能对谁是技术大牛达成共识。这是我们的大脑依据平日收集的点滴事实做出的判断,也是因为当前还没有 AI 系统能够自动做出这样的分析,才显得非常主观。
所以,我推荐收集人工反馈的办法,来帮助我们做出尽量公平的主观评价。
针对研发环境、流程、工具的效能进行评价,可以使用公司成员对研发效能满意度的净推荐值。虽然现在还没有很强的理论依据可以证明,这个指标可以大幅提高研发效率,但从我看到的许多真实案例来说,事实确实如此:满意度让员工工作更积极,而工作积极又能提高满意度,是一个良性循环。
我在 Facebook 内部工具团队工作时,我们每个季度都通过调查问卷收集开发人员的建议,另外,我们还有 IRC 聊天室类似的工具供讨论和吐槽。这些反馈,都会成为工具团队调整工作内容和优先级的依据。
至于调查问卷的内容,具体来说可以关注以下这几个方面:冲刺的准备充分度、团队沟通有效性、冲刺过程效率、交付价值如何、交付信心如何、对产品方向及路线的兴奋度等。
针对个人研发效能作评价,可以采用类似 360 度绩效考评的方式来收集同事之间的评价。评价的标准基于在用户价值输出上做出的贡献,包括自身产生的价值,以及帮助团队成员产生的用户价值。如果一个员工可以很好地产出用户价值,那他的研发效率通常不会差。其实,Facebook 就是使用这种方式来评价员工效能的,虽然主观但很公正。
我整理了一张表格,列了一些可以用来收集反馈的问题,涵盖开发效率、质量、团队贡献等方面。
个人效能相关的度量,直接反映开发人员的开发效率和满意度,对团队产出影响很大。所以,作为管理者 / 内部效能团队,应该关注开发人员的高频活动,并自动化和优化这些步骤,让开发人员能专注开发。
一般来说,“个人调测环境构建速度”是一个比较重要的指标。它描述的是开发人员在本地做好一个改动,到能够进行本地调测的时长。开发人员每次修改自行验证都要经历这个步骤,对它进行优化非常有用。
我以前在 Facebook 的时候,后端代码及网站的绝大部分修改都可以在一分钟之内在本地开发机器上使用线上数据进行验证,非常爽快,效率极高。
但是,我曾经在其他公司见到过这样一种情况:一个修改需要在本地编码,上传到服务器编译,再通过工具下载到另外一个机器上验证。这个过程至少需要一个小时,在这种情况下,即使是在验证时发现一个简单错误,修改后简单验证也需要再花费一个小时。
不难想象这种情况下开发者的沮丧心情。如果能解决个人效能维度上的痛点,必然对提高产出和士气有重大作用。
好了,这就是我今天要和你分享的效能度量的指标和方法了。接下来,我与你总结下今天的核心知识点。
首先,我将度量指标分为了准确度、速度、质量和个人效能 4 个方面,并列举了 40 多个具体指标。然后,我根据软件研发以及效能度量的特点,给出了 1 个原则和 4 种建议的度量方法。原则是不要与绩效挂钩;度量方法包括:目标驱动,度量对的事;先从全局上找瓶颈,再深入细节;通过主观的方式来评价、提高效能;关注个人维度的指标提高效能。
我把这 4 种方法,以及基本思路总结成了一张表格,方便你理解与记忆。
研发效能的度量很灵活,也很容易踩坑。所以,我希望上面的这些原则和方法能够作为你实施度量的参考,从而达到以下几个目的:
最后,我来分享一下我个人对效能度量的两大感受:
你能从下面这张累积流程图中,看出什么问题吗?
感谢你的收听,欢迎你在评论区给我留言分享你的观点,也欢迎你把这篇文章分享给更多的朋友一起阅读。我们下期再见!
作者回复: 本地构建指的是在自己的开发机器上,也就是代码所在的地方进行构建。如果代码是在远程的开发服务器上,那这个本地指的就是远程的服务器,如果代码是在笔记本上,那这个本地就是笔记本。
在你的例子当中,如果大量的开发都是在笔记本上进行的。那么虽然环境维护有一些麻烦。还是很值得投资的。大不了在Windows上面做一套环境,在Mac上面做一套环境。具体方法,最直接的是使用脚本自动化。
另外这个环境最好和你们的生产环境保持一致。避免在本地构建出来的东西,在生产环境上会出现因为环境不同而造成问题。
作者回复: 这个问题在开发资源被共享的情况下的确是很常见,也很棘手。我看到有两个可能的处理办法,第一个是。有一个统一的接口人来对接这些优先调节优先级的要求,挡住一些,并且根据全局情况进行合理调节。第二个方法是改变开发资源的共享方式,从按智能划分团队,转变成按产品划分团队,或者是矩阵式管理。
作者回复: 对啦。厉害!
作者回复: 👍👍
作者回复: > 数字化的绩效最简单也最直观,也没有人为因素的掺杂,也能被大家接受。
这个的确,这也是很多管理者倾向使用这种数字度量进行管理的重要出发点:至少帮助我打考评!而且有数字支持,员工也难以提出异议。
但是因为研发的特殊性,我看到的情况是客观收集数据直接用来打考评不行(可以做参考)。反而是主观收集反馈来做考评才有效(难点是做到公正)。
作者回复: 这个主要看度量的方法。如果是用死板的通过工具收集数据,而且明确强相关,我觉得还是不行。比如,“完成功能点数量个数在团队排名,决定10%绩效排名”。这种占比虽然只有1/10,我觉得还是会出现数字游戏。
你能举一个具体你觉得会有效的例子吗?
作者回复: > 在facebook全局指标和局部指标之间会有一些关联么
我不太清楚你的问题。全局指标一般不是局部指标组合而成的吗?能重新解释一下你的问题吗?
作者回复: > 本地开发和测试,环境都不具备,写好代码都是要到现网环境联调
这个要尽量把可以本地验证的地方本地实现。应该能有一些workaround能做一部分吧。同时尽量在本地模拟线上环境。
>...信息化...
wiki用好效果就很好。conf一个常见用法是每个团队内部使用,外部不可见。我觉得很不可取。最好全公司用一个,所有可以公开的信息都公开,放到上面
作者回复: 从我的经验看,对开发工作,绩效考核通过360反馈,通过相对主观的方式,反而比较有效。
作者回复: 对的对的!
通过这个图一下子就可以看到问题。
作者回复: 这个一般来说,效能方面肯定是有很大提升空间的 :)
我觉得,可以用我文章中提到的,用NPS方法对开发人员进行研发环境满意度的调研,你会发现问题的。然后尝试解决中间最痛的点,看看效果。
作者回复: 答对了!赞
作者回复: 这一部分我也不是特别了解细节。但是知道主要原则大概有几个:
1. 数据库中都有特定的Field指出是否是测试数据
2. 能够快速恢复。这个是基本
3. 强大的监控。开发人员账号触碰到生产数据,如果是TA本人不应该有权限的,必须要有任务ID才能有Access。这些行为都会被记录下来。
作者回复: WIP是大概100左右,但是我们不清楚团队多大,所以不能确定是否这个WIP太大。
作者回复: 从图上看到的是开发被阻塞了,没有接受新的开发任务。你这个直接给出开发被阻塞的三个可能原因,哈哈,厉害 :)
作者回复: 用户体验好,应该长期会和销量挂钩吧。
退一步说,如果用户体验指标反映不出真实的价值,那就说明用户体验不重要,这个时候就需要寻找到真正的价值去衡量产出。在你们的具体情况下,产品的什么方面是真正的价值?
作者回复: 从图上看到的是开发被阻塞了。这个时候,这个CFD就完成了它的重要作用:帮我们发现问题。下一步是去调查为什么开发没有接受新任务了。你说的几点都可能是原因。