下载APP
关闭
讲堂
算法训练营
企业服务
热点资讯
极客商城
客户端下载
兑换中心
渠道合作
推荐作者

03 | 效能度量:如何选对指标与方法,真正提升效能?

2019-08-28 葛俊
研发效率破局之道
进入课程

讲述:葛俊

时长16:53大小15.47M

你好,我是葛俊。今天,我来和你聊聊如何正确使用效能度量。

在上一篇文章,我给你介绍了效能度量的定义、作用,以及几个使用误区。我们先简单回顾一下:

  • 软件系统异常复杂,度量指标无法覆盖其所有参数,从而容易被“数字游戏”欺骗。
  • 竖井指标的提高不等于全局指标的提高,局部优化不等于全局优化。
  • 研发效能度量指标一般用来衡量软件产品的生产过程和产品质量,但公司真正需要关注的是能否产生用户价值。这两者之间存在着难以跨越的鸿沟。

正是因为这种种看似难以解决的问题,业界甚至有人认为研发效能的度量是一个无解的问题。但我并不这样认为。如果使用得当,效能度量可以给公司的研发带来非常大的好处。

举一个真实的例子。国内一个大概 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 多个指标,从名字上可以看出它们大概要度量什么。

在后面的度量指标推荐时,我也会与你讨论其中几个指标。如果你不清楚哪条指标的具体含义,可以自行查阅,或者留言给我。另外,你现在只需要对这些指标有个整体概念,用到时再回过头深入研究,选出适合自己的就可以了。

图 1 研发效能度量指标分类

接下来,我就直接和你推荐度量效能的一个原则和四个使用方法。

效能度量的原则

效能度量不与绩效挂钩,是正确使用效能度量最重要的一点,再怎么强调也不为过。所以,我向你推荐的效能度量的原则就是:效能度量不要与绩效挂钩,而应该作为参考和工具,帮助团队提高效能。

因为无法覆盖 100% 的度量指标,把度量与绩效挂钩就一定会产生“做数字”的现象。这时,使用效能度量非但起不到正面效果,还会对公司和团队造成伤害。管理者常常倾向于使用度量与绩效挂钩这种方法,是因为它能具体到数字方便管理。这种错误,我们一定要注意避免。

如果你只能记得这篇文章的一句话,那我希望这句话是“效能度量不要与绩效挂钩”。

Facebook 就刻意避免把效能度量跟绩效挂钩。比如,代码审核相关的效能度量页面,并没有包括审核的提交个数、代码审核的时长、代码审核通过率这些常见指标。

如果有团队提出要获取这些数据,那么我们工具团队只会提供一些脚本,由团队主管自己去获取所需数据,而且获取的方式并不那么方便。同时,团队成员也不能在 Phabricator 网站上直接看到这些数据。

这是一个比较典型的主动避免度量,从而避免它与绩效挂钩的例子。

不能把效能度量与绩效挂钩,那怎样才能使用度量提高效率呢?答案是:提供度量作参考和工具,帮助团队提高效能。

度量一旦与绩效脱离关系,就可以作为重要参考和工具,帮助团队持续进步。比如,下面这些度量指标:

  • 缺陷密度,可以让团队了解产品质量的走向。
  • 新旧 Bug 占比,一定程度上可以反映技术债的严重程度。

即使是代码行数这样臭名昭著的度量指标,如果只是用作参考,都可以帮助团队和成员提高。

在 Facebook,有超过 4 套的数据展示面板工具。这些面板工具使用起来非常灵活,开发人员可以定制面板,展示对自己有价值的效率度量,比如上线前高优先级 Bug 数、未完成 Bug 数、燃尽图等。我们每个团队都是主动使用这些面板,来帮助团队达成业务目标。

下面,我就来向你推荐 4 个度量使用方法。

效能度量的推荐方法

第一,目标驱动,度量对的事

提供用户价值是公司存在的根本,因此与之相关的指标是最最重要的。这一点非常好理解。从这个角度来看,以下几个相关度量指标比较有效:

  1. 净推荐值 (Net Promoter Score,NPS),是通过调研了解用户满意度,实用性很强。如果你不了解的话,可以看一下这篇文章对 NPS 的介绍。
  2. 系统 /App 宕机时间 (System/App Downtime) 和严重线上事故数 (Incidents),衡量的是系统的可用性,通常与用户价值直接挂钩。
  3. 热修复上线时间 (Hotfix Time),指的是一个热修复从编码完成到部署到生产的时长,关系到解决重大缺陷的效率,与用户价值强相关。

我的建议是,你可以再去看看准确度的其他衡量指标,根据团队情况,找到能够最直接衡量产出有效性的指标,而不是一定要采用上面这 3 个指标。

第二,先从全局上找瓶颈,再深入细节

前面提到过,在度量效能时,很多团队往往是一上来就不加辨别地扎到某几个竖井里去寻找问题。这样的局部优化往往对全局优化无效,还会影响团队之间的关系,带来负面效果。正确的做法应该是,先检查全局,找到关键瓶颈之后,再进入细节分析和解决的环节。

具体实现起来,方法也很简单,就是收集产品周期中每一个阶段所占用的时间,包括计划的时间和最后实际花费的时间,然后寻找问题最大的地方。

具体的耗时收集方法,大致有两种:

  1. 人工收集。比如,文章开头提到的项目经理手工收集研发过程中每环节的耗时。
  2. 通过工具收集。比如,Trello 的任务显示看板,或者 Jira 的看板,都可以清楚地看到每个环节有多少任务以及流动情况,从而直观地识别瓶颈。

收集到了每环节的耗时之后,下一步就是去发现瓶颈。除了直观的观察之外,我推荐一个工具:累积流程图(Cumulative Flow Diagram)。具体方法是:横轴是日期,纵轴是每天统计的各节点任务数量,绘制出来就形成了累积流程图。比如,我们统计待办(Backlog)、开发(Dev)、测试(Test)、生产(Production)这几个节点,累积流程图如下所示:

图 2 累积流程图示意图

从水平方向看,待办和生产这两条线的距离就是交付时间(Cycle Time),也就是从开始开发到交付的时长。垂直方向的距离代表 WIP,也就是系统中的任务数。通过这张图,我们就可以一目了然地看到任务在流程中的流动情况,并直观地发现问题。比如,WIP 数值变大大、交付时间变长通常都代表研发效能下降。

可以看到,累积流程图对于查找全局瓶颈非常有用。实际上,我们还可以通过它预估发布日期,查看开发是否被阻塞等。这里有一篇文章,讲述了如何通过累积流程图,找到问题并进行调整,供你参考。

第三,通过主观的方式来评价、提高效能

没有客观的方法去衡量开发人员的生产效率,并不意味着你无法衡量它。 一个办法是,你可以尽量公平地去主观地测量它。事实上,平时工作中我们也确实是这么做的。

比如,在一个团队里面,大家通常都能对谁是技术大牛达成共识。这是我们的大脑依据平日收集的点滴事实做出的判断,也是因为当前还没有 AI 系统能够自动做出这样的分析,才显得非常主观。

所以,我推荐收集人工反馈的办法,来帮助我们做出尽量公平的主观评价。

针对研发环境、流程、工具的效能进行评价,可以使用公司成员对研发效能满意度的净推荐值。虽然现在还没有很强的理论依据可以证明,这个指标可以大幅提高研发效率,但从我看到的许多真实案例来说,事实确实如此:满意度让员工工作更积极,而工作积极又能提高满意度,是一个良性循环。

我在 Facebook 内部工具团队工作时,我们每个季度都通过调查问卷收集开发人员的建议,另外,我们还有 IRC 聊天室类似的工具供讨论和吐槽。这些反馈,都会成为工具团队调整工作内容和优先级的依据。

至于调查问卷的内容,具体来说可以关注以下这几个方面:冲刺的准备充分度、团队沟通有效性、冲刺过程效率、交付价值如何、交付信心如何、对产品方向及路线的兴奋度等。

针对个人研发效能作评价,可以采用类似 360 度绩效考评的方式来收集同事之间的评价。评价的标准基于在用户价值输出上做出的贡献,包括自身产生的价值,以及帮助团队成员产生的用户价值。如果一个员工可以很好地产出用户价值,那他的研发效率通常不会差。其实,Facebook 就是使用这种方式来评价员工效能的,虽然主观但很公正。

我整理了一张表格,列了一些可以用来收集反馈的问题,涵盖开发效率、质量、团队贡献等方面。

图 3 可以用来收集反馈的问题

第四,关注个人维度的指标提高效能

个人效能相关的度量,直接反映开发人员的开发效率和满意度,对团队产出影响很大。所以,作为管理者 / 内部效能团队,应该关注开发人员的高频活动,并自动化和优化这些步骤,让开发人员能专注开发。

一般来说,“个人调测环境构建速度”是一个比较重要的指标。它描述的是开发人员在本地做好一个改动,到能够进行本地调测的时长。开发人员每次修改自行验证都要经历这个步骤,对它进行优化非常有用。

我以前在 Facebook 的时候,后端代码及网站的绝大部分修改都可以在一分钟之内在本地开发机器上使用线上数据进行验证,非常爽快,效率极高。

但是,我曾经在其他公司见到过这样一种情况:一个修改需要在本地编码,上传到服务器编译,再通过工具下载到另外一个机器上验证。这个过程至少需要一个小时,在这种情况下,即使是在验证时发现一个简单错误,修改后简单验证也需要再花费一个小时。

不难想象这种情况下开发者的沮丧心情。如果能解决个人效能维度上的痛点,必然对提高产出和士气有重大作用。

小结

好了,这就是我今天要和你分享的效能度量的指标和方法了。接下来,我与你总结下今天的核心知识点。

首先,我将度量指标分为了准确度、速度、质量和个人效能 4 个方面,并列举了 40 多个具体指标。然后,我根据软件研发以及效能度量的特点,给出了 1 个原则和 4 种建议的度量方法。原则是不要与绩效挂钩;度量方法包括:目标驱动,度量对的事;先从全局上找瓶颈,再深入细节;通过主观的方式来评价、提高效能;关注个人维度的指标提高效能。

我把这 4 种方法,以及基本思路总结成了一张表格,方便你理解与记忆。

图 4 4 种推荐的度量方法

研发效能的度量很灵活,也很容易踩坑。所以,我希望上面的这些原则和方法能够作为你实施度量的参考,从而达到以下几个目的:

  • 跟踪团队的表现、提高团队的绩效;
  • 提高项目计划的精确度;
  • 了解流程是否高效,寻找需要改进的关键领域。

最后,我来分享一下我个人对效能度量的两大感受:

  1. 度量只是工具,不是目的。切记度量的真正的目标是提高效能,不要舍本逐末。比如说,如果度量花费的时间超过了收益,那就不要去做。
  2. 虽然我们推崇数字驱动,但在效能的度量上,不要迷信数字,适当使用主观反馈效果反而更好。

思考题

你能从下面这张累积流程图中,看出什么问题吗?

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

© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
02 | 效能度量:效果不好甚至有副作用,怎么回事?
下一篇
04 | 流程优化:怎样才能让敏捷、精益真正为我所用?
 写留言

精选留言(18)

  • Johnson
    2019-08-28
    本地构建是指的工程师在自己的笔记本上?还是说工程师通过本地笔记本登录到的开发服务器上?工程师的笔记本环境有可能有多种,比如有的同事入职时选的PC,有的选的MAC,如果在笔记本上构建,那这个环境很不好维护啊
    展开

    作者回复: 本地构建指的是在自己的开发机器上,也就是代码所在的地方进行构建。如果代码是在远程的开发服务器上,那这个本地指的就是远程的服务器,如果代码是在笔记本上,那这个本地就是笔记本。

    在你的例子当中,如果大量的开发都是在笔记本上进行的。那么虽然环境维护有一些麻烦。还是很值得投资的。大不了在Windows上面做一套环境,在Mac上面做一套环境。具体方法,最直接的是使用脚本自动化。

    另外这个环境最好和你们的生产环境保持一致。避免在本地构建出来的东西,在生产环境上会出现因为环境不同而造成问题。

    3
    3
  • Xin
    2019-08-28
    需求评审完后在开发过程中频繁加需求及修改,开发过程中不停应对不同部门的咨询打断各种都强调优先级,这是最痛的😂
    展开

    作者回复: 这个问题在开发资源被共享的情况下的确是很常见,也很棘手。我看到有两个可能的处理办法,第一个是。有一个统一的接口人来对接这些优先调节优先级的要求,挡住一些,并且根据全局情况进行合理调节。第二个方法是改变开发资源的共享方式,从按智能划分团队,转变成按产品划分团队,或者是矩阵式管理。

    2
  • witluo
    2019-08-28
    看质不看量,都是耍流氓
    展开
    3
    1
  • Criss Chan
    2019-08-28
    问题:dev工作block了
    展开

    作者回复: 对啦。厉害!

    1
  • 李双喆
    2019-08-28
    学习!每个方面都是内功和外功的修炼!
    展开

    作者回复: 👍👍

    1
  • 2019-09-01
    不能把效能度量与绩效挂钩,看到这突然有种豁然开朗的感觉,也许这就是效能很糟糕的"症结"所在。但是问题又来了,效能度量与绩效脱钩后,如何评估绩效?尤其对于中大型公司来说,数字化的绩效最简单也最直观,也没有人为因素的掺杂,也能被大家接受。
    展开

    作者回复: > 数字化的绩效最简单也最直观,也没有人为因素的掺杂,也能被大家接受。

    这个的确,这也是很多管理者倾向使用这种数字度量进行管理的重要出发点:至少帮助我打考评!而且有数字支持,员工也难以提出异议。

    但是因为研发的特殊性,我看到的情况是客观收集数据直接用来打考评不行(可以做参考)。反而是主观收集反馈来做考评才有效(难点是做到公正)。

  • sde
    2019-08-31
    我个人觉得和绩效挂钩并不是问题,关键是其占个人整体绩效的比重
    适当的权重是可以激励开发关注效能的。
    展开

    作者回复: 这个主要看度量的方法。如果是用死板的通过工具收集数据,而且明确强相关,我觉得还是不行。比如,“完成功能点数量个数在团队排名,决定10%绩效排名”。这种占比虽然只有1/10,我觉得还是会出现数字游戏。

    你能举一个具体你觉得会有效的例子吗?

  • Jerry
    2019-08-29
    效能度量不要与绩效挂钩,而应该作为参考和工具,帮助团队提高效能。先从全局上找瓶颈,再深入细节……总结得真好。另外请教下,在facebook全局指标和局部指标之间会有一些关联么

    作者回复: > 在facebook全局指标和局部指标之间会有一些关联么

    我不太清楚你的问题。全局指标一般不是局部指标组合而成的吗?能重新解释一下你的问题吗?

    2
  • 八哥
    2019-08-29
    做云计算相关产品的,本地开发和测试,环境都不具备,写好代码都是要到现网环境联调。新手在高速公路开车一样。需要度量指标,首先很多内容要信息化,不应该在纸上,现在jira和conf用的就很糟糕。

    作者回复: > 本地开发和测试,环境都不具备,写好代码都是要到现网环境联调
    这个要尽量把可以本地验证的地方本地实现。应该能有一些workaround能做一部分吧。同时尽量在本地模拟线上环境。

    >...信息化...
    wiki用好效果就很好。conf一个常见用法是每个团队内部使用,外部不可见。我觉得很不可取。最好全公司用一个,所有可以公开的信息都公开,放到上面

  • 囧囧冰淇淋
    2019-08-28

    老板:效能度量不能与绩效挂钩,那我怎么知道你们提高了啊?我现在看到的就是,我们的产品经常上不了线,产品部和运营部那边经常抱怨。我看了下XXX公司(同行但非顶尖),他们用的这套绩效考核很有用,我们要多向他们学习学习,这套指标先定下了。

    在小公司比较容易发生,老板会拿比自己好一些的同行对比。大公司不知道会不会发生这种质疑:因为业务的进展缓慢,从上至下产生不信任感,导致团队开始埋怨和打混。

    以下是自我理解:
    老板:
    1.需要开明,问题可以从外部去参考,但不能直接套用到团队上,要考虑公司整体情况。比如需求经常被更改,经常着急上线,那就要把产品,运营,软件一起叫进来讨论,坚决抵制互相甩锅,而是每个团队做哪些可以便利下一个部门效率,形成一个整体提升。
    2.允许员工反对,倾听员工的想法,让相关人员围绕问题一起谈谈,可以不用马上得到答案,把它当成一种倾听、持续改进的沟通方法。
    3.允许一定的失败,小公司是在磕磕碰碰中长大的,经验欠缺,人员不齐,不要出了问题就大骂一通。
    4.关心员工,成功或者失败了,大家都付出了努力,还可能经常加班,加班可是没有工资;失败后的大骂,成功后的轻描淡写都让给团队丧气。
    5.提供一些工具或者课程帮助员工。
    6.公司和团队成长后提供更好的待遇。
    展开

    作者回复: 从我的经验看,对开发工作,绩效考核通过360反馈,通过相对主观的方式,反而比较有效。

    10
  • 许童童
    2019-08-28
    思考题:可以看出dev逐渐减少到了没有,全部进入backlog了。可能的原因是开发停止了、开发被流程阻塞了。
    展开

    作者回复: 对的对的!

    通过这个图一下子就可以看到问题。

  • 舒偌一
    2019-08-28
    葛老师,小公司没有参考点,怎么衡量研发效能有问题?能不能提供一个参考?

    作者回复: 这个一般来说,效能方面肯定是有很大提升空间的 :)

    我觉得,可以用我文章中提到的,用NPS方法对开发人员进行研发环境满意度的调研,你会发现问题的。然后尝试解决中间最痛的点,看看效果。

  • 舒偌一
    2019-08-28
    大概在11前产生了大量的bug,之后在修改之前的任务,dev没有接受新任务。

    作者回复: 答对了!赞

  • Geek_eddy
    2019-08-28
    本地开发机使用线上数据验证对开发来说确实很爽,Facebook是如何保证线上数据安全性?

    作者回复: 这一部分我也不是特别了解细节。但是知道主要原则大概有几个:
    1. 数据库中都有特定的Field指出是否是测试数据
    2. 能够快速恢复。这个是基本
    3. 强大的监控。开发人员账号触碰到生产数据,如果是TA本人不应该有权限的,必须要有任务ID才能有Access。这些行为都会被记录下来。

  • gucs
    2019-08-28
    wip 多,导致周期长,不能快速流动
    展开

    作者回复: WIP是大概100左右,但是我们不清楚团队多大,所以不能确定是否这个WIP太大。

  • 杜杰
    2019-08-28
    思考题分析啊~

    1.dev休假
    2.购买了软件产品
    3.需求做不了
    展开

    作者回复: 从图上看到的是开发被阻塞了,没有接受新的开发任务。你这个直接给出开发被阻塞的三个可能原因,哈哈,厉害 :)

  • 寒光
    2019-08-28
    整体审视,发现局部问题。
    以终为始,不拿度量数据做考核。
    工具辅助,人工度量相结合。
    没有银弹,找到适合自己的。
    想问下老师,像传统的企业软件或者IT管理类软件,用户体验指标往往反映不出真实的价值,因为极端点讲,强调的是管控,体现的是企业管理者意志。开发人员往往是初级程序员,创造性要求也不那么高,所以,很容易让管理者进行“量化管理”,于是,各种管控指标就出台了,但往往违背了初心。关于这类情况的度量指标,老师是否有相关的建议?因为它和互联网软件的确有太多的不一样。
    展开

    作者回复: 用户体验好,应该长期会和销量挂钩吧。

    退一步说,如果用户体验指标反映不出真实的价值,那就说明用户体验不重要,这个时候就需要寻找到真正的价值去衡量产出。在你们的具体情况下,产品的什么方面是真正的价值?

  • 杜杰
    2019-08-28
    思考题,感觉是需求评估较大实际开发很快完成 或者引入了新的产品解决了需求问题。活着是前期开发排的太满 后面没得开发了
    展开

    作者回复: 从图上看到的是开发被阻塞了。这个时候,这个CFD就完成了它的重要作用:帮我们发现问题。下一步是去调查为什么开发没有接受新任务了。你说的几点都可能是原因。

您好,当前有专业客服人员在线,让我们来帮助您吧。