草庐IT

产研指南针的量化指标实践笔记

车江毅的博客 2023-03-28 原文

背景

在公司和业务发展到一定阶段,高层管理者会逐步期望从直觉化的管理逐步转向量化的关键指标管理;同时从hr层面okr和kpi的考核逐步从直觉化的定性考核,转变为数据化指标考核为主做评估和分析。此时中层管理者要实践关键指标读取和分析,及对团队成员从长期关注,变成短期快速反馈并推进绩效改进。

难点

1. 研发成果难以评估:研发属于研究性的脑力输出,不同能力输出的结果是不一样的,难以通过可见性的指标精准评估成果的好坏。
2. 研发指标容易作弊:研发指标难以通过自动化的标准准确输出可靠,诸如代码质量只能是相对的。特定的指标容易通过作弊的方式达成(比如代码行数)。
3. 大量重复性的统计:量化指标需要大量研发过程性数据的统计,需要打通多种过程工具,按照多维度产出报表,对于管理者耗时耗力。
4. 过度的透明化,造成目标转移:定性考核往往以结果为目标(虽然容易造成大锅饭),结果目标明确。量化考核往往以人和团队为衡量,量化结果容易造成团队内卷,变成指标为目标,而非业务为目标(而个人成果难以量化对齐业务结果)。

思考

1. 研发应当以多个指标考核结果,分别从用户的反馈,运营的结果,过程的量化,质量情况(故障率),hr的统一管理标准,360评价,目标的kpi/okr的综合结果,计算比较合理的权重分值(可以自动化算出合理权重)。
而实际落地需要根据实际业务的场景,团队的规模情况及公司的管理策略及文化价值观决定,定义核心的几个关键指标(毕竟每家公司和管理的方法论都是不一样的,比如高效能研发体系建设阐述的管理一体化的实践)为佳,过于全面反而耗时耗力。通过多维指标综合判定和行政管理,可以解决单一指标作弊和不准的问题。
2. 研发的体系,人员组成,架构方案在不同公司,不同业务场景,包括管理工具肯定都是不一样的。即便管理者的方法论或许一样,但是过程性的数据来源肯定是不一样的。重复性的统计输出,肯定会造成重复性的劳动,所以同样指标的分析和统计肯定要系统化和工具化,去解决重复性的问题。通过自研投入(非开源)来解决实际方案和数据源不一样的等问题。
3. 研发的指标不应当过度透明化公开(对个人透明),但是要体现团队优秀人员的指标,让个人了解差距和问题,激励个人成长。团队管理最终应该以人为本,考虑人本身管理的差异和定位,而量化指标应当是结合实际情况,去分析管理问题的依据和问题点,反推管理的不足和问题的本质因素,从而推进个人效能提升和改进。所以量化指标应该重视并分析(应该作为微管理的辅助参考数据),但不应过于倡导造成团队内卷(对于没有实在无法对齐业务目标结果的同学可以考虑直接优化,而非通过指标去过度评判)。
 

实践

不同公司的研发管理工具和数据分析工具都是不一样的,诸如结合小型研发团队(50人以内),采用飞书协同,禅道管理,sonar质量分析,gitlab管理代码,java/react开发及标准化的研发体系的基础上,我们自研自己的指南针量化指标小工具(荣誉榜),去解决人员管理对于快速复盘效能情况,快速发现管理问题,快速反馈人员状态,量化数据考核指标的问题。我们提出几个关键研发指标去参考和衡量研发个人的产出和状态,分别为平均工作时长,累计加班时长,迟到/缺卡次数,任务数,任务工时,制造Bug数,发现Bug数,代码提交数,代码不合格(未解决数量),性能差接口数,故障数。在这些指标量化的基础上,通过同类型研发角色(测试,前端,后端)的多维度对比,去思考研发人员优良差的情况和原因。

人事维度关键指标

平均工作时长:系统打通飞书api,获取飞书每日的打卡时间,排除请假,缺卡,迟到等因素外的正常上班的时长为准。
累计加班时长:系统打通飞书api,获取飞书每日正常下班之后,24点之前的加班时长为累计。
迟到/缺卡次数:系统打通飞书api,获取飞书每日迟到和缺卡的次数(排除请假)。
上班时长是一些基础性的数据,也是hr比较关注的核心数据指标。管理者一般也期望通过上班时长去了解团队成员和整体的激情和状态。

过程维度关键指标

任务数:系统打通禅道,获取禅道每人的工作任务明细,并统计数量,包括任务的分布甘特图等情况。
任务工时:系统打通禅道,获取禅道每人的任务的开始和完成时间(预估时间),包括统计每人的工作整体饱和度和每日的饱和度情况。
制造bug数:系统打通禅道,获取禅道每人的bug数的情况和每日分布情况。
发现bug数:系统打通禅道,获取禅道提交bug数量,主要统计分析测试人员的工作情况。
代码提交数:系统打通gitlab,获取每个人的gitlab代码提交的数量,主要是统计分析每个人的代码新增的代码数量减去删除代码数量。实操过程中我们发现一些异常的代码管理会造成数据差异过大的情况。诸如删除项目日志(已进入仓库),新建项目时候的脚手架代码数,格式化代码等问题。
日常的项目沟通到立项阶段,以飞书协同文档为主(多维表格项目管理模板),在项目管理之外所有已确定的工作任务录入禅道,以禅道做项目管理模板,进行统一的集中式管理,这个也是目前公司要求的通用管理模式。但无论何种模式下,管理者在这个阶段比较关注的是人员的工作饱和度和过程质量两个关键问题及相应的关键指标。

质量维度的关键指标

代码不合格(未解决数量):系统打通sonar,获取sonar代码分析之后的质量情况,统计到每个人的代码异常情况。比如java会按照阿里巴巴的代码编写规范做标准分析。
故障数:系统打通飞书文档,我们通过故障群统一接收线上故障信息,通过机器人自动录入到飞书文档进行归档,我们通过2周一次复盘故障的责任人,级别,类别,时长(故障等级标准),超过一定级别的故障需要有故障报告并通知关键成员;而故障数是最重要的质量参考指标。
性能差接口数: 系统打通“全链路自动化压测平台”,通过录制和回访模式,自动化统计性能差的接口并归类到具体研发。
代码实际设计情况一般来说很难通过自动化的方式去量化去判别,人工codereview也难以精准判别;在人员有限的资源下,通过真实的质量反馈和代码规范是关键质量考核参考。
 

北极星荣誉榜

主要有两个功能:荣誉排行榜和多维分析报告。
荣誉排行榜:面向普通开发人员,去公开最近两周优秀的指标排行榜,去让成员了解自身在团队内的表现情况,了解并分析差距的因素。
多维分析报告:面向管理人员,对同类型团队成员对比表现情况,实时分析每周(近期)的真实表现情况,去了解和分析量化数据背后的真实因素。将定性管理转变为数据管理模式,将直觉管理转化量化管理模式;从而快速,及时,有效的分析项目问题和人员情况,尽快介入解决管理问题。
 
如图:
 
 

业内参考

万位数字CTO分享他们的量化指标维度实践,并将之作为量化考核。如图:
 
 
搜狐社交总经理分享他们的六象限雷达图,将之作为量化结果管理辅助参考。如图:
 

总结

作为管理者,我们需要思考虽然管理方法,指标及工具能够带给我们的一些便利性和实践,但是我们也谨慎的意识到工具和方法终究在管理之术的范畴,管理本身面对的是人,最终要以人为本,核心关键在于目标和激励(五个维度构建研发管理体系阐述了研发管理整体性的思考)。同时管理者也要清晰,管理的职能仅仅是达成目标的手段和过程,而我们最终要以业务和结果为目标!!!
 
以上心得,多做反思,勤做笔记,与君共勉~
 
by 车江毅
2022-11-10

 

 

有关产研指南针的量化指标实践笔记的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - Ruby on Rails : . 常量化 : wrong constant name error? - 2

    我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby​​常量:Content2而不是content2。Aconstantnamestart

  3. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  4. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  5. ruby-on-rails - Rails 中同一个类的多个关联的最佳实践? - 2

    我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来

  6. ruby-on-rails - 向 Rails 3 添加 Ruby 扩展方法的最佳实践? - 2

    我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion

  7. Ruby 最佳实践 : working with classes - 2

    参见下面的示例,我想最好使用第二种方法,但第一种也可以。哪种方法最好,使用另一种的后果是什么?classTestdefstartp"started"endtest=Test.newtest.startendclassTest2defstartp"started"endendtest2=Test2.newtest2.start 最佳答案 我肯定会说第二种变体更有意义。第一个不会导致错误,但对象实例化完全过时且毫无意义。外部变量在类的范围内不可见:var="string"classAvar=A.newendputsvar#=>strin

  8. Ruby 和指南针路径与 yeoman 项目 - 2

    我安装了ruby​​、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom

  9. ruby - 存储外部 API 的密码 - 最佳实践 - 2

    如果我构建了一个应用程序来访问来自Gmail、Twitter和Facebook的一些数据,并且我希望用户只需输入一次他们的身份验证信息,并且在几天或几周后重置,那会怎样是在Ruby中动态执行此操作的最佳方法吗?我看到很多人只是拥有他们客户/用户凭证的配置文件,如下所示:gmail_account:username:myClientpassword:myClientsPassword这看起来a)非常不安全,b)如果我想为成千上万的用户存储此类信息,它就无法工作。推荐的方法是什么?我希望能够在这些服务之上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。

  10. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

随机推荐