直播回顾 | 京东科技研发效能度量的大体系与小实践

news2024/12/30 1:36:08

9 月 27 日思码逸 DevData Talks 邀请到了京东科技测试架构师刘刚。他以《研发效能度量之大体系小实践》为主题,分享了如何以集团的研发效能度量体系作为指引,在所属部门落地适应自己团队和业务特点的度量体系,并取得有效的改进成果。其中他还详细分享了团队分 5 个阶段,一步步建立研发效能度量体系和工具平台的过程。

由于篇幅有限,本文仅整理总结了演讲亮点,如果大家希望了解更多细节,可在文末扫码获取PPT、观看视频回顾。以下为文字回顾:

图片

我是来自京东科技的刘刚,很高兴给大家分享《研发效能度量之大体系小实践》。我们部门属于科技体系下 to B 业务的一个部门,我们已经做了两年左右的研发效能实践,收获了不少成果,也走过不少弯路,借这个机会跟大家分享、交流。我的分享分为五个部分:

1. 集团研发效能度量体系介绍

2. 研发效能小实践前置动作

3. 定制化度量体系

4. 持续改进&持续实践

5. 总结

集团研发效能度量体系介绍

首先,如下图所示,是京东集团的研发效能度量体系。集团的度量体系的核心是产研价值驱动,例如让团队将构建的系统与具体的业务目标相关联,从而凸显出研发为业务带来的价值。

图片

我们的研发效能度量体系有四个维度:收入、成本、效率、体验,形成一套量化模型,再结合管理机制来有效地度量我们的研发效能,核心就是刚刚说的产研价值的驱动。基于此也带来一个命题,就是“正确地做事情”。通常在一个项目开始的时候,业务主管会确定项目的方向,到研发团队这一层的时候我们要考虑的就是“正确地做事情”,拆解下来就是回答三个问题:

  • 产研资源投入到哪里去了?

  • 投入产出是否合理?

  • 产研资源如何更有效调配?

如果我们能解答这三个问题,我们不仅可以达到研发效能的目标,还可以给业务带来更有效的支撑。

对于研发效能来讲,我们倡导从管理视角出发,分桶划分基于产研如何管理投入、如何衡量价值。对于不同的研发团队的研发效能目标,我们划分出了三大类、六小类,如下图所示。举个例子,你的团队所做的业务是对内的还是对外的?对内的很好理解。比如我们的统一登录系统,它服务于其他业务系统,在其中有百分之多少的价值是由登录系统体现的,那就是它的价值。对外的业务实现就比较直接了,可以理解为对外直接输出产品,营收就是直接价值的体现。

图片

另外两类就是技术布局、基础支撑,这两个都对内部产生的价值更大。比如京东有很多中间件,需要很多研发团队去支持,它其实并不直接与业务挂钩,但对我们的业务有重要支撑作用。

图片

整个集团的度量框架可以用这样一张图表示,如上图所示,从外往里看,客户和价值是相对优先级更高的,因为我们整个研发体系就是为客户服务的,客户既是出发点,也是终点,只有服务好客户,研发工作才更有意义。再向图的内部看,更多的是产品团队成熟度如何?敏捷成熟度如何?DevOps 的成熟度如何?大家工作积极性如何?针对日常的产出,我们有从多、快、好、省四个维度进行衡量。我们的效能衡量有几个原则:

  • 聚焦价值流系统优化而不是局部优化

  • 聚焦成果而不是某阶段工作输出

  • 聚焦敏捷团队而不是个体贡献者

  • 数据是客观的

  • 异常数据不是被剔除的,而是被用来识别和分析的

研发效能小实践前置动作

目前根据我的理解,在部门中,驱动研发效能的基本上有两类角色,一类是项目管理,他们驱动整个研发效能度量,另一类是测试 QA,他们本身就在产研流程中,对每个环节都比较清晰,而且能第一时间快速感知到研发效能的提升点在哪里。QA 本身需要建立质量保障流程,保障好研发的代码质量、需求质量。当 QA 成为研发效能的驱动者之后,就需要从“聚焦质量”的视角,上升至“产研全生命周期”的视角,然后介入每一个环节,促进团队效能的提升。同时,做研发效能其实也是对 QA 自身价值的提升。这是在做研发效能实践之前的前置动作之一,就是观念与自身定位上的改变。

第二个前置动作就是做充分的调研,尽量避免踩坑。在业内有大量的书籍和文章可以学习,从中我们能了解有哪些坑需要规避,有哪些做度量的方法论可以借鉴、学习,如何建立指标体系等,当认知提升后,可以避免走弯路。

还有一个前置动作就是在小团队内建立共识。我建议先分析团队当前遇到的问题。因为每个人对研发效能的理解不同,甚至怀疑它的有效性。那么你可以先找出目前团队比较突出的问题是什么,然后试图通过一些相关指标来对其进行客观衡量。因为对“问题”的主观看法千差万别,但当我们将它客观量化之后,就会更容易让大家对问题有清晰、客观的认知,更容易形成共识。当大家关注于客观指标,并围绕它进行改进后,也就会意识到研发效能度量的意义。那么这对于后续深入做研发效能会更容易让团队接受。

另一方面,在实操上,我建议最开始的时候可以采用一些低成本的方式,比如先用一个 Excel,统计一些数据,然后汇总加工形成一些图标,当这种简单的方式运行一段时间后,达到一定效果了,或者是团队对项目度量有更高要求的时候,再去找一些低代码平台搭建数据大屏。当研发效能工作进展到一定层次后,如果需要做更多维度的度量,那么再考虑是否要自建系统处理数据,并引入 BI 平台。

定制化度量体系

图片

我们团队是依据集团的研发效能白皮书定制了研发效能度量体系。指标分为两类:

  • 北极星指标,为我们指引方向,每个维度会有 1-2 个北极星指标,后续会给大家展示。

  • 群星指标,由于北极星指标可能只有一个,你无法确定问题具体出现在哪方面,那么就需要群星指标给你指引,下钻发现问题。同时,群星指标也可以起到多维验证的作用,比如需求吞吐量上升了,结合质量指标,来判断是否效能处于健康水平。

图片

在实践过程中,我们给自己团队定了一个命题:什么是好的团队。我们从五个维度来考虑这个命题,包括团队、效率、价值、质量、产能

图片

产能维度上,由于我们是 To B 的业务,所以我们的目标是交付更多需求,支持业务的快速发展。结合 GSM 的方法,这样的目标可以拆分为几个信号:

1)需求规模基本一致下,单位时间上线更多的需求

2)项目无等待时间人员充分利用,节奏感好

3)产品、用户满意度高

4)很好的支撑满足业务发展规划

最终我们定的北极星指标有两个,一个是人均需求吞吐量,还有一个需求吞吐率。我们也定制了群星指标来作为辅助,具体如上图所示。

图片

在效率维度上,我们的目标是快速交付,交付周期稳定,能快速响应变化。北极星指标我们定了两个,一个是产研交付周期,就是以需求从产出到交付的周期时长来度量;另一个是发布的频率,主要看每周发布数量,它可以客观反映出敏捷程度。具体的指标如上图所示。

图片

质量维度上,如上图所示,我们定了四个北极星指标:

1)故障新增数

2)故障平均恢复时长

3)缺陷新增数量

4)冒烟通过率

其中我们测试会非常关注冒烟通过率,如果通过率差,不仅说明质量差,而且会影响研发的效率,以及整个版本的质量。

图片

团队方面我们的目标是提高组织活力,建设高效团队。在图中可以看到我们定了三个北极星指标,其中目前用的比较多的就是“团队心情指数”。我们每次版本提测时,主开发来评估团队在开发这个版本的过程中心情如何,是比较低迷还是一般,通过这个反馈,我们来观察整个团队的健康情况。

图片

最后一个维度就是“价值”,它属于研发效能度量中比较难度量的一个维度。因为有时候度量周期短,业务目标还未实现,那么就很难去判断是否有业务价值的转化。所以这需要每个业务线去因地制宜,找到适合自己的度量技巧和方法。

持续改进与持续实践

首先我们在做研发效能之前,要建立一些认知:

  • 指标体系不是一日建成的

  • 效能认知不是短时间能提升的

  • Leader的支持非常重要

  • 指标的展示方法和逻辑需要多轮次迭代

  • 效能实践需要各角色共同参与

  • 团队Open的氛围对效能实践成败非常关键

图片

我们团队的实践经历了 5 个环节,如上图所示。首先是初步尝试,如开头所说,我们就是在 Excel 中简单罗列了几个指标,然后进行度量,如下图所示。我们每周会进行评审,回顾这些数据,包括代码新增量、各团队代码评审情况等。同时我们梳理了团队对京东行云 DevOps 平台的使用规范、安全问题、技术债等。

图片

随着指标改进效果的显现,我们发现 Excel 已经无法满足当前的需求,我们就通过一个低代码的平台做了数据大屏,如下图所示。

图片

第二版相对第一版来讲,我们将指标划分出了三个维度,包括规范的维度、质量的维度、效率的维度,针对每个维度展示相关指标。同时,我们还设计了项目健壮度雷达图。为了让相关项目负责人了解项目还存在哪些地方可以提升,我们增加了指标明细、趋势和下探分析功能。

图片

第三版大屏中,我们的度量维度增加到了五个,包括产能、效率、质量、团队和价值,也就是我们最开始讲到那几个维度。在第三版效能大屏建设过程中,我们也增加了北极星指标的评判标准。另外,也引入了五步分析法,引导和规范大家如何去看指标、分析指标以及推进后续改进。

图片

在经历了两年研发效能的建设后,指标度量体系已相对完善,而数据加工处理的逻辑也变得更复杂了,我们在这时候选择开始自建平台。虽然集团内部有一个度量平台,但它只能提供部分数据,无法满足部门的个性化需求,所以我们需要自己搭建一个平台来收集指标,结合 BI 快速定制图表。同时,我们将底层数据开放给各个团队,他们可以基于数据和自己团队的特点进行更多图表定制和分析,以满足更多场景。

我们数据收集的方式比较多元,一方面会通过爬虫的方式收集数据,比如安全工单的数据,另一方面我们京东行云也会提供开放接口,我们通过这个接口会拉取一些需求数据、提测数据、缺陷数据等。另外,还有一些很难收集的指标数据是通过手工录入的。整体的架构如下图所示。

图片

图片

总结

简要总结一下有五点建议:

1、深入理解公司集团层面研效度量体系:对于比较大的公司,肯定是有自己的一套集团的研发效能度量体系,那么就重点参考这套体系,然后结合自己团队的一些特点再形成适合自己团队的度量体系。

2、学会借力,避免自行一套:不要重复造车轮,如果公司内有可用的指标、体系、平台或其他工具,那就用起来,外部有类似的可用的工具也要用起来,不要全都自建。

3、分析团队和现状,循序渐进:要在度量过程中分析团队现状,循序渐进,特别是正向引导团队的认知。

4、保持耐心,不断复盘:当你提供了一套数据之后,肯定会有研发同事提出各种疑问,你要耐心地去解答,并且不断复盘,寻找适合自己团队的改进方法。

5、成功的两个重要因素:一个是要努力去塑造一个开放的团队,探索创新的改进方法。如果你的团队不是很开放,或者老板不open,那么在做研发效能的时候就需要做出一些取舍,比如有的指标需要舍弃掉,避免引发不必要的问题。如果老板清楚知道某些指标的逻辑,那还好,如果他不清楚指标背后可能存在的坑,就很容易出问题。比如千行缺陷率这个指标,它本身是有一些坑的,并不能很好地去衡量不同研发人员的代码质量情况,如果老板不清楚这些细节,他过于看重这个指标,那就会把团队往一个错误的方向引导。

*由于篇幅有限,以上为节选内容,如希望回顾完整讲座,请扫描文末二维码,或点击文末「阅读原文」观看回顾视频

图片

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

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

相关文章

九.镜头知识之CRA(ChiefRay Angle) 主光线角度

九.镜头知识之CRA(ChiefRay Angle) 主光线角度 文章目录 九.镜头知识之**CRA(ChiefRay Angle) 主光线角度**1.9.1 Sensor接收光能1.9.1.1 CRA 定义1.9.1.2 Lens CRA1.9.1.3 Sensor CRA1.9.2 Lens和Sensor搭配的三个重要参数1.9.2.1 ov7251 cra定义:主光线角度为主光线与平行光…

ubuntu18.04 LTS卸载qtcreator-10.0.2

之前通过命令,通过.run文件,安装了Qt Creator 默认安装路径是/opt/ 卸载 在安装路径下,可以看到QtCreatorUninstaller文件 命令行运行该执行文件,会弹出卸载窗口,记得勾选下面的“仅卸载”

如何在不牺牲质量的情况下降低采购成本?

采购成本对许多企业来说都是一笔不小的开支,要在不降低质量的前提下节省开支总是很难兼顾。 现在,端到端的**采购管理软件**8Manage SRM提供了一整套工具和功能,旨在支持采购最佳实践并优化流程。通过以下方式,该软件可以帮助你降…

【SWAT水文模型】SWAT水文模型建立及应用第六期:参数敏感性分析

SWAT CUP的下载及安装参见另一博客-【SWAT水文模型】SWAT-CUP安装及使用。本博客主要介绍SWAT模型参数敏感性分析。 SWAT模型参数敏感性分析(SWAT CUP) 原理率定参数 操作步骤Step1:Step2:Step3: 参考 在 ArcSWAT201…

42.会话划分问题求解(打标)

思路分析: (1)为每一次浏览找到他的上一次浏览时间 lag(view_timestamp, 1, 0) over(partition by user_id order by view_timestamp) as last_view_timestamp (2)为>60s的设置一个初始会话的标签flagif(vi…

REF543KB127AAAA 支持整个企业的有效扩展规划和分析

REF543KB127AAAA 支持整个企业的有效扩展规划和分析 OneStream首席执行官Tom Shea表示:“放眼市场,能够在不依赖数据科学团队或第三方工具的情况下处理大量数据以进行预测决策的FP&A供应商并不多。“我们新的内置人工智能和人工智能功能将使财务和运营团队能够…

【LeetCode刷题(数据结构与算法)】:对链表进行插入排序

给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 插入排序 算法的步骤: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表 每次迭代中,插入排序只从输入数据…

【Leetcode】 96. 不同的二叉搜索树

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5 示例 2: 输入:n 1 输出&#xff1a…

搭建可远程访问的服务:利用Apache和内网穿透实现公网访问

文章目录 前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpolar web ui管理界面3.2 创建公网地址 4. 固定公网地址 前言 Apache作为全球使用较高的Web服务器…

innovus:stripe下不放std cell的命令

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 一些drc问题在place阶段就可以检查出来,比如preroute drc,这种就是standard cell的pin shape和power plan之间的drc问题,可能是和pg via也可能是和stripe。 为了避…

锁定云栖大会!共同见证阿里云大数据+AI产品年度重磅发布及创新

2023 云栖大会将于 10.31-11.2 在杭州云栖小镇举办,深度拥抱大数据AI 核心技术,见证阿里云大数据AI产品年度重磅发布及创新。开放融合的科技展示平台,汇聚生态、启迪想象。在这里,共同探索智能时代的无线机遇和未来。 阿里云大数…

Vue3集成高德地图:快速上手,实现你的业务需求

Vue3集成高德地图 前言一、准备工作1.开发文档2.添加应用 二、使用步骤命令安装2.地图容器创建3.组件引入4.js api 安全密钥5.初始化地图6. 图层6.1 添加 / 设置 / 获取 / 移除图层6.1.1 添加图层6.1.2 设置图层6.1.3 获取图层6.1.4 移除图层 7. 点标记8. 信息窗体8.1 默认信息…

Qt 为Android app添加系统签名

Qt 为Android app添加系统签名 flyfish 一 环境 lsb_release -aNo LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 23.04 Release: 23.04 Codename: lunarQt Creator 10.0.2 构建套件 Qt 6.5.1 Clang arm64-v8a 二 运行Qt 如果没有Qt图标 在终端…

【Springboot】Filter 过滤器的使用

一、基本介绍 过滤器 Filter 作为 Java 三大器之一,在 Java Web 的使用中有很高的地位。所谓过滤器,就是实现了 javax.servlet.Filter 接口的服务器端程序,就是对事物进行过滤的。在 Web 中的过滤器,当然就是对请求进行过滤&#…

2023常见自动化测试工具集合

1、Appium -------> AppUI自动化测试 官网:http://appium.io Appium 是一个移动端自动化测试开源工具,支持iOS 和Android 平台,支持Python、Java 等语言,即同一套Java 或Python 脚本可以同时运行在iOS 和Android平台&#x…

关于图像分割SDK的一些基础认识

随着科技的不断发展,图像分割SDK已经成为了一个备受关注的话题。而在众多图像分割SDK中,美摄图像分割SDK以其独特的功能和优势脱颖而出。本文将从美摄图像分割SDK的企业价值和互联网娱乐方面,介绍其宣传文章的具体写作规范。 在企业价值方面&…

如何用IP地址解决广告精准投放问题

IP地址可以在广告精准投放中发挥关键作用,因为它提供了有关用户的地理位置信息。通过结合IP地址和其他数据,广告公司和平台可以更精准地定位广告受众,从而提高广告投放的效果。以下是一些方式,说明了如何使用IP地址来解决广告精准…

BCT(block change tracking)引起的异机恢复问题

前提说明 exadata 12.1.0.2的环境,做异机恢复,恢复到单机环境。 现象及报错 Rman异机恢复hang住不动(已做set newname),db的alert日志中出现以下报错 --个人印象中还有asmb的trc报错,这次没有找到 原因及解…

限流与下载接口请求数控制

收银台系统相对于互联网应用流量要平稳很多,高峰流量也就平时的三倍,完全是可控的,我们这里用限流主要是控制后台同时下载XLS表格的请求数,因为后台系统要提供大量的导出XLS表格功能,收银员与管理人员需要用我们导出的…

标准化格式输出:DateTimeFormatter

public static void main(String[] args) {LocalDateTime ldt LocalDateTime.now();System.out.println(ldt);//格式化输出时间//创建DateTimeFormatter对象来进行格式化DateTimeFormatter dateTimeFormatter DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒&…