DORA指标:公司业务成果的“占卜师”
2009 年,受 John Allspaw 和 Paul Hammonds 在 Velocity 上演讲的启发,Patrick Debois 组织了一次名为“DevOps Days”的会议。早期,公众对 DevOps 持有褒贬不一的看法且大部分企业高层人员对其并不重视。DevOps 本应将技术人员们团结在一起,却难以定义,更难以衡量,因此很难提出令人信服的支持或反对理由。在这篇文章中,我将从 DORA 指标出发,探索 DevOps 实践与业务成果之间的预测联系。
DevOps 现状报告的由来
2012 年,Alanna Brown 开始编写年度《DevOps 现状报告》。后来与 Gene Kim、Nicole Forsgren 和 Jez Humble 组成了一个强大的团队。Nicole Forsgren 是一位具有丰富研究资历的博士,她领导了 2013 年至 2017 年的研究工作。每年,该团队都会对全球数万名不同工作角色和行业领域的技术人员进行调查。他们检查结果、寻找结论、并公布数据和他们的研究成果。他们的研究结论常常受到很多人的关注。
如何在技术领域进行性能基准测试?
为了了解为什么有些团队的表现比其他团队更好,首先需要一个衡量 IT 团队“绩效”的标准。DORA 小组讨论了各种传统指标(例如代码行数、故事点和利用率等)所面临的挑战,发现仅根据个人或团队投入的工作来定义他们的绩效是有问题的。
因此需要选择关注结果而不是产出。当他们这样做的时候,他们注意到了 4 个特定指标的独特之处,这 4 个指标涵盖了绩效和稳定性的平衡。这些指标被称为 "DORA 指标"。
部署频率(Deployment frequency)
变更交付时间(Lead time for changes)
平均恢复时间 (Mean Time to Recovery, MTTR)
更改失败率 (Change failure rate)
当团队表现更好时,特别是在这些指标方面,他们看到了独特的、统计上显著的、可预测的业务成果改善,包括:
盈利能力(profitability)
市场份额(market share)
生产力(productivity)
这种联系不仅存在于 "科技公司"(即以软件产品著称的公司),所有业务领域都是如此。到 2018 年,高绩效的技术团队为每个企业带来了竞争优势。更重要的是,DORA 继续讨论了其他 "非营利 "组织,在这些组织中,积极成果并不完全由银行存款余额决定。他们再次发现,DORA 指标是预测成功的可靠指标。
DORA 衡量标准为何有效?
DORA 指标之所以有趣,是因为它们能促进各种正反馈循环,同时强化速度和质量方面的良好实践。花费更少的情况下,这种组合可以让团队更快地交付质量更好的软件。
部署频率
正如 Chuck Rossi 在 Facebook 工作时所观察到的 "如果我们想要更多变化,就需要进行更多部署"。Chuck 面临着提高开发速度的压力。为了提供更多变更,Facebook 的部署变得越来越大、越来越复杂。然而,随着部署的增加,其可靠性也大大降低。一旦部署失败,就会造成严重后果。发现问题就像在数据中心大海捞针。Facebook 很难通过扩大部署规模来实现其生产率目标。
通过专注于从根本上提高部署频率而不是部署规模,Facebook 取得了更大的成功。他们能够交付更多更改,同时减少重大部署失败。当出现问题时,诊断起来更容易,修复速度也更快。他们了解到,生产力是部署频率的函数,而不是部署规模的函数。
为了从根本上提高部署频率,我们需要对组织层面的交付流程进行不同的思考。如果每次部署都需要两周的测试周期、过于形式的审查流程和 48 小时的停机时间窗口,我们就无法每周执行多次部署,更不用说每天执行 10 次部署了!
当目标设置为提高部署频率时,我们就需要了解交付时间。
变更交付时间
在 Accelerate 中,交付时间被定义为开发人员开始某项工作与该工作在生产中交付(并验证)之间的时间。(他们明确不计算某些错误修复或功能请求在高优先级 Jira 工单的长尾积压中等待的时间。)
低绩效公司以月为单位衡量交付时间,而绩效较高的公司则以小时为单位衡量交付时间。对于表现不佳的企业来说,他们的大部分漫长的交付时间都投入在测试、批准和验证上,因此他们理所当然地认为,想要加快行动就需要在质量或安全方面做出牺牲。
然而,对于大多数以前没有认真考虑过交付时间的组织来说,通过寻找流程中最长的等待、延迟和错误发生在哪里,然后进行更改或自动化步骤来避免,能够有在交付时间上获得巨大改进。减少这些问题,通过将大批量的变更分解为更小范围的、可独立交付的批次,团队将会收获另一个巨大的提升。这样不仅可以更快、更安全地交付,同时也能更容易地进行调整,且不会影响当前的进度。
持续较短的交付时间并不意味着仓促开发工作或跳过测试阶段的结果,而是更智能的团队合作和优先考虑的自动化工作的结果,使代码得到及时审查、更快地发现错误、提高质量、更安全的部署和更好的敏捷性。
平均恢复时间 (MTTR)
理解 MTTR 的最佳方法是将其与平均故障间隔时间(Mean Time Between Failure, MTBF)进行对比。对 MTTR 的关注意味着我们更关心减少故障所带来的影响,而不是完全避免故障的发生。相比避免故障,我们更注重故障时恢复的能力。我们还意识到显著降低部署频率和交付时间的安全举措也应当被避免,因为这些举措同样会产生系统性风险,即更长的交付时间或更高的部署风险等。
如果我们的故障可以在几分钟内修复,且这些故障只影响一小部分用户,同时所有数据都可以快速恢复,那出现故障就变得没那么可怕了。因此我们应当把更多精力放在恢复故障的能力上,而不是将一味捕捉每一个错误和故障。
当我们展示 MTTR(而非 MTBF)方面的持续改进时,就更容易省去不必要的形式流程。这可以有效缩短交付时间、提高部署频率、缩小部署规模,并带来更安全的部署和更好的 MTTR。
变更失败率
测试是 DevOps 中经常被遗忘的部分。在没有适当测试的情况下,持续部署是一种比以前更快地将错误部署到生产环境的方法。
虽然我们对 MTTR 而非 MTBF 的关注表明我们接受故障的发生,但这并不意味着我们会在故障发生时感到高兴。DevOps 是关于构建质量,通过小规模且频繁的部署,让部署过程保持平稳。
但在测试环节,我们需要快速进行检查,因此需要投资于自动化单元测试、集成测试、试运行部署和冒烟测试。在这个过程中,着重点在于频繁、快速、小规模的代码审查,而不是流于形式的缓慢、批量审查。需要注意的是,尽管我们总是试图减少部署失败的可能性,与试图减少部署失败的总数并不相同,总是担心部署失败的总数是否增加会分散注意力。
请参考以下信息,考虑哪家公司提供更高质量的产品:
B 公司的失败频率明显更高。然而,它可能被用户认为是更可靠的服务。A 公司的停机时间大约是原来的 3 倍,这将为用户带来巨大影响和损失。
通过将对 MTTR(减少故障影响)的关注与提高部署可靠性(由变更故障率定义)的共同努力相结合,即便部署失败的总数增加,仍然可以从根本上提高部署频率,同时提高质量。
DORA指标:公司业务成果的“占卜师”的更多相关文章
- 金融科技 DevOps 的最佳实践
随着软件技术的发展,越来越多的企业已经开始意识到 DevOps 文化的重要价值.DevOps 能够消除改变公司业务开展方式,并以更快的速度实现交付,同时创建迭代反馈循环以实现持续改进.而对于金融科技( ...
- 马蜂窝 iOS App 启动治理:回归用户体验
增长.活跃.留存是移动 App 的常见核心指标,直接反映一款 App 甚至一个互联网公司运行的健康程度和发展动能.启动流程的体验决定了用户的第一印象,在一定程度上影响了用户活跃度和留存率.因此,确保启 ...
- [Algorithm] 机器学习算法常用指标总结
考虑一个二分问题,即将实例分成正类(positive)或负类(negative).对一个二分问题来说,会出现四种情况.如果一个实例是正类并且也被 预测成正类,即为真正类(True positive), ...
- 72个可交付成果(PMBOK2008)
成果名称 包括内容 来自 用于 事业环境因素 组织文化.政府法规.行业标准.市场条件.工作授权系统.商业数据库.项目管理信息系统 外部现有的 启动.规划.执行过程的输入 组织过程资产 流程与程序(模板 ...
- 精通Web Analytics 2.0 (5) 第三章:点击流分析的奇妙世界:指标
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第三章:点击流分析的奇妙世界:指标 新的Web Analytics 2.0心态:搞定它.新的闪亮系列工具:是的.准备好了吗?当然 ...
- 评估指标:准确率(Precision)、召回率(Recall)以及F值(F-Measure)
为了能够更好的评价IR系统的性能,IR有一套完整的评价体系,通过评价体系可以了解不同信息系统的优劣,不同检索模型的特点,不同因素对信息检索的影响,从而对信息检索进一步优化. 由于IR的目标是在较短时间 ...
- stock 财务 指标
净资产收益率:"不能比利率低"每股收益是烟幕弹 有一点需要提请大家注意,观察净资产收益率至少要看过去三年的指标,如果公司没有经过大的资产重组,最好看看自其上市以来每一年的净资产收益 ...
- Python机器学习笔记:常用评估指标的用法
在机器学习中,性能指标(Metrics)是衡量一个模型好坏的关键,通过衡量模型输出y_predict和y_true之间的某种“距离”得出的. 对学习器的泛化性能进行评估,不仅需要有效可行的试验估计方法 ...
- 推荐系统评测指标—准确率(Precision)、召回率(Recall)、F值(F-Measure)
下面简单列举几种常用的推荐系统评测指标: 1.准确率与召回率(Precision & Recall) 准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量.其中精度 ...
- 我们最常见的UX设计交付成果有哪些?
以下内容由摹客团队翻译整理,仅供学习交流,摹客iDoc是支持智能标注和切图的产品协作设计神器. 有人会好奇,用户体验(UX)设计师每天都在做些什么呢?说实话,有很多事情!作为UX专家,需要将自己的设计 ...
随机推荐
- 2020-06-11-ASP.NET Core Blazor 子组件父组件数据同步的问题
上一篇写数据绑定的文章,写到最后留了一个坑.当子组件绑定父组件的一个字段,并且子组件修改它的时候父组件不能实时进行同步更新UI的问题,最近终于在Blazui作者的指导下搞定了. UserInfo类要实 ...
- 机器学习数据顺序随机打乱:Python实现
本文介绍基于Python语言,实现机器学习.深度学习等模型训练时,数据集打乱的具体操作. 1 为什么要打乱数据集 在机器学习中,如果不进行数据集的打乱,则可能导致模型在训练过程中出现具有&qu ...
- 记一次 .NET 某汽贸店 CPU 爆高分析
一:背景 1. 讲故事 上周有位朋友在 github 上向我求助,说线程都被卡住了,让我帮忙看下,截图如下: 时隔两年 终于有人在上面提 Issue 了,看样子这块以后可以作为求助专区来使用,既然来求 ...
- javascript中的错误类型
javascript 中的错误类型: SyntaxError TypeError ReferenceError RangeError URLError Error SyntaxError 语法错误 / ...
- Linux 目录 查看 压缩 编辑 命令
目录 一.文件目录 二.查看文件 三.压缩与解压 四.vim编辑 一.文件目录结构 文件类型: /root 管理员的家目录 /home 用户家目录 /bin 命令文件目录,存放命令,管理员和用户可 ...
- Java(instanceof和类型转换)
1.instanceof和类型转换 instanceof 引用类型比较,判断一个对象是什么类型 public static void main(String[] args) { // Object & ...
- 前端Vue分享菜单按钮弹框、微博分享、QQ分享、微信好友、朋友圈
前端Vue分享菜单按钮弹框.微博分享.QQ分享.微信好友.朋友圈 , 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13085 效 ...
- Pinot2的无人机任务和数据处理实践
目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 4. 应用示例与代码实现讲解 4.1 应用场景介绍 4.2 应用实例分析 ...
- 代理详解(java代理和CGLIB动态代理)
[代理]大家都知道,特别是在spring中aop.spring中的事务.spring解析注解@Configuration,以及最原始的解析spring.xml的配置,这些都是使用代理来进行实现的, ...
- 倒排Tree树
倒排Tree树 需求说明为: 树节点存在(标识)或者叶子节点存在标识 都需要展示出来 存在※的节点及其上级节点需要返回 其余节点需要剔除 A() ----------------------- ...