从正确地实施度量开始

2020 年 3 月 22 日

从正确地实施度量开始

研发效能度量的挑战


为了有效应对当前充满易变性、不确定性、复杂性与模糊性的互联网大环境,今年年初京东提出了数字化管理的战略方向,通过数字化的技术和管理模式提升组织效率。在这个背景下,研发效能的提升就成为了很多产品技术部门今年的重要目标,有些部门专门成立了相应的工程效率团队,期望从组织、文化、技术、流程等方面的优化来促进研发效能的整体提升。


然而,究竟什么是好的研发效能?我们如何定义它?虽然本质上都是通过一定的工作来生产(研发)产品,但不同于生产制造行业,软件研发效能的度量其实是相对困难的,原因有以下三个:


一、 研发过程中的可视性差


涉及到业务、产品、研发、运维等不同职能,多个团队多种角色协作时,任务处理的进度、队列、瓶颈可能很难清晰观察到。


二、工作切分的随意性


就像那句名言所说:你度量什么,就会得到什么。其实这句话只说了一半,另一半是:只是不一定是用你所期待的方式得到。由于软件工作切分的随意性,也许把一个需求拆成多个小需求,一行代码拆成多行来写,某些指标就被用非预期的方式完成了。


三、敏捷研发过程中工作是并行的


随着公司敏捷研发模式的持续推进,我们很难再像传统项目管理模式一样清晰界定软件研发的各个阶段,很多情况下不同需求所对应的开发/测试工作都是并行的,产品也是不断迭代、持续演进的,这也对准确度量造成了一定困难。


现有的研发效能度量方式


随着公司日益发展,越来越壮大的研发队伍,在过往的实践过程中,也逐步积累了一些研发效能度量的习惯和指标,但是这些指标从今天的角度来看,似乎存在一些限制。



一、以打卡或工时数据进行度量


在缺少其他度量手段或有效度量指标的情况下,把工作时长作为度量指标是顺其自然的。度量团队成员是否按时在项目中开展工作、工作量是否饱满,其实是从人力资源利用率的角度来看待问题的。


二、以局部产出(代码行或缺陷数)进行度量


代码行或缺陷数其实是对开发、测试岗位很常见的度量方式。但实际上,仅仅将代码行的产出和研发过程中发现的缺陷数作为考核 KPI,可能会因其片面性而导致代码臃肿或研发测试的协作隔阂。


三、以敏捷**研发过程中的一些概念(如故事点数)进行度量


有些采用敏捷研发模式的团队,在使用每个迭代能完成的故事点数或迭代速率来进行度量和考核,但这只是一种容量规划工具(推测需要多久完成工作),绝对数值跟团队紧密相关,但无法进行横向比较。


研发效能度量的正确姿势


通过以上分析可以得知,我们对软件研发效能的度量,应当遵从以下两个基本原则:


  • 聚焦在全局指标而不是局部指标。我们要促进跨越职能和功能,在团队内、团队间彼此高效协作。

  • 聚焦在结果产出而不是某阶段工作输出。我们不应对那些看似繁忙但只产出了一大堆无效工作输出的团队或人员进行奖励,而是引导到那些对促进组织达成目标有实际帮助的工作上去。


根据以上原则,我们确定了从全局性出发,以结果产出为牵引的一系列研发效能度量指标。这些指标也反映出了研发效能改进的关键点,即以端到端的流动效率(而非资源效率)为核心。这里的流动效率是指需求(或用户价值)在整个系统中跨越不同职能和团队流动的速度,速度越快则需求交付的效率越高、交付时长越短。当然我们并不是只关注流动效率、不关注资源效率(如工时、资源利用率等),而是在确保前者效率足够高的情况下再逐步提升后者,最终追求的是二者的协同优化。


我们把研发效能度量指标分为三个维度,分别是交付效率、交付质量和交付能力。这些指标的提升需要组织进行管理、技术、协作等多方面的系统性改进。



一、交付效率


目标是促进端到端、及早的交付,用最短的时间顺畅地交付用户价值。具体可细分为以下指标:


  • 需求交付周期:从需求提出,到完成开发、测试、上线,最终验收通过的时间周期。反映了整个团队(包含业务、产品、开发、测试、运维等职能)对客户问题或业务机会的交付速度,依赖整个组织各职能和部门的协调一致和紧密协作

  • 开发交付周期:从需求被研发团队确认,到完成开发、测试,达到可上线状态的时间周期。反映了研发技术团队的交付速度,依赖需求的拆分和管理,开发团队的分工协作

  • 交付吞吐量:统计周期内交付的需求个数 / 统计周期,即单位时间交付的需求个数。需要注意的是,需求颗粒度要保持一定规则,避免需求大小不统一导致的数据偏差


二、交付质量


目标是促进端到端高质量交付,避免不必要的错误和返工。具体可细分为以下指标:


  • 线上缺陷密度:统计周期内线上或单个版本严重级别Bug数量 / 需求个数

  • 故障恢复时间:线上系统和应用如果发生故障,多长时间可以进行恢复

  • 上线成功率:上线部署成功,上线没有导致服务受损、降级或需要事后补救的比例


三、交付能力


目标是建设卓越工程能力,实现持续交付。具体可细分为以下指标:


  • 发布频率:单位时间内的有效发布次数。团队对外响应的速度不会大于其发布频率,发布频率约束了团队对外响应和价值的流动速度

  • 发布前置时间:代码提交到功能上线的时长。反映了团队的工程技术能力,依赖交付过程中高度自动化以及架构支撑能力


度量指标详细定义及计算逻辑如下表所示:



目前京东在研发基础设施的相关工具平台中(包括项目管理、敏捷协作、代码托管、持续集成、部署发布、异常监控等)已经沉淀了大量的研发过程数据信息,我们将会通过以上指标的整合/分析,呈现给团队和管理者更真实有效的研发效能数据,促进研发更有针对性的改进提升。


总结


为了提升公司各职能部门协调一致,持续、快速、高质量交付需求或用户价值的能力,我们需要从当前关注资源效率为主的管理思路,转变为以流动效率为核心、兼顾资源效率的管理模式。以上的研发效能结果性指标可以看做量化诊断问题和有针对性进行改进的抓手,这些都是研发效能提升的基础。当然,在结果性指标的牵引下,还需要一系列更为细节的过程性指标,覆盖研发活动各个阶段的微观度量,这些指标我们将会持续梳理并与大家探讨。


后续我们还将结合具体的研发管理实践(如敏捷研发和看板方法)与工程实践(代码评审、持续集成和持续交付、部署模式等),配合工具平台的固化和落地,进一步整合研发效能提升的方法、技术和实施路径,也欢迎大家与我们共同探讨并开展合作,共同促进研发效能的提升。


2020 年 3 月 22 日 21:05243

评论

发布
暂无评论
发现更多内容

架构师训练营——第6周作业

jiangnanage

Android | 《看完不忘系列》之Glide

哈利迪

android

架构师第六周培训学习总结

小蚂蚁

week06 作业

雪涛公子

第六周·命题作业·CAP原理

刘璐

信创舆情一线--英国禁用华为5G设备

统小信uos

5G

Doris服务节点临时失效处理过程时序图

任小龙

极客大学架构师训练营

第六周学习总结

CP

Lesson 6 分布式系统架构-分布式数据库、NoSql、ZooKeeper -心得笔记

edd

第六周总结

晨光

week06作业

Safufu

第六章学习总结

李白

极客大学架构师训练营-cap原理

Geek_zhangjian

week6 总结

雪涛公子

java 后端博客系统文章系统——No6

猿灯塔

高并发下数据库方案演进

superman

分库分表 极客大学架构师训练营

架构师训练营——第6周学习总结

jiangnanage

架构师0期第六周命题作业

何伟敏

架构师训练营第六章总结

吴吴

分布式总结

周冬辉

nosql zookeeper 分布式 CAP原理

架构师课程第六周总结

dongge

分布式数据库设计中关键几点

dony.zhang

CAP原理

WEEK6-作业-对CAP理解

蒜泥精英

架构师培训第六周习题

小蚂蚁

架构师训练营第六周作业

Bruce Xiong

架构师训练营第六章作业

吴吴

字节跳动基于Flink的MQ-Hive实时数据集成

Apache Flink

flink

官方剧透:1.11 发版前我们偷看了 Flink 中文社区发起人的聊天记录

Apache Flink

flink

week6 学习总结

任小龙

极客大学架构师训练营

架构师训练营 第六周 作业

极客

架构是训练营

WEEK6-学习心得

蒜泥精英

从正确地实施度量开始-InfoQ