写点什么

释放团队的力量:洞察关键指标驱动的软件开发之路

作者:Ian Phillipchuk

  • 2023-05-26
    北京
  • 本文字数:3090 字

    阅读完需:约 10 分钟

释放团队的力量:洞察关键指标驱动的软件开发之路

在一个所有东西都可以洞察、都有上下文和数据的世界里,如果将指标度量限制在软件开发过程的一部分里,那是没有意义的。部门的工作不会在提交到 Git 时停止,也不是在工单分配到你时才开始。从第一次关注一个工作项,到它进入生产代码,融于现有的解决方案,有许多地方可以做得很好,但也有更多的地方可能会出错。度量这些领域,就像度量管道中的其他领域一样,这对于改进至关重要。我们将花一点时间回顾相关的术语和概念,然后再深入研究 Jobber 的开发过程,看看我们如何:

  • 为开发分支集成即时 QA 构建,简化 QA 过程;

  • 简化 PR 流程,加快相关工作的审批和测试;

  • 集成用于处理故障和中断的新服务;

  • 发现工程师没有足够的时间埋头工作的原因(是会议!),以及为什么与开发人员交谈和采用工程指标一样重要。

 

对于这些度量,业界普遍接受的标准是由谷歌 DORA 团队制定的,包括部署频率(DF)、变更提前期(LTC)、平均恢复时间(MTTR)和变更失败率(CFR)四个关键指标。这 4 个指标分别度量将代码部署到生产环境的频率(DF)、开发完成和部署之间的时间间隔(LT)、从严重的生产问题中恢复所需的时间(MTTR)以及新增热修复代码在生产环境中引发问题的频率(CFR)。概括地说,这些关键指标是对客户影响、做事速度以及所提供服务的一致性或质量所做的一般分类。如果你关心的是影响、速度和质量这样的东西,那么你就需要某种形式的指标,让你可以跟踪进度。

 

Jobber(一家家居服务运营管理软件提供商),我们跟踪这些指标,更多的是作为产品开发部门,为的是以可度量的方式跟踪进展。这些指标可以帮助我们的团队在进行变更时保持敏捷,并在执行过程中以数据为驱动。如果一个团队想要尝试一种新的 Bug 分类方法,或者一种新的 PR 流程,那么我们不仅可以实时跟踪,并与他们之前的表现进行比较,还可以以部门为单位绘制这个指标,从而防止来自更大部门的噪音破坏我们的数据。然后,这些个人或团队战术层面的指标会向上汇总到小组、部门,最终到整个组织。这样,我们就能够根据需要准确下钻到任何层次,从个人一直到 Jobber 这个整体,并且可以与其他组织进行比较。

 

我们不仅会追踪这 4 个关键指标,还会对收集到的数据做些说明,这很重要。在个人、团队或部门层面,都有一些噪音是非常符合人性的,那种上下文信息非常宝贵。当我们尽可能多地收集不同方面的数据时,我们也会考虑这些指标的人性方面、项目难度、任务转换或个人情况对个人、团队甚至部门的一个或多个关键指标的影响。

 

也就是说,指标(DORA 的 4 个关键指标及其他指标)帮助 Jobber 对开发过程做了一些更改。其中包括投资于按需构建的 CI/CD 管道(不仅适用于生产环境,也适用于开发环境),那使得我们在工程师提出修复方案几分钟内就可以向内部涉众和测试人员发布测试构建,极大地影响了我们的 LTC。我们还简化了 PR 审查流程,减少了发布补丁、新成果和主版本所需的步骤,大大减少了 DF。在审查了一些故障指标之后,我们集成了用于处理中断和技术事件的新服务,真正改善了我们的 MTTR。下面,让我们更深入地了解下这些案例。

 

当我们开始更仔细地研究我们的指标时,我们意识到,开发过程有许多可以改进的地方。具体地说,在研究变更提前期和部署频率时,我们发现自己落后于竞争对手的关键步骤是快速有效地向内部团队交付代码的能力。我们发现,与同等规模的公司相比,我们从第一次变更评审准备好到实际评审之间的时间间隔要长许多。通过进一步地研究,我们发现,加快将构建交付给产品所有者、涉众和其他 QA 负责人的速度,可以让这些循环更紧凑,提高部署速度。我们为所有新 PR 推出了按需的 Bitrise 移动构建,这意味着现在只需要 30 分钟就可以向所有感兴趣的人交付包含更改或修订内容的版本。这不仅加快了我们的特性开发速度,而且还加快了代码评审过程,对 MTTR 和 CFR 指标产生了重要的影响。

 

在查看平均恢复时间和变更失败率指标时,我们发现,我们并没有像自己希望的那样高效。我们对故障的响应还算积极,但仍有改进的空间,特别是在事件的沟通和组织方面。我们将 Allma 整合为 Slack 频道中的一个问题协作层,围绕事件组织集中沟通。以前,人们很难“跳进去”帮助解决问题,因为它通常分散在多个不同的地方。Allma 工作流让我们可以集中讨论切实的问题,让多方介入、监督或对问题的解决做出贡献,进而帮助我们理清其中的误解和困惑。这就和前面的情况一样,监视指标让我们不仅可以发现具体技术或框架的更改,还可以发现流程和工具的更改。

 

我们来看一个具体的问题,它的出现方式非常有趣。在查看我们的工程度量工具 Jellyfish 时,我们注意到一个基本问题:我们的 IC(个人贡献者)编码不够多!我们在评价工程师时会使用 PR 数和“编码日”,这是一个粗略的估计,即工程师一天中花在代码上的时间与花在其他事情上的时间比。我们看到,在过去的一年里,我们的 IC 花在代码上的时间越来越少,而花在其他事情上的时间越来越多。一个简单而又显而易见的解决方案是“多编码”,但就像任何指标或数据问题一样,有时候,一个信号在告诉你一些东西的同时,也经常会导致很多噪音。消除噪音的最佳方法是将指标放大,了解 IC 的切身经历,有时需要进行一些艰难的对话。

 

开展这类对话的基础是信任,否则你将无法从中获得任何有用的上下文信息。在 Jobber,虽然在决策时,我们会查看尽可能多的数据,但我们认识到,这最多只能占一半,另一半是被度量者的生活经历。我们从不以数据来评判 Jobberino;数据要放在团队和小组的上下文中来考虑,而不是用数据给他们本人或他们的工作下定义。也就是说,我们将指标视为真实问题的线索,而不是用它衡量某人对于公司的价值。所以当我们着手分析 PR 减少的原因时,我们首先要做的就是找到问题的源头,直接与工程师进行探讨,看看是什么妨碍了他们开展构建特性和解决漏洞这些对他们而言很重要的工作。

 

我相信,对于这一点,很多阅读这篇文章的人都了解。当我们深入研究数据和相关上下文时,不出所料,问题的源头是会议。具体来说,会议安排时间不合适经常会打断所有重要的技术流程。你或许也知道,许多需要工程师处理的问题都至少需要 4 个小时的时间才能解决。因此,会议会打断所有重要的流程,妨碍问题的解决。这些问题通常也是最难解决的,所以你还要付出机会成本,因为最重要的问题也是最难解决的。在这种情况下,一个相对正常的指标(IC 花费在编码上的时间)背后隐藏了大量有用的更改和信息。现在,除了粗略地度量他们的生产时间之外,我们正积极监控工程师可用的大块时间。如果我们没有首先度量我们的工程工作,就永远不会发现这些信息,如果我们没有相互信任的环境,让我们处理信号而不是噪音,我们肯定也不会有那些关键的上下文对话。

 

除了这 4 个关键指标之外,我们还有各种有趣的指标。我们不仅会度量已解决缺陷的数量,还会度量每周关闭的缺陷的数量,或者一个 PR 在关闭之前所花费的时间(以及已审核 PR 被的数量和对这些 PR 的评论!)我们甚至会度量团队和部门更新内部文档和维基资源的次数,以及每周重新投入到其他开发或文档中的次数。总之:如果你不跟踪它,你就无法度量它;如果你不度量它,你就无法改善它。特别是对于工程经理以及更高的级别,当他们对策略、流程和工具做小调整、修改和大调整时,他们会希望了解所有具体的更改是成功还是失败。我们不必担心自己的功能被打上 OKR 标签,我们应该把同样的热情和活力投入到追踪我们对业务发展的贡献上。一定要先确保脚踏实地,然后再去数据中寻找神奇的趋势线。

 

原文链接:

https://www.infoq.com/articles/team-level-metrics-matter/


相关阅读:

软件技术栈商品化:应用优先的云服务如何改变游戏规则

使用伪对象进行单元测试:避免过度设计,降低测试成本

2023-05-26 08:003933

评论

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

Zookeeper安装与基础命令操作

石臻臻的杂货铺

zookeeper 11月月更

微服务平滑迁移上云最佳实践

阿里巴巴云原生

阿里云 微服务 云原生

浅析分布式事务的底层实现模型

移动云大数据

一个关于X证券20000台服务器的血泪故事

青藤云安全

网络安全 青藤云安全

小令观点 | 急需身份证扫描件?【A4证照扫描王】来帮你

令牌云数字身份

软件推荐 入职 打印 证照扫描

剖析一下"抢茅台"脚本底层逻辑

京东科技开发者

接口 后端 脚本 风险识别 风险控制

阿里P8大佬神创“Netty突击笔记”,堪称全网最全最牛逼的核心原理手册

程序知音

Java Netty JAVA开发 java架构 后端技术

聊一聊华为云弹性公网IP的那些事儿

爱尚科技

首份关基安全国标刚发布,客户把我叫到了办公室......

青藤云安全

网络安全 青藤云安全

被性能优化撂倒无数次后的顿悟!465页调优笔记助力大厂面试之旅

程序知音

Java JVM 性能调优 java架构 后端技术

PG SQL 语法汇总

蜗牛也是牛

什么是组织孤岛?它会带来哪些影响?可以这样去对付它

Baklib

2022 Java 企业面试题汇总

钟奕礼

Java java程序员 java面试 java编程

Java面试读这一篇就够了:100个互联网大厂Java面试真题整理

钟奕礼

Java Java 面试 java程序员 java编程

聊聊mybatis的架构模块

急需上岸的小谢

11月月更

索引数据结构千千万 , 为什么B+Tree独领风骚

程序知音

进大厂必刷的Java面试题

钟奕礼

Java java程序员 java面试 java编程

一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)

钟奕礼

Java java程序员 java面试 java编程

HDC.Cloud Day | 全国首场上海站告捷,聚开发者力量造梦、探梦、筑梦

华为云开发者联盟

云计算 华为云

数据库索引相关和EFCore的索引映射

C++后台开发

数据库 后端开发 Linux服务器开发 C++开发 数据库索引

万级并发分布式全链路压测工具 autotest 实践

车江毅

自动化测试 全链路测试 性能压测 生产环境全链路压测

行业首个测试开发技术大赛开始报名啦~ 10万现金奖励等你来挑战

测试人

软件测试 自动化测试 测试开发 测试比赛

PCB焊接出问题了,是PCB工程师的锅吗?

华秋PCB

PCB PCB设计 焊接

我服了,阿里挖过来的leader连垃圾回收都说不清楚

钟奕礼

Java java程序员 java面试 java编程

行业首个测试开发技术大赛开始报名啦~ 10万现金奖励等你来挑战

测吧(北京)科技有限公司

软件测试

防止会议被入侵,华为云会议更专业

IT科技苏辞

基于云原生网关的可观测性最佳实践

阿里巴巴云原生

阿里云 微服务 云原生 可观测

Java 反射 (二) Class类

浅辄

Java 反射 11月月更

聊聊索引

急需上岸的小谢

11月月更

聊聊mybatis的反射之Reflector类

急需上岸的小谢

11月月更

Docker搭建私有registry镜像仓库

蜗牛也是牛

释放团队的力量:洞察关键指标驱动的软件开发之路_文化 & 方法_InfoQ精选文章