写点什么

度量开发人员生产力:17 家科技公司的经验总结

作者:Rafiq Gemmail

  • 2024-02-15
    北京
  • 本文字数:2647 字

    阅读完需:约 9 分钟

度量开发人员生产力:17 家科技公司的经验总结

Gergely Orosz(The Pragmatic Engineer Newsletter 作者)和 Abi Noda(DX 首席执行官,DevEx 框架创建者之一)在 Pragmatic Engineer 上发表了一篇题为“开发生产力度量:真实案例分析”的文章。InfoQ 报道了 Noda 对 17 家知名科技巨头所使用的工程指标的调查结果。Noda 发现,位居前列的团队并不会大规模采用像 DORA 或 SPACE 这样的框架,而是会混合使用特定于组织的定性和定量指标。Noda 和 Orosz 从指标实现团队所寻求的结果倒推,提供了定义此类指标的建议。


Noda 写道,他“采访了 17 家知名科技公司负责度量开发人员生产力的团队。”在这篇文章中,Noda 和 Orosz 重点调查了 4 类规模的组织,10 万员工的谷歌、1 万员工的 LinkedIn、1 万员工以下的 Peloton,以及 1000 员工以下的 Notion 和 Postman 等。所使用的指标范围从典型的 PR 和 CI 指标到谷歌系统性选择的指标。


Noda 观察到,在实践中,“DORA 和 SPACE 指标是有选择性地使用的”,而不是全部采用。他写道,虽然调查显示“每家公司都有自己量身定制的方法”,但他相信“任何规模的组织都可以采用谷歌的整体理念和方法。”Noda 写道,谷歌的方法需要根据“速度、易用性和质量”这三类度量来选择指标。他写道,这三个维度之间存在着“紧张的关系”,“有助于揭示潜在的权衡取舍”。


Noda 写道,谷歌使用“定性和定量度量来计算指标”,因为这提供了“尽可能全面的画面”。Noda 列举了谷歌使用的一系列信息获取方法,从满意度调查到“使用日志度量”。他写道:


无论是度量工具、过程还是团队,谷歌的开发情报团队都认同这样的看法,即单个度量标准无法衡量生产力。相反,他们从速度、易用性和质量这三个维度来审视生产力。


类似地,Noda 和 Orosz 描述了 LinkedIn 如何将季度开发者满意度调查与定量指标相结合。Noda 在文章中提到了 LinkedIn 开发者洞察团队使用的一系列指标。这些指标旨在减少“关键开发活动的阻力”。该团队使用的指标包括 CI 稳定性指标、部署成功率、p50 和 p90 构建时间,代码审查响应时间,以及提交通过 CI 管道的时间。Noda 描述了团队如何用定性见解来支持这种定量度量,并举了一个例子,将构建时间与“开发人员对构建满意程度”做了比较。LinkedIn 还使用“温莎均值(winsorized mean)”对客观数值指标进行了去噪:


温莎均值的意思是,求出第 99 百分位数,然后把所有高于第 99 百分位数的数据点削减,而不是剔除。如果第 99 百分位是 100 秒,而你有一个数据点是 110 秒,则把 110 划掉,写上 100,现在,你计算出的(温莎)均值会是一个更有用的数字。


Noda 写道,Peloton(代表 3000 到 4000 名员工的组织)已经从最初的“通过开发体验调查获得定性见解”发展到结合定量指标。例如,用前置时间和部署频率作为速度度量的客观指标。他写道,Peloton 的指标还包括定性参与度得分、服务恢复时间,以及代码质量(“250 行以下 PR、行覆盖率和变更失败率”的百分比来衡量)。


在谈到 Notion 和 Postman 等规模较小的“扩张中”组织时,Noda 写道,这些组织通常专注于度量“可移动指标(movable metrics)”。他解释说,这是一个易受影响的度量指标,指标实现团队可以“通过其工作对指标产生积极或消极的影响来移动它”。这方面的一个例子是“交付难易度”。Noda 写道,这一指标反映了“认知负荷和反馈循环”,并且可以根据“开发者感受到的完成工作的难易程度”进行调整。另一个常见的可移动指标是“开发者因障碍和阻力而损失的时间占比”。Noda 描述了这个指标是如何体现其价值的:


这个指标可以转化为钱:这是一个最大的好处!这使得商业领袖很容易理解时间损失(Time Loss)。例如,如果一个工程工资成本为 1000 万美元的组织通过一项计划将时间损失从 20% 减少到 10%,那么这将节省 100 万美元。


考虑到此类工程指标的上下文特点,Noda 建议组织按以下几个步骤来定义指标:


  • 在任务声明中定义你的目标,解释“为什么会存在开发生产力团队?”

  • “从目标出发,根据速度、易用性和质量来定义最上层指标”

  • 定义与“特定项目或目标关键结果”相关的“操作级指标”,例如,特定开发生产力增强服务的采用率


Noda 通过示例指出,所选择的指标应该综合考虑“速度、易用性和质量”等维度。他举例说,如果目标是让开发人员更容易“交付高质量的软件”,那么指标就应该包括“感知交付速度”、“交付难易程度”和“事件发生频率”。


Orosz 和 Noda 的这篇文章是继“回应 McKinsey:衡量开发者生产力?”之后发表的又一篇文章。在之前的文章中,Orosz 与 Kent Beck 合作向 Mckinsey 的文章“是的,你可以衡量软件开发人员的生产力”发起了挑战。Mckinsey 的文章提出了所谓的“以机会为中心”的指标,“用以确定如何改进产品交付方式以及改进价值。”这篇文章讨论了基于 DORA 和 SPACE 的开发人员生产力度量,内容包括鼓励领导者优化个体开发人员效率的建议,以及一个“非编码活动(如设计会议)”的例子。该文提出的指标包括跟踪“个人贡献”和度量“人才能力得分”。


Beck 警告说,衡量个人生产力而不是交付结果是有风险的,他分享了自己看到这些指标变成“用金钱和地位来激励改进度量标准”的经历。他表示,虽然这可能会导致“行为改变”,但它也会受到游戏化的影响,变成激励“以创造性的方式改进这些度量标准”。Beck 和 Orosz 鼓励领导者把重点放在衡量“影响”而不是“工作量”上。Beck 特别建议,这样的度量标准只能用于被度量之物的持续改进反馈循环,而不应该用于其他任何东西。他还警告说,滥用衡量个人的指标会导致安全问题:


要清楚你为什么要问这个问题,以及你和被度量者之间的权力关系。当有权力的人度量没有权力的人时,结果会失真……在哪个层面收集数据就在哪个层面分析,从而避免不当激励。我可以分析我自己的数据,而我的团队可以分析他们自己的汇总数据。‍


Noda 还提醒说,如果是 CTO、VPE 或工程总监级别的人需要提供开发人员绩效指标,最好是确保报告处于相当的层面上。Noda 建议选择代表“业务影响”、“系统性能”和“工程组织”级“开发效率”的指标,例如项目级指标“用户 NPS”和“周时间损失”。Noda 建议高层领导:


在这种情况下,我建议最好是重新定义问题。你的领导团队想要的并不是完美的生产力指标,而是可以进一步确认你是他们工程投资的好管家。


在对 McKinsey 报告的回应中,Orosz 和 Beck 提醒说,“人们会优化被度量的东西”。他们引用了古德哈特定律,即“当一项措施成为目标时,它就不再是一项好措施。”


原文链接:

https://www.infoq.com/news/2024/01/engineering-productivity-metrics/

2024-02-15 08:0011476

评论 3 条评论

发布
用户头像
衡量个泥蜜蜂!
2024-03-03 17:51 · 天津
回复
用户头像
真希望老板们多看看,整天kpi、工时日报啥的有个P用,多点真诚少点形式主义
2024-02-18 17:05 · 江苏
回复
用户头像
看到衡量不了的结论我就放心了!一群资本家
2024-02-18 13:51 · 广东
回复
没有更多了
发现更多内容

LeetCode题解:91. 解码方法,动态规划(优化),JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

产品经理训练营 - 大作业

joelhy

产品经理训练营

算命、运气和其他「Day 24」

道伟

28天写作

协助市场监督管理局,打造质量基础设施“一站式”服务平台

源中瑞-龙先生

滚雪球学 Python 之内置 random 模块

梦想橡皮擦

28天写作 3月日更

掌握了开源框架还不够,你更需要掌握源代码

华为云开发者联盟

开源 Element 源代码 Vue 3

容器or虚拟机?

xcbeyond

Docker 容器 3月日更 专业术语

5 分钟部署一个 OIDC 服务并对接 nightingale

冯骐

CAS Nightingale 认证授权 OIDC Apereo

php的一些漏洞梳理

依旧廖凯

28天写作 3月日更

大作业

LouisN

看了 GitHub 上的这些面试题项目后,我飘了!

JackTian

GitHub 开源 面试

Rancher 2.5.6发布,支持Kubernetes 1.20

Rancher

像这样操作 Python 列表,能让你的代码更优雅 | pythonic 小技巧

AlwaysBeta

Python

算法攻关-climbing-stairs(O(n))_70

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关

产品训练营 第四周作业

万顷湖天碧

JVM笔记--如果你写JVM,最需要考虑的重要结构是什么?

秦怀杂货店

Java JVM

存量用户运营企业微信的“用户端小程序”优化方案

vivo互联网技术

小程序 微信 性能优化 大前端 企业微信

诊所数字化:医疗机构常见的系统整理

boshi

医院 医疗 七日更

假期无聊冰河开发了一款国民级游戏!

冰河

Java 游戏

Wireshark 数据包分析学习笔记 Day13

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

为什么MySQL不推荐使用子查询和join

Java小咖秀

MySQL MySQL优化

美丽的数学学习笔记(1)

方勇(gopher)

哪有简单的满足——自我决定论

Justin

心理学 28天写作 游戏设计

短网址服务设计整理

程序员架构进阶

架构 设计实践 28天写作 实操案例 3月日更

yum安装Nginx全流程指南

happlyfox

28天写作 3月日更

Nginx配置静态文件服务从入门到精通

happlyfox

28天写作 3月日更

网易 Duilib:功能全面的开源桌面 UI 开发框架

有道技术团队

开源

Hamcrest

insight

单元测试 3月日更

前端开发:Mac环境的Chrome浏览器设置跨域请求的SameSite解决方法

三掌柜

vue.js 大前端 3月日更

Apache Oozie 深入原理讲解

五分钟学大数据

大数据 28天写作 3月日更 oozie

OpenCV萌新福音:易上手的数字识别实践案例

华为云开发者联盟

OpenCV 图像处理 数字 图像预处理 信用卡

度量开发人员生产力:17 家科技公司的经验总结_后端_InfoQ精选文章