背景:

2020年基于我司业务形态,我开始实行敏捷项目管理。以敏捷为道,Scrum为法,迭代为术,禅道作器,大张旗鼓的搞了2年敏捷开发。随着时间推移,问题出现在2022年,当时我们已经完全按照Scrum的模式在运作着10个项目,以及项目团队。我们基于禅道提炼了如:任务准期率、任务准交率、计划偏差率等指标。但是其中一项指标成了我们10个团队的核心痛点,即:需求交付周期。我们在2022年年底复盘的时候发现全年下来,需求交付的平均周期为40天,也就意味着一个需求从登记到禅道到关闭的平均周期是40天。这是我们无法接受的,也是业务部门(内部甲方)无法接受的。

问题出在我们的发布与迭代是强关联的,我们的迭代是2周一次,然后一个迭代就发布一次,也就是说一个需求在理论上最快发布周期是21天(3周),这里说的是理论值如下图:

除非刚好,提出需求的那天正好是迭代开启的头一天,那样可以做到14天,但是那种情况太极限了。另外也不是刚刚提出需求,下个迭代就可以安排开发。所以普遍性来说,算上排期,一个需求平均交付周期在这种模式下最快就只能做到21天。

但是,不可接受的事情是我们10支项目团队,平均需求交付周期是40天,甚至比21天还要多2周。一个经典的案例是用户需求增加一个Excel导入导出的功能,问我们要多久。我们开发人员评估的工时是2小时,但是客户问我们什么时候能用上,我们回答却是2周以后。用户不理解,我们也不理解。至此,如何将迭代与发布脱钩,就成了我研究的课题。

摆在我们面前的有两条路线可以选择一条是SAFe,一条是DevOps。 由于我们在2020~2022年期间先后取得了Scrum Master 和 PMI-ACP的认证。所以思维定式上会去靠拢SAFe, 完全实行SAFe对人员的要求很高,转型也很痛苦。因此,我只采用了SAFe中的“发布火车”这一重点实践。 固定每周2、4 为发布周期。 在试行2个月后,研发人员抱怨声音越来越大,抱怨的主要原因是开发人员根本跟不上。其实这里所谓的跟不上,经过我后面的调研不是指开发能力不行,而是对代码没有基于需求做主分支管理。至此,我开始研究另外一条路线:DevOps 。

写在前面:实施DevOps两个月之后,我将需求平均交付周期从原来的40天,成功的缩短到了23天,并且后续任然有信心降低到15天内


正文:

我入手的第一本书籍是《DevOps实践指南》。说实话,这本书把我整的有点懵逼。书中讲了很多运维人员和开发人员的实操案例。虽然我本身具备10年的.Net开发经验,但是我现在本职工作是项目经理,这对我来说并没有解决我的核心痛点。也可能是我们目的性太强,造成了我耐不住性子去读这本书。不过,这本书在我小白阶段的时候,至少跟我说清楚了什么是:DevOps?

早期在百度搜索DevOps,多数解释就是:开发运维一体化,打通开发与运维之间的部门墙之类的。其实,这只是狭义的DevOps的理解。通过潜伏到各种微信群中,听到各种大佬对DevOps的解释,有的说是工具链有的说是是流水线有的说是实现自动化,有的说是实现CI/CD(持续集成/持续部署)

这种浑浑噩噩的阶段,直到读完《DevOps实践指南》才慢慢好转,那么究竟什么是DevOps?

我认为现在最好的定义是:研发效能。 特别是这个“效能”,不是研发效率,效率指的是团队的产能,速度。 而效能是这个“能”字是指的:赋能。 这样才解释清楚,在广义的DevOps是怎么适配到IT的研发场景。紧接着问题又来了,怎么个赋能法才叫DevOps?还是没说清楚什么是DevOps?我们先把这个问题先放一下,先来回答另外一个问题:什么是敏捷?

其实,在我入门敏捷的时候,也具有同样的困惑,什么是敏捷?是Scrum?是Xp?还是水晶? 后来明白了,符合敏捷宣言的都是敏捷。

再回到前面那个问题,什么是DevOps ?如何为研发效率赋能?是否也有类似敏捷宣言这样更具体的解释,答案是有的《DevOps实践指南》给出了DevOps 三大原则: 流动、反馈、持续学习。 简单来说符合 流动、反馈、持续学习的就是DevOps,并且DevOps自身也在不断进化更新。

可是,还是有点抽象。这个持续学习还好理解,无论是理论指导实践,还是实践完善理论,持续学习始终是向上的攀升的正确途径。

那么剩下的两个问题:

1,流动是什么?

2,反馈是什么?

带着这两个问题我又分别入手了《价值流动》、《敏捷无敌之DevOps时代》这两本书。

关于《价值流动》我之前写过另外一篇读后感,这里不做赘述,总之该书解释清楚了流动的是啥,如下图:

 

描述

交付物

特性

为推动业务结果而增加的新价值;对客户可见

新的业务价值

缺陷

为修复影响客户体验的质量问题

质量

风险

致力于解决安全、隐私和合规风险

安全、治理、合规

债务

软件架构和运维架构的改进

消除未来交付的障碍

到这里我的问题更多了,前面我们要解决的问题是如何将迭代与发布脱钩? 如何将需求交付周期从40天降下来?我们通常认为的需求就是上表中的特性,这里一看不但需求对应的特性没有 透明化另外的缺陷、风险 和债务也是不透明的。但是总而言之,一句话:当前我是看不见需求的流动, 这也就解释了为什么我潜伏微信群的时候,有大神解释DevOps 就是流水线,流动的东西就是上面的四大流动项。

上面解释清楚了什么是流动,以及流动的是什么。那么转换成为行动任务就是,打造一套体系让流水线,实现可视化、透明化。这让我们想起了考ACP的时候的 “价值流图” 有异曲同工之妙。

就像木桶定理一样,决定一个木桶能装多少水,取决于那么短板。 无论是特性、缺陷、风险、还是债务。对应的是四条处理流程(流水线),而将这个流程以进行可视化,就能发现过程中的短板,并加以改善。根据我浅薄的理解,我悟到这里,算是对“流动”有了一个较为具体的认知。

那么反馈又是什么? 基于我对敏捷的认知,反馈就是以最小可行产品实现快速上线,获得用户反馈,并立即优化调整。通过阅读《敏捷无敌之DevOps时代》之后,我有新的理解。通过各种工具建设对 观测指标 进行提炼对各项指标进行治理形成反馈并利用这些反馈进行改进和优化,从而形成犹如PDCA的正向循环。

所以,这里又说明白了为什么我潜伏在微信群中,大佬说DevOps是 工具链

说到工具链,不得不说我们潜伏微信群时候,大佬的另外一个解释:自动化前面讲的基于四大流动项,可以打造四条流水线。那么流水线除了做价值流图分析过程短板以及等待浪费以外,还可以针对流程本身进行提速。 这里我们可以简单的映射一下现实生活中的工厂,手动流水线自动化流水线

至于怎么自动化,说来也简单。就是把重复劳动的事情交给机器去做,现实生活中的流水线不也是这样的吗?这里对于解决了哪些重复劳动不做篇幅(PS.前期在B站一搜DevOps,老是出来一堆工具的实操教程,一直给我整的挺懵逼。)

这里再回头说一下,发布与迭代怎么脱钩,通过我对这些DevOps工具的了解,接触到了CI/CD

  CI (Continuous Integration):持续集成。它涉及将开发人员的代码频繁地集成到共享存储库中,并使用自动化构建和测试工具对代码进行验证。

  CD (Continuous Delivery/Continuous Deployment):持续交付/持续部署。它涉及自动化地构建、测试和部署应用程序以实现快速且可靠的交付。

本身,CI/CD 概念并不复杂,为什么我们前面用发布火车团队反应这么大呢? 前文中也有描述,没有基于需求创建分支这是其一,创建分支缺乏管理,无法有效的实施持续集成、持续部署这是其二。

通过建设CI/CD,基于需求创建分支,配合工具使用。做好的功能通过测试,就发布。不再等到迭代结束再发布,一下子就把需求交付与迭代脱钩了,我们的交付周期也很快的从40天降低到了30天内。

写到这里,我再提炼几个关键词: 流动、反馈、持续学习、透明化、可视化、自动化、工具链、流水线,CI/CD。

到这里,还不是DevOps建设的全貌,接下来就要大刀阔斧的动起来了~!


感悟:

前面已经讲过,由于在团队内部实行“发布火车”,造成的团队各种抱怨。为了达成共识,这次我选择了外来和尚念经。由于市场上也有不少的成熟的DevOps解决方案,我先后组织了4场“解决方案供应商" 线上交流会,让团队对DevOps有了一致的认知,也成功勾起了大家对组织改善的意愿。

这里我规划了三条建设路线同步进行:

其一,是工具链。包括:禅道18.0、GitLab、SonarQube、Jenkins、Selenium、Jmeter、K8s、Docker、Zabbix、WebFunny

其二,是流程与规范,包括:项目管理流程、需求管理流程、缺陷管理流程、敏捷运作机制、禅道使用规范、.Net编码规范、JAVA编码规范、GtiLab使用规范、持续集成规范、持续部署规范、测试管理规范、制品管理规范、服务器监督管理规范、应用系统监督管理规范。

其三,是过程性指标与结果性指标。包括:需求总数、需求从登记到设计周期、需求从设计到评审周期、需求从开发到提测周期、需求从测试到发布周期、代码提交次数、部署频率、部署成功率 等指标。

紧接着趁热打铁,直接把DevOps转型当做项目来做,发起了对DevOps的立项:

项目背景:

数字运营中心是敏捷型交付组织,具有边设计边生产边实施、用户需求多且变更频繁、软件使用过程中需要快速响应等组织特性。随着部门业务量的倍速增长,管理复杂度不断增加,同时需要更精细化的观测指标进行管控,产品设计、项目管理、软件开发、质量测试等过程缺乏规范性,尤其对细节管理需要实现过程与结果透明化,需要一套适合自己的面向企业服务的软件生产管理体系与工具,同时拉通各个职能角色,使软件生产业务数据透明可视;缩短需求生产周期,降低开发成本,进而实现开发运维一体化,提升管理效率。

项目目标:

目标1:需求平均交付周期从40天降低至25天。

目标2:需求按期交付率从90%提升至95%。

目标3:人均需求交付数从1.5提升至1.8。

目标4:软件发布一次成功率实现透明化,并提升至80%

项目收益:

投入180人天,获得约14人编制的产能,计算如下:

数字运营中心以70人为基准,当前月度人均交付需求数为1.5。 通过建设DevOps研发效能体系,预计产能提升至月度人均交付需求1.8。

通过计算可知:

当前产能:70*1.5=105

目标产能:70*1.8=126

提升产能:126-105=21

释放同等人力:21/1.5=14人,以人均薪资1万元计算,约每月降本14万元全年降本168万

项目蓝图:

成果:

再回到一开始的问题,我们通过建设蓝图里的一系列工具,成功实现了基于需求做代码版本的主分支管理,实现了一周2发布的频次。自此也完成了发布与迭代脱钩,虽然目前DevOps研发效能这个项目还没有完全结束。但是我们已经成功实现了交付周期从原来40天缩短到了23天。大致成果如下图:

《敏捷无敌之DevOps时代》读后感的更多相关文章

  1. 《DevOps软件架构师行动指南》读后感

    从软件架构师视角讲解了引入DevOps实践所需要拥有的技术能力,涵盖运维.部署流水线.监控.安全与审计以及质量关注,这是本书一开始内容简介的开头,本书的作者是伦恩·拜斯(Len Bass).英戈·韦伯 ...

  2. nodejs开发指南读后感

    nodejs开发指南读后感 阅读目录 使用nodejs创建http服务器; supervisor的使用及nodejs常见的调式代码命令了解; 了解Node核心模块; ejs模板引擎 Express 理 ...

  3. DevOps:软件架构师行动指南(文摘)

    第一部分 背景 第1章 DevOps是什么 第二部分 部署流水线 第三部分 横切关注点 第四部分 案例研究 第五部分 走向未来

  4. 2020年DevOps工程师入门指南

    DevOps兴起于2010年代,到现在DevOps已经在行业中拥有了一席之地,并在继续发展壮大. 有兴趣成为一名DevOps工程师吗?如果想要成为一名DevOps工程师,需要做到以下五点: 要有开发者 ...

  5. 5月29日 Java性能调优指南 读后感

    并行垃圾收集器 串行垃圾收集器 并发标记清除(CMS)垃圾收集器 Garbage First(G1)垃圾收集器 没有深入的学习G1的原理,只是看了大概的思想; SA工具:待学习

  6. 敏捷开发、DevOps相关书籍——书单

    自己瞎整理的一些书单,都是豆瓣评分比较高的书,可以作为选择的一个参考. 书名 豆瓣链接 持续交付:发布可靠软件的系统方法 https://book.douban.com/subject/6862062 ...

  7. 有奖试读—Windows PowerShell实战指南(第2版)

    为什么要学PowerShell? Windows用户都已习惯于使用图形化界面去完成工作,因为GUI总能轻易地实现很多功能,并且不需要记住很多命令.使得短时间学会一种工具成为可能. 但是不幸的是,GUI ...

  8. [转载]你所不了解的DevOps

    DevOps开发运维训练营 一旦建立了创新的文化,即使那些并非科学家或者工程师的人——诗人.演员.记者——也能以团体的形式,接受科学文化的意义.他们信奉创新文化的概念.他们以促进这种文化的方式投票.他 ...

  9. 给 DevOps 初学者的入门指南

    当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念.那么,到底什么是"DevOps"呢? 什么是DevOps 随着软件发布迭代 ...

  10. CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

随机推荐

  1. 【Azure Developer】Azure AD 注册应用的 OAuth 2.0 v2 终结点获取的 Token 解析出来依旧为v1.0, 这是什么情况!

    问题描述 使用 Azure AD 注册应用 Oauth2 v2.0的终结点(OAuth 2.0 token endpoint (v2):https://login.partner.microsofto ...

  2. 【问题排查篇】一次业务问题对 ES 的 cardinality 原理探究

    作者:京东科技 王长春 业务问题 小编工作中负责业务的一个服务端系统,使用了 Elasticsearch 服务做数据存储,业务运营人员反馈,用户在使用该产品时发现,用户后台统计的订单笔数和导出的订单笔 ...

  3. AutoGPT:有手就会的安装教程

    AutoGPT 是什么 Auto-GPT 是一个实验性开源应用程序,展示了 GPT-4 语言模型的功能.该程序由 GPT-4 驱动,将 LLM 的"思想"链接在一起,以自主实现您设 ...

  4. nginx配置文件编写及日志文件相关操作

    nginx配置文件编写及日志文件相关操作 目录 nginx配置文件编写及日志文件相关操作 nginx主配置文件扩展详解 部署nginx网站 注意事项 Nginx虚拟主机 nginx配置虚拟主机的三种方 ...

  5. express服务器框架

    Express 为了提高开发效率,我们在开发过程中,都会尽量使用别人已经开发好的第三方模块,而我们想要快速实现服务器端的开发,推荐一个当下比较流行的框架:Express Express 作为开发框架, ...

  6. 2021-01-19:mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户,个体户的数据量差不多占50%,根据条件把个体户的行都删掉。请问如何操作?

    2021-01-19:mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户,个体户的数据量差不多占50%,根据条件把个体户的行都删掉.请问如何操作?福哥答案20 ...

  7. 2022-03-25:给定一个长度为 N 的字符串 S,由字符‘a‘和‘b‘组成,空隙由 ‘?‘ 表示。 你的任务是用a字符或b字符替换每个间隙, 替换完成后想让连续出现同一种字符的最长子串尽可能短。

    2022-03-25:给定一个长度为 N 的字符串 S,由字符'a'和'b'组成,空隙由 '?' 表示. 你的任务是用a字符或b字符替换每个间隙, 替换完成后想让连续出现同一种字符的最长子串尽可能短. ...

  8. 2021-12-21:任务调度器。 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间

    2021-12-21:任务调度器. 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表.其中每个字母表示一种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间 ...

  9. 2021-10-19:缺失的区间。给定一个排序的整数数组 nums ,其中元素的范围在 闭区间 [lower, upper] 当中,返回不包含在数组中的缺失区间。力扣163。

    2021-10-19:缺失的区间.给定一个排序的整数数组 nums ,其中元素的范围在 闭区间 [lower, upper] 当中,返回不包含在数组中的缺失区间.力扣163. 福大大 答案2021-1 ...

  10. F对象和Q对象

    F对象 批量计算 Q对象,与或非