通过人为因素衡量开发人员生产力

衡量开发人员的生产力是一项艰巨的挑战。专注于开发周期时间和吞吐量的传统指标是有限的,而且对于转向何处也没有明显的答案。定性指标提供了一种强大的方法,可以使用来自开发人员自身的数据来衡量和理解开发人员的生产力。组织应优先考虑使用来自人员的数据来衡量开发人员的生产力,而不是来自系统的数据。

2024 年 3 月 19 日


Photo of Abi Noda

阿比·诺达是 DX 的创始人和首席执行官,该公司致力于帮助组织衡量和提高开发人员的生产力。作为一名程序员和研究员,阿比定期发表有关开发人员体验的内容和研究。在加入 DX 之前,阿比是 Pull Panda 的创始人和首席执行官,该公司于 2019 年被 GitHub 收购。

Photo of Tim Cochran

蒂姆·科克伦是亚马逊软件构建器体验 (ASBX) 小组的负责人。他之前是 Thoughtworks 的技术总监。

蒂姆在与规模化企业和大型企业合作方面拥有超过 20 年的经验。他就技术战略和进行正确的技术投资以实现数字化转型目标提供建议。他是开发人员体验的积极倡导者,并且热衷于使用数据驱动的方法来改进它。


此时此刻,某处的技术主管告诉他们的主管:“我们需要一种方法来衡量我们工程团队的生产力。” 一个工作组聚集在一起探索潜在的解决方案,几周后,提议实施以下指标:交付周期、部署频率和每位工程师创建的拉取请求数量。

不久之后,高级工程主管开会审查他们新创建的仪表板。质疑和怀疑立即出现。一位领导说:“根据这些基准,我们的交付周期是两天,这属于‘低效’——但实际上有问题吗?”。另一位领导说:“我们的一些团队部署频率低于其他团队,这并不奇怪。但我不确定这是否意味着改进的机会。”

如果您熟悉这个故事情节,请不要担心——大多数人都很熟悉,包括世界上一些最大的科技公司。当像 DORA 这样的指标无法提供领导者期望的洞察力时,衡量计划就会失败,这并不少见。

然而,有一种更好的方法。这种方法侧重于从开发人员自身那里获取见解,而不是仅仅依赖于速度和产出的基本衡量标准。我们已经帮助许多组织实现了这种以人为本的方法的飞跃。我们亲眼目睹了它提供的对开发人员生产力的理解得到了极大的改善。

我们在这里指的是*定性测量*。在本文中,我们根据我们帮助许多组织进行此类旅程的经验,提供了有关这种方法的入门知识。我们首先定义定性指标以及如何倡导它们。接下来,我们将提供有关如何捕获、跟踪和利用这些数据的实用指南。

如今,在财政紧缩和人工智能等转型技术的大背景下,开发人员的生产力已成为企业关注的焦点。此外,随着企业将目光投向敏捷和 DevOps 转型之外,开发人员体验和平台工程正受到越来越多的关注。所有这些关注点的共同点是依赖于衡量来帮助指导决策和跟踪进度。为此,定性测量至关重要。

**注意:**当我们说“开发人员生产力”时,我们指的是开发人员能够以无摩擦的方式完成工作的程度,而不是开发人员的个人绩效。一些组织发现“开发人员生产力”是一个有问题的术语,因为它可能会被开发人员误解。我们建议组织使用“开发人员体验”一词,这对开发人员来说具有更积极的含义。

什么是定性指标?

我们将定性指标定义为由人类提供的数据组成的衡量标准。这是一个实用的定义——我们没有在社会科学中找到一个单一的定义,而且我们看到的其他定义都存在缺陷,我们将在本节后面讨论。

图 1:定性指标是源于人类的衡量标准

“指标”一词的定义是明确的。然而,正如 2019 年的期刊论文 定性研究中的定性是什么 中所指出的那样,“定性”一词没有权威的定义

关于定性研究的定义有很多,但如果我们寻找一个能够体现其“定性”独特特征的定义,那么在整个社会科学领域,相关的文献是很少的。这篇文章背后的主要原因在于悖论,坦率地说,就是研究人员表现得好像他们知道它是什么,但他们无法给出一个连贯的定义。

我们听到的另一种定义是,定性指标衡量质量,而定量指标衡量数量。我们发现这个定义有问题,原因有两个:首先,“定性指标”一词包含*指标*一词,这意味着输出是一个*数量*(即一个度量)。其次,质量通常是通过序数尺度来衡量的,这些尺度被转换成数值和分数——这再次与定义相矛盾。

我们听到的另一个论点是,情感分析的输出是*定量的*,因为分析的结果是数字。虽然我们同意情感分析产生的数据是定量的,但根据我们最初的定义,这仍然是一个定性的*指标*(即定性产生的数量),除非有人认为“定性指标”完全是一个矛盾修饰法。

除了定义定性指标是什么的问题之外,我们还遇到了一些有问题的俗语。一个例子是“软指标”一词。我们告诫不要使用这个短语,因为它有害地、错误地暗示了从人类那里收集的数据比从系统收集的“硬指标”*更弱*。我们也不鼓励使用“主观指标”一词,因为它误解了这样一个事实,即从人类那里收集的数据可以是客观的,也可以是主观的——我们将在下一节讨论。

定性指标:源于人类的衡量标准
类型定义示例
态度指标对特定主题的主观感受、观点或态度。您对 IDE 的满意度如何,评分为 1-10 分?
行为指标与个人工作经历相关的客观事实或事件。将更改部署到生产环境需要多长时间?

在本文的后面部分,我们将提供有关如何收集和使用这些测量的指南,但首先,我们将提供一个将这种方法付诸实践的真实示例

Peloton 是一家美国科技公司,其开发人员生产力衡量策略以定性指标为中心。为了收集定性指标,他们的组织每半年进行一次开发人员体验调查,该调查由他们的技术支持和开发人员体验团队领导,该团队是他们产品运营组织的一部分。

技术学习和洞察主管 Thansha Sadacharam 解释说:“我非常相信,而且我认为我们的很多工程师也非常赞赏这一点,那就是工程师不是机器人,他们是人。仅仅查看基本数字并不能说明全部问题。因此,对我们来说,进行一项真正全面的调查来帮助我们了解整个开发人员体验非常重要。”

每次调查都会发送给大约一半开发人员的随机样本。通过这种方法,单个开发人员每年只需要参与一次调查,从而最大限度地减少了填写调查的总时间,同时仍然提供了一组具有统计学意义的代表性数据结果。技术支持和开发人员体验团队还负责分析调查结果,并与整个组织的领导者分享。

有关 Peloton 开发人员体验调查的更多信息,请收听对 Thansha Sadacharam 的采访

倡导定性指标

高管们通常对定性指标的可靠性或有用性持怀疑态度。即使是像谷歌这样高度科学化的组织也不得不克服这些偏见。工程主管倾向于系统指标,因为他们习惯于使用遥测数据来检查系统。然而,我们不能依靠同样的方法来衡量人。

避免将定性和定量指标相互对立。

我们已经看到一些组织陷入了内部的“指标之战”,这不是对时间或精力的有效利用。我们对倡导者的建议是,避免将定性和定量指标相互对立,将其视为非此即彼的选择。最好是论证它们是互补的工具——正如我们在本文末尾所述。

我们发现,反对定性数据的根本原因是误解,我们将在下面解决这些误解。在本文的后面部分,我们将概述自我报告数据的独特优势,例如它衡量无形资产和揭示关键背景的能力。

误解:定性数据只是主观的

传统的工作场所调查通常侧重于员工的主观看法和感受。因此,许多工程主管直观地认为,调查只能从开发人员那里收集主观数据。

正如我们在下一节中所述,调查还可以捕获有关事实或事件的客观信息。谷歌的DevOps 研究和评估 (DORA) 计划就是一个很好的具体例子。

一些客观调查问题的示例

  • 从代码提交到代码在生产环境中成功运行需要多长时间?
  • 您的组织多久将代码部署到生产环境或将其发布给最终用户?

误解:定性数据不可靠

调查的一个挑战是,具有各种背景的人在撰写调查问题时没有经过专门的培训。因此,许多工作场所调查没有达到产生可靠或有效衡量标准所需的最低标准。然而,精心设计的调查可以产生准确可靠的数据(我们将在本文的后面部分提供有关如何做到这一点的指南)。

一些组织担心人们可能会在调查中撒谎。这种情况可能会发生在人们担心数据将如何被使用的情况下。根据我们的经验,当调查被用作一种工具来帮助理解和改进影响开发人员的瓶颈时,受访者就没有动机去撒谎或玩弄系统。

虽然调查数据并不总是 100% 准确,但我们经常提醒领导者,系统指标也常常是不完美的。例如,许多组织试图使用从其管道聚合的数据来衡量 CI 构建时间,结果却发现,需要付出巨大的努力来清理数据(例如,排除后台作业、考虑并行作业)才能产生准确的结果

两种类型的定性指标

定性指标主要有两种类型

  1. **态度指标**捕捉对特定主题的主观感受、观点或态度。态度衡量的一个例子是针对“您对 IDE 的满意度如何,评分为 1-10 分?”这个问题捕获的数值。
  2. 行为指标用于捕捉与个人工作体验相关的客观事实或事件。例如,针对“将变更部署到生产环境需要多长时间?”这一问题,其答案的数量就是一个行为指标。

我们发现,大多数技术从业者在考虑定性指标时,往往会忽略行为指标。尽管在软件研究中,定性行为指标十分普遍,例如前面提到的 Google 的 DORA 项目,但这种情况仍然存在。

DORA 每年都会发布指标基准,例如变更交付周期、部署频率和变更失败率。许多人不知道的是,DORA 的基准是使用定性方法收集的,调查项目如下所示

交付周期

对于您主要负责的应用程序或服务,您的变更交付周期是多久(即从代码提交到代码成功运行在生产环境中需要多长时间)?

超过六个月

一到六个月

一周到一个月

一天到一周

不到一天

不到一小时

部署频率

对于您主要负责的应用程序或服务,您的组织多久将代码部署到生产环境或将其发布给最终用户?

少于每六个月一次

每月一次到每六个月一次

每周一次到每月一次

每天一次到每周一次

每小时一次到每天一次

按需(每天多次部署)

变更失败率

对于您主要负责的应用程序或服务,生产环境变更或用户版本发布中有多少百分比会导致服务降级(例如,导致服务受损或服务中断),并随后需要修复(例如,需要热修复、回滚、前向修复、补丁)?

0–15%

16–30%

31–45%

46–60%

61–75%

76–100%

恢复时间

对于您主要负责的应用程序或服务,当发生影响用户的服务事件或缺陷时(例如,计划外中断、服务受损),通常需要多长时间才能恢复服务?

超过六个月

一到六个月

一周到一个月

一天到一周

不到一天

不到一小时

我们发现,能够同时收集态度和行为数据是定性测量的一大优势。

例如,行为数据可能表明您的发布过程快速高效。但只有态度数据才能告诉您它是否顺利且轻松,这对开发人员的倦怠和留存具有重要意义。

举一个非技术类的比喻:假设您感觉不舒服,去看医生。医生测量了您的血压、体温、心率,然后说:“嗯,看起来您一切都好。您没有任何问题。”您会感到惊讶!您会说:“等等,我是在告诉您我感觉不舒服。”

定性指标的好处

支持定性指标的一个论点是,它们避免了让开发人员感到被管理层“衡量”。虽然我们发现这是真的——尤其是与从开发人员的 Git 或 Jira 数据中得出的指标相比——但这并没有解决定性方法可以提供的主要客观优势。

在衡量开发人员生产力方面,定性指标主要有三大优势

定性指标允许您衡量其他方法无法衡量的内容

像交付周期和部署量这样的系统指标可以捕捉到我们的管道或票务系统中正在发生的事情。但是,开发人员的工作还有许多其他方面需要了解,才能提高生产力:例如,开发人员是否能够保持工作流程或轻松浏览其代码库。定性指标可以让您衡量这些难以或无法衡量的无形资产。

技术债务就是一个有趣的例子。在 Google,一项旨在确定技术债务指标的研究分析了 117 个被提议作为潜在指标的指标。令 Google 研究人员失望的是,他们没有发现任何单一指标或指标组合可以作为有效指标(有关 Google 如何衡量技术债务的更多信息,请收听本次采访)。

虽然可能存在尚未发现的客观指标来衡量技术债务,但我们可以假设这可能是不可能的,因为对技术债务的评估依赖于对系统或代码库当前状态与其理想状态的比较。换句话说,人为判断至关重要。

定性指标提供了跨团队和系统的缺失可见性

来自票务系统和管道的指标让我们能够了解开发人员所做的一些工作。但仅凭这些数据并不能让我们全面了解情况。开发人员做了很多在票据或构建中没有体现的工作:例如,设计关键功能、确定项目方向或帮助队友熟悉环境。

仅凭我们系统中的数据,不可能全面了解所有这些活动。即使我们理论上可以通过系统收集所有数据,但通过检测来捕捉指标也存在其他挑战。

一个例子是难以规范化不同团队工作流程中的指标。例如,如果您试图衡量任务从开始到完成所需的时间,您可能会尝试从票务工具中获取这些数据。但是,各个团队的工作流程往往不同,因此很难生成准确的指标。相比之下,简单地询问开发人员通常需要多长时间来完成任务可能要简单得多。

另一个常见挑战是跨系统可见性。例如,一家小型初创公司可以使用 Jira 等问题跟踪器来衡量 TTR(恢复时间)。然而,大型组织可能需要整合和交叉关联规划系统和部署管道中的数据,才能获得端到端的系统可见性。这可能需要一年的时间,而从开发人员那里收集这些数据可以快速提供基线。

定性指标为定量数据提供背景

作为技术人员,我们很容易过度关注量化指标。毕竟,它们看起来简洁明了。然而,如果没有更丰富的数据,就存在无法全面了解情况的风险,这可能会导致我们关注错误的事情。

代码审查就是一个例子:一个典型的优化是尝试加快代码审查的速度。这似乎合乎逻辑,因为等待代码审查会导致时间浪费或不必要的上下文切换。我们可以衡量完成审查所需的时间,并激励团队改进。但这种方法可能会鼓励负面行为:审查人员草率地进行审查,或者开发人员没有找到合适的专家来进行审查。

代码审查的存在有一个重要目的:确保交付高质量的软件。如果我们进行更全面的分析——关注流程的结果,而不仅仅是速度——我们会发现,代码审查的优化必须确保良好的代码质量、降低安全风险、在团队成员之间建立共享知识,以及确保我们的同事不会一直等待。定性指标可以帮助我们评估是否实现了这些结果。

另一个例子是开发人员入职流程。软件开发是一项团队活动。因此,如果我们只衡量个人产出指标,例如新开发人员提交代码的频率或首次提交代码的时间,我们就会忽略重要的结果,例如我们是否充分利用了开发人员提出的想法,他们是否可以安心地提出问题,以及他们是否与跨职能的同事进行协作。

如何获取定性指标

许多技术从业者没有意识到编写好的调查问题和设计好的调查工具有多么困难。事实上,有一些完整的学科与之相关,例如心理测量学和工业心理学。在可能的情况下,引入或建立这方面的专业知识非常重要。

以下是一些编写调查问卷的良好规则,可以避免我们看到组织犯的最常见的错误

  • 调查项目的措辞需要仔细斟酌,每个问题都应该只问一件事。
  • 如果您想比较不同调查的结果,请注意不要改变问题的措辞,以免您衡量的是不同的东西。
  • 如果您更改了任何措辞,则必须进行严格的统计检验。

在调查用语中,“好的调查”是指“有效且可靠”或“表现出良好的心理测量特性”。有效性是指调查项目实际衡量您想要衡量的结构的程度。可靠性是指调查项目在您的总体中以及随着时间的推移产生一致结果的程度。

我们发现有一种思考调查设计的方式对技术从业者很有帮助:将调查响应过程视为在人脑中发生的算法。

当一个人看到一个调查问题时,为了得到答案,会经历一系列的心理步骤。以下模型来自 2012 年出版的开创性著作调查响应心理学

响应过程的组成部分
组成部分具体流程
理解

注意问题和说明

表示问题的逻辑形式

确定问题的重点(寻求的信息)

将关键词与相关概念联系起来

检索

生成检索策略和线索

检索特定的、通用的记忆

填写缺失的细节

判断

评估记忆的完整性和相关性

根据可访问性进行推断

整合检索到的材料

根据部分检索结果进行估计

响应

将判断映射到响应类别

编辑响应

分解调查响应过程并检查每个步骤可以帮助我们改进输入,从而获得更准确的调查结果。开发好的调查项目需要严格的设计、测试和分析——就像设计软件的过程一样!

但良好的调查设计只是成功开展调查的一个方面。其他挑战包括参与率、数据分析以及如何根据数据采取行动。以下是一些我们学到的最佳实践。

按团队和角色细分结果

组织领导者常犯的一个错误是,只关注全公司的结果,而不是按团队和角色(例如,职位、任期、资历)细分的数据。如前所述,开发人员体验具有高度的上下文关联性,并且在不同团队或角色之间可能存在很大差异。只关注汇总结果可能会导致忽视影响公司内部规模虽小但很重要的群体的问题,例如移动开发人员。

自由文本评论通常最有价值

我们一直在谈论定性指标,但自由文本评论是一种极其宝贵的定性数据形式。除了描述摩擦或工作流程之外,开发人员还会有很多改进开发人员体验的好主意,自由文本让我们能够捕捉到这些想法,并确定后续跟进的对象。自由文本评论还可以揭示您的调查没有涵盖的领域,这些领域可以在未来添加。

将结果与基准进行比较

比较分析有助于将数据置于情境中,并有助于推动行动。例如,开发人员对代码质量的情绪通常偏向负面,因此很难确定真正的问题或衡量问题的严重程度。更具可操作性的数据点是:“与其他团队或组织相比,我们的开发人员对代码质量不满意吗?”与同行相比,情绪得分较低的团队,以及与行业同行相比,得分较低的组织,可以发现明显的改进机会。

在适当的情况下使用交易调查

事务性调查会在开发人员工作流程中的特定接触点或交互过程中收集反馈。例如,平台团队可以使用事务性调查来提示开发人员提供反馈,而他们正在内部开发人员门户中创建新服务。事务性调查还可以通过生成更高频率的反馈和更细化的见解来增强定期调查的数据。

避免调查疲劳

许多组织都在努力长期维持较高的调查参与率。缺乏后续跟进会导致开发人员觉得反复回答调查不值得。因此,领导者和团队必须在调查结束后跟进并采取有意义的行动。虽然每季度或每半年进行一次调查的频率对大多数组织来说是最佳的,但我们也看到一些组织成功地将更频繁的调查纳入到定期的团队仪式中,例如回顾会议。

调查模板

以下是一组简单的调查问题,可帮助您入门。 将以下问题加载到您首选的调查工具中,或者通过复制我们现成的 Google Forms 模板 快速开始。

该模板有意设计得简单,但随着您的衡量策略的成熟,调查通常会变得相当庞大。 例如,Shopify 的开发者调查 长达 20 分钟,而 Google 的调查 则超过 30 分钟。

收集到回复后,使用平均值或最高框评分对多项选择题进行评分。 平均分数的计算方法是为每个选项分配一个介于 1 到 5 之间的值,然后取平均值。 最高框分数的计算方法是选择两个最有利选项之一的回复百分比。

请务必查看开放式文本回复,其中可能包含重要信息。 如果您收集了大量评论,则 ChatGPT 等 LLM 工具可用于提取核心主题和建议。 完成结果分析后,请务必与受访者分享您的发现,这样他们花时间填写调查问卷才觉得值得。

作为 [插入组织名称] 的开发人员或技术贡献者,您觉得工作起来容易还是困难?

非常困难

有点困难

既不容易也不困难

有点容易

非常容易

对于您主要负责的应用程序或服务,您的变更交付周期是多久(即从代码提交到代码成功运行在生产环境中需要多长时间)?

超过一个月

一周到一个月

一天到一周

不到一天

不到一小时

您多久感觉到工作效率很高?

从不

很少

有时

大多数时候

总是

请评价您对以下陈述的同意或不同意程度

强烈反对反对中立同意强烈同意
我的团队遵循开发最佳实践
我有足够的时间进行深度工作。
我对项目中自动化测试的覆盖率感到满意。
我可以轻松地部署到生产环境。
我对我们 CI/CD 工具的质量感到满意。
我的团队的代码库很容易让我做出贡献。
根据我们的目标,我团队的技术债务数量是合适的。
规范会根据用户信号不断地重新审视和确定优先级。

请分享您对如何改进开发者体验的任何其他反馈

[开放式文本框]

同时使用定性和定量指标

定性指标和定量指标是衡量开发者生产力的互补方法。 定性指标源自调查,提供了对生产力的全面看法,包括主观和客观衡量标准。 另一方面,定量指标也具有明显的优势

  • 精确性。 人类可以告诉您他们的 CI/CD 构建通常是快还是慢(即,持续时间是接近一分钟还是一小时),但他们无法报告精确到毫秒的构建时间。 当我们的测量需要高度精确时,就需要定量指标。
  • 连续性。 通常,组织可以对其开发人员进行调查的频率最多为每季度一次或两次。 为了收集更频繁或连续的指标,组织必须系统地收集数据。

最终,只有通过定性和定量指标的结合(一种混合方法),组织才能最大限度地了解开发者的生产力和体验。 那么,如何将定性和定量指标结合使用呢?

我们已经看到,当组织从定性指标开始建立基线并确定重点关注领域时,他们就会取得成功。 然后,使用定量指标来帮助更深入地研究特定领域。

工程主管发现这种方法很有效,因为定性指标提供了全面的视图和背景,可以广泛了解潜在的机会。 另一方面,定量指标通常仅适用于软件交付过程中较窄的范围。

出于这个原因,Google 同样建议其工程主管在查看日志数据之前先查看调查数据。 Google 工程研究员 Ciera Jaspan 解释说:“我们鼓励主管先查看调查数据,因为如果您只查看日志数据,它并不能真正告诉您某件事是好是坏。 例如,我们有一个指标可以跟踪进行更改所需的时间,但这个数字本身毫无用处。 你不知道,这是好事吗? 这是坏事吗? 我们有问题吗?”。

混合方法使我们能够利用定性和定量指标的优势,同时全面了解开发者生产力

  1. 从定性数据开始,确定您的最佳机会
  2. 一旦您知道要改进什么,请使用定量指标进一步深入研究
  3. 使用定性和定量指标跟踪您的进度

只有通过尽可能多地组合数据(包括定性和定量数据),组织才能开始全面了解开发者生产力。

然而,最终重要的是要记住:组织在能够观察和检测基于日志的指标无法检测到的问题的高素质人员身上花费了大量资金。 通过利用开发人员的思想和声音,组织可以解锁以前被认为不可能的见解。


致谢

感谢 Laura Tacho、Max Kanat-Alexander、Laurent Ploix、Martin Fowler、Bethany Otto、Andrew Cornwall、Carol Costello 和 Vanessa Towers 对本文的反馈。

重大修订

2024 年 3 月 19 日: 发布了文章的其余部分

2024 年 3 月 13 日: 发布到收益部分

2024 年 3 月 12 日: 发布到倡导定性指标部分