研发考核难的本质是因为这三个特点

大家好,我是Z哥。我坦白,这篇是早就写好的库存文章,包括上周的那篇也是。ef59bccee03913e1b9b025c9ec8f316e.png

原因是最近跳槽了,到新公司忙得飞起,都没时间写文章。还好我之前未雨绸缪准备了几篇提前写好的文章作为余量~

我尽量能保持不断更,如果实在顶不住就周五的时候给大家请假哈。

好了,回到这次聊的正题。

研发考核难是整个软件开发领域众所周知的问题,甚至可以说是跨世纪的难题了(上个世纪开始至今未被有效解决)。

近期我对这个问题有了一些新的思考,在这里和大家分享交流一下。

很多人觉得因为研发考核很难考,所以索性就不考了。这个就有点因噎废食了。

首先我们要搞清楚,考核存在的意义是什么?

我的理解是:为了达成团队的共同目标。为了更好的管理团队、驱动团队力往一处使。

但是管理大师德鲁克又说过:

你如果无法度量它,就无法管理它。

德鲁克

这句话既然能被各个时代的管理者所追捧,存在了几十年,自然有它的道理。

所以,不管我们是不是为了考核,都得找到度量的方式方法。

有些团队的确找到了不少度量指标,但是大多偏向技术层面,包括我们团队之前也是如此。

这些指标一旦在具体实施之后往往发现效果甚至不如没有考核的时候。这个背后的原因也有很多文章提到过,就是那些指标不适合考核。

也有一些人经历了上面这个阶段后觉得研发的考核不好做,不好量化。实则是因为找不到那种直击要害的关键指标。

从这个问题的本质上来说,大家之所以觉得研发考核难本质是由于研发工作的三个特点导致的。

01  无法标准化

这里的无法标准化并不只是难以度量,而是说同样完成一个任务,不同的人会有不同的做法,最终的结果也可能会差别很大。

比如,同一个任务,有的人做了 5 天,有的人做了 10 天;有的人喜欢花很多时间在前期的设计阶段,有的人则会花更多时间在后期的自测上。但是你也不能说一定是谁的方式更好。

02  工作透明度低

实现同样一个功能,如果有合理的代码封装,可能只要 100 行代码。但是如果不花时间去构思封装,那么可能是 500 行,甚至是 1000 行。

此时,如果没有第三者进行 codereview 的话,甚至可能会觉得写 1000 行代码的人产出更大。

03  工作时间的碎片化

不得不说,大多数人的工作时间其实大部分时候很难完全由自己掌控,一会有人找你问个事,一会需要参加一个会,一会又来个电话接一下。

这些被动的意外之事都会使得做度量这件事变得困难,甚至还会将原来的计划打乱,导致某些考核指标出现失真。

Z哥觉得研发考核指标怎么定这件事应该分为两个问题去看。

  • 能够度量的指标有哪些?

  • 怎么考核?

这两个问题之间其实没有必然联系,如果老想着一箭双雕,一次解决两个问题,就会陷入前面提到的困境中。

我认为大部分的指标是用来作为帮助决策的信息源,而用于考核的指标不一定要多,要有业务价值。具体我来展开说说。

/01  能够度量的指标有哪些/

相信有不少指标已经马上在你的脑海中跳出来了:

  • 代码行数

  • 工时

  • bug 数

  • ……

很多讲考核的文章都会对这些指标嗤之以鼻,因为这些指标不适合用来考核,这是针对流水线工作性质的考核产物。这点不否认。

但是也不能否认,这些简单的指标中也蕴含着有价值的信息。

因此在我的理念里,认为不应该主动放弃任何能被度量的指标。正如前面所说,研发工作本身就具有无法标准化、工作透明度低、工作时间的碎片化的特点。我们好不容易找到一些指标能够帮助我们更清楚的认识我们的工作做得到底如何,为什么不要呢?

不适合考核不等于我们可以忽略他们。这也是我认为要将这事分为「能够度量的指标有哪些?」和「怎么考核?」的原因。

除了这些大家都知道的指标,还有很多指标可以被度量。它们主要分为两个维度:过程指标和结果指标。

常见的过程指标有:需求响应周期、发布前置时间、交付吞吐量、线上问题平均解决时长等;结果指标有:日均新增 bug 数,日均 bug 库存数,线上问题数量等。

如果你所在的团队对工程效率比较重视,相信还有不少指标可以被度量出来。

这些指标有什么用呢,我们需要每天观察他们的变化,便于及时发现团队里正在发生的变化是否符合预期。比如,

  • 最近并没有太多并行开发的版本,为什么平均交付时间反而变长了?是不是不够敏捷?

  • 比如最近生产环境的 bug 数明显变多了,是不是质量团队出了什么状况?

  • ……

/02  怎么考核?/

用上面列出的这些指标来考核吗?自然不是。

Z哥认为考核还是得从业务下手,要想办法找到与技术有一定关系的业务指标,比如,DAU、用户平均停留时长等等。

可能很多人第一眼会觉得说,这些指标有很大比例是由业务决定的,技术在其中起不了什么作用。

其实并不然,你想象一下。如果我们的拉新用户承接页的稳定性不好,或者核心业务链路经常出错,这对 DAU 和用户平均停留时长必然会造成不好的影响。所以,业务指标真的与技术无关吗?其实并不然。

怎么落地为考核呢?我的思路是建立在两个逻辑之上的:

  1. 业务指标的移动平均值在一段时间里是一条趋势向上或向下的曲线。平均范围越长,曲线越平滑。

  2. 技术在短期不能显著提高业务指标,但可以降低业务指标。

基于这两个逻辑在落地为考核的时候有两种方案。

一种是长周期考核,比如每半年或者每年一次的 OKR 考核。这种考核直接用指标在开始时和结束时的差值即可,大多数的偶发性事件直接被平滑掉了。

另一种是每个月都要进行的短期考核。这种考核建议使用环比变化作为依据。比如比上个月提升了就奖励,降低了就惩罚,这样从长期来看,偶发性事件带来的影响也被平滑掉了。当然这里的奖励和惩罚不一定是物质形式的,也可以是精神形式。

可能有的人会觉得,这样的考核如果在业务快速发展期,不是躺赚吗?

是的没错,只要技术能支撑快速发展的业务,不拖业务的后腿,我认为就应该奖励。至于是不是躺赚,关键还是看选择的业务指标以及如何制定具体的奖惩尺度。

今天就聊这么多吧。

研发考核这事和研发工作一样,没有「Sliver Bullet」,我今天和大家聊的也只是我的一家之言,欢迎大家一起探讨。

本质上,我们也是在讨论,如何更好地向非技术人员展示我们技术人工作成果的好坏。

好了,总结一下。

这篇呢,Z哥和你分享了我对研发考核这件事的看法。

首先,我认为考核还是要考的,不考核肯定不行。研发工作性质的三个特点导致考核指标很难定。

  1. 无法标准化

  2. 工作透明度低

  3. 工作时间的碎片化

所以,我的建议是找指标管找指标,考核管考核,两件事分开看。

我们要尽可能多的收集研发过程和衡量结果的指标,它们不一定用来考核,但可以用来及时发现团队中的潜在问题。

关于考核指标还是建议使用业务相关的指标,从中挑选有一定技术影响程度的。也分享了两种落地方案,分别是长期用 OKR,短期用环比来考核。

希望对你有所启发。抛砖引玉,欢迎在留言区分享你的观点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

点击User Profile Service Application 报错

给客户部署的MOSS2010 SP1版本,部署完毕后,发现点击User Profile Service Application服务进行配置的时候,总是报错,上网查了一下,发现原来是微软的一个补丁包没有安装,于是下载了这个几乎1G的补丁包&#…

剑指offer-面试题13.在O(1)时间删除链表节点

题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 链表节点与函数的定义如下。 通常我们删除某个节点都是从头开始遍历到需要删除节点的前一个节点。 然后使得该节点的next指向删除节点的next即可,这样看来删除一个节点 的复杂度为O(n)…

c语言程序stm8s,stm8s的c语言编程例程

stm8s的c语言编程例程实例一:控制灯的亮灭(或者蜂鸣器响,只要连接相应端口就可以了):#i nclude "stm8s.h"〃头文件#defi ne ulong un sig ned long///void delay( ulong i){ulo ng j;for(j0;j{;}} 延时函数void mai n( …

python画图比赛_Python选修课第二届Turtle绘图大赛

20181101173,荀梓恒20181101197,叶普旭代码如下:import turtle as tt.setup(width0.5, height0.75, startxNone, startyNone)t.hideturtle()t.speed(10)t.pensize(2)t.penup()t.goto(100,200)t.pendown()t.setheading(90)t.begin_fill()t.colormode(255)t.fillcolor…

为什么不能一次走遍哥尼斯堡的7座桥

全世界只有3.14 % 的人关注了爆炸吧知识数学的快乐到底有多简单今天,8岁表妹问了一个问题:看到这种类似11?的问题,超模君几乎不用思考就已经知道答案。但为了体现让表妹系统的理解知识,所以我决定......发生在哥尼斯堡…

官宣,11月8号,.NET6+64位VS璀璨面世!

12号,.NET6 RC2发布,13号,VS2022 RC版发布,11月8号,.NET6VS2022C#10 正式版将同时发布,.NET开发将步入全新篇章,各种新语法、新框架、新技术都如约而至,令人期待!然而&am…

IUnknown接口QueryInterface函数介绍

一、COM组件的目标: COM组件的一个主要优势是:便于升级。 要实现这个优势需要满足一下两个条件: 1、运行时从客户程序动态加载和卸载,采用DLL技术可以实现。 2、为了更好的突出DLL的优势,还需要信息隐藏,即…

stc单片机c语言 pdf,STC单片机C语言程序设计 第13章 STC单片机C语言指针.pdf

STC单片机C语言指针主讲:何宾Email :hebinmail.buct.edu.cn2016.03C51编译器中指针的分类Cx51编译器支持使用字符“*”声明变量指针。C51编译器可以执行在标准C中所提供的所有操作。但是,由于8051独一无二的结构以及特点,C51编译器…

小猿学python_小猿圈python入门之转行零基础该如何学Python?

转行零基础学Python编程开发难度大吗?从哪学起?近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大?今天,小编就来为大家解决一下疑惑。学习Python难吗&am…

dojo Quick Start/dojo入门手册--json

那要是我想更换获取到的数据类型,比如json?xml?修改handleAs即可,如: handleAs: "json" dojo.xhrGet({ url: "http://localhost/hello/sayHello.jsp", handleAs: "json", load…

Python-技巧

0.推荐的扩展 requests urilib的替代品 BeautifulSoup4 解析HTML代码 rq 任务队列 selenium 自动化测试工具,模拟浏览器 1.sys.modules, 根据已加载的模块创建对象, 其中 page 为类名 if hasattr(sys.modules[__name__], page):setattr(self, page, getattr(sys.mod…

暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...

全世界只有3.14 % 的人关注了爆炸吧知识提高版,来了!这一份大部分人都没有见过的资料。它是我国出版的第一套数学竞赛的系列图书。前段时间,超模君给大家分享了这一系列的初中版奥数基础篇,得到了大家热烈的反响。于是&#xff0c…

COSCon21 开源文化 (GL) 论坛介绍

“ 点击蓝字 / 关注我们 ”| 作者、编辑:袁睿斌| 设计:朱亿钦、宋传琪第六届中国开源年会 (COSCon21) 将于 10月30-31日 由开源社举办。本次年会重新回归线下,让小伙伴们的面基成为了可能。届时,北京、上海、深圳、成都、珠海、大…

pythonopencv显示图像_OpenCV-Python 读取显示图像 | 五

目标在这里,你将学习如何读取图像,如何显示图像以及如何将其保存回去你将学习以下功能:cv.imread(),cv.imshow(),cv.imwrite()(可选)你将学习如何使用Matplotlib显示图像使用OpenCV读取图像使用cv.imread()函数读取图像…

android wifi

<!-- 以下是使用wifi访问网络所需要的权限 --> <uses-permission android:name"android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name"android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:n…

1.5.2 在IIS上配置ASP.NET(转)

1.5.2 在IIS上配置ASP.NET 在服务器上部署ASP.NET网站时&#xff0c;需要.NET的运行环境.NET Framework。.NET Framework类似于Java的JDK&#xff0c;包含有.NET程序运行环境和命令行编译工具。如果服务器上没有安装.NET Framework&#xff0c;这就需要从微软网站下载&#xf…

51单片机外部地址c语言,cx51与c语言对单片机内部和外部资源变量和地址的定义是否兼容?为什么...

span namewhlm idwhlm原因:classpath没有设置好系统变量->新建->变量名&#xff1a;CLASSPATH 变量值&#xff1a;.;%JAVA_HOME%\lib(CLASSPATH中有一英文句号“.”后跟一个分号&#xff0c;表示当前路径的意思)在Classpath里面你可以直接指定一个包名&#xff0c;比如你…

Resin的安全性ip限制

转载自resin的log、安全性ip限制、内存jvm、keepalive、代码的更新检测等在webapp标签下&#xff0c;可以有很多种安全性配置&#xff0c;下面介绍ip限制、用户米密码限制两种。ip限制在正常访问的web-app标签下&#xff0c;增加一个security-constrain标签即可&#xff0c;如下…

你和女朋友的婚后老年生活!

1 厉害了&#xff0c;连扇子都是爱你的形状~2 一个漂亮的后空翻3 长得大了不起啊&#xff01;4 哈哈哈哈哈哈哈是这样5 哈哈哈哈哈防不胜防&#xff01;6 教科书般的标准答案你点的每个赞&#xff0c;我都认真当成了喜欢

实现一个基于 IConfiguration 的低配版 FeatureFlag

实现一个基于 IConfiguration 的低配版 FeatureFlagIntro在我们的应用中&#xff0c;可能有一些配置开关的需求&#xff0c;某些功能是否启用使用一个配置开关&#xff0c;用的时候就打开&#xff0c;不用的时候就关掉&#xff0c;于是基于 .NET Core 的里配置体系写了一个简单…