价值流分析:关于DevOps转型,我们应该从何处入手

关于“DevOps如何落地”的问题,向来是关注度很高的,所以,从今天开始,我会用16讲的篇幅跟你聊聊这个话题的方方面面。作为“落地实践篇”的第1讲,我先跟你聊聊DevOps转型的那些事儿。

相信你一定听说过持续交付吧?现在,几乎每家实施DevOps的企业都宣称他们已经有了一套持续交付平台,或者是正在建设持续交付平台。但是,如果你认为只需要做好持续交付平台就够了,那就有点OUT了。因为现在国外很多搞持续交付产品的公司,都在一门心思地做另外一件事情,这就是VSM价值流交付平台。

比如,Jenkins的主要维护者CloudBees公司最新推出的DevOptics产品,主打VSM功能,而经典的持续交付产品GoCD的VSM视图也一直为人所称道。那么,这个VSM究竟是个啥玩意儿呢?

要说清楚VSM,首先就要说清楚什么是价值。简单来说,价值就是那些带给企业生存发展的核心资源,比如生产力、盈利能力、市场份额、用户满意度等。

VSM是Value Stream Mapping的缩写,也就是我们常说的价值流图。它起源于传统制造业的精益思想,用于分析和管理一个产品交付给用户所经历的业务流、信息流,以及各个阶段的移交过程。

说白了,VSM就是要说清楚在需求提出后,怎么一步步地加工原材料,进行层层的质量检查,最终将产品交付给用户的过程。通过观察完整流程中各个环节的流动效率和交付质量,识别不合理的、低效率的环节,进行优化,从而实现整体效率的提升。

这就好比我们在餐厅点了一道菜,这个需求提出后,要经历点单、原材料初加工(洗菜)、原材料细加工(切菜)、制作(炒菜),最终被服务员端到餐桌上的完整过程。但有时候,厨师已经把菜做好摆在窗口的小桌上了,结果负责上菜的服务员正在忙,等他(她)忙完了,才把菜端到我们的餐桌上,结果热腾腾的锅气就这么流失了。

对软件开发来说,也是如此。由于部门职责的划分,每个人关注的都是自己眼前的事情,这使得软件交付过程变得碎片化,以至于没有一个人能说清楚整个软件交付过程的方方面面。

所以,通过使用价值流图对软件交付过程进行建模,使整个过程可视化,从而识别出交付的瓶颈和各个环节之间的依赖关系,这恰恰是“DevOps三步工作法”的第一步“流动”所要解决的问题。

我简单介绍下“DevOps三步工作法”。它来源于《DevOps实践指南》,可以是说整本书的核心主线。高度抽象的“三步工作法”,概括了DevOps的通用实施路径。

  • 第一步:流动。通过工作可视化,限制在制品数量,并注入一系列的工程实践,从而加速从开发到运营的流动过程,实现低风险的发布。
  • 第二步:反馈。通过注入流动各个过程的反馈能力,使缺陷在第一时间被发现,用户和运营数据第一时间展示,从而提升组织的响应能力。
  • 第三步:持续学习和试验。没有任何文化和流程是天生完美的,通过团队激励学习分享,将持续改进注入日常工作,使组织不断进步。

关键要素

你并不需要花大力气去研究生产制造业中的价值流分析到底是怎么玩的,你只要了解有关VSM的几个关键要素和核心思想就行了。那么,VSM中有哪些关键要素和概念呢?有3点是你必须要了解的。

  1. 前置时间(Lead Time,简称LT)。前置时间在DevOps中是一项非常重要的指标。具体来说,它是指一个需求从提出(典型的就是创建一个需求任务)的时间点开始,一直到最终上线交付给用户为止的时间周期。这部分时间直接体现了软件开发团队的交付速率,并且可以用来计算交付吞吐量DevOps的核心使命之一就是优化这段时长
  2. 增值活动时间和不增值活动时间(Value Added Time/Non-Value Added Time,简称VAT/NVAT)。在精益思想中,最重要的就是消除浪费,也就是说最大化流程中那些增值活动的时长,降低不增值活动的时长。在软件开发行业中,典型的不增值活动有很多,比如无意义的会议、需求的反复变更、开发的缺陷流向下游带来的返工等。
  3. 完成度和准确度(% Complete/Accurate,简称%C/A)。这个指标用来表明工作的质量,也就是有多少工作因为质量不符合要求而被下游打回。这里面蕴含了大量的沟通和返工成本,从精益的视角来看,也是一种浪费。

在实践中,企业往往将需求作为抓手,来串联打通各个环节,而前置时间是需求管理的自然产物,采集的难度不在于系统本身,而在于各环节的操作是否及时有效。有的团队也在使用需求管理工具,但是前置时长大多只有几秒钟。问题就在于,他们都是习惯了上线以后,一下子把任务状态直接从开始拖到最后,这样就失去了统计的意义。

需要注意的是,关于前置时间,有很多种解释,一般建议采用需求前置时间开发前置时间两个指标进行衡量,关于这两个指标的定义,你可以简单了解一下。

需求前置时间:从需求提出(创建任务),到完成开发、测试、上线,最终验收通过的时间周期,考查的是团队整体的交付能力,也是用户核心感知的周期。

开发前置时间:从需求开始开发(进入开发中状态),到完成开发、测试、上线,最终验收通过的时间周期,考查的是团队的开发能力和工程能力。

对于增值活动时长,我的建议是初期不用过分精细,可以优先把等待时长统计出来,比如一个需求从准备就绪,到进入开发阶段,这段时间就是等待期。同前置时间一样,很多时候,研发的操作习惯也会影响数据的准确性,比如有的研发喜欢一次性把所有的需求都放到开发阶段,然后再一个个处理掉,这就导致很多实际的等待时间难以识别。所以,如果完全依靠人的操作来确保流程的准确性,就会存在很大的变数。通过流程和平台的结合,来驱动流程的自动化流转,这才是DevOps的正确姿势。

举个例子,研发开发完成发起提测后,本次关联的需求状态可以自动从“开发中”变成“待测试”状态,而不是让人手动去修改状态,这样就可以避免人为因素的影响。通过代码,流水线和需求平台绑定,从而实现状态的自动流转。

关于完成度和准确度,在使用VSM的初期可以暂不处理。实际上,我见过一些公司在跑通主流程之后,着手建设质量门禁相关的指标,比如研发自测通过率,这些指标就客观地反映了VSM的完成度和准确度。关于质量门禁,在专栏后面我会花一讲的时间来介绍,你一定不要错过。

方式

关于VSM的关键要素,知道这些就足够了。那么作为企业DevOps转型工作的第一步,我们要如何开展一次成功的VSM活动呢?一般来说,有2种方式。

1.召开一次企业内部价值流程梳理的工作坊或者会议。

这是我比较推荐的一种方式。对于大型企业而言,可以选取改进项目对象中某个核心的业务模块,参加会议的人员需要覆盖软件交付的所有环节,包括工具平台提供方。而且,参会人员要尽量是相对资深的,因为他们对自身所负责的业务和上下游都有比较深刻的理解,比较容易识别出问题背后的根本原因。

不过,这种方式的实施成本比较高。毕竟,这么多关键角色能够在同一时间坐在一起本身就比较困难。另外,面对面沟通的时候,为了给对方保留面子,大家多少都会有所保留,这样就会隐藏很多真实的问题。

所以,一般情况下,像团队内部的敏捷回顾会,或者是版本发布总结会,都是很合适的机会,只需要邀请部分平常不参会的成员就行了。

2.内部人员走访。

如果第1种方式难以开展,你可以退而求其次地采用第2种方式。通常来说,企业内部的DevOps转型工作都会有牵头人,甚至会成立转型小组,那么可以由这个小组中的成员对软件交付的各个环节的团队进行走访。这种方式在时间上是比较灵活的,但对走访人的要求比较高,最好是DevOps领域的专家,同时是企业内部的老员工,这样可以跟受访人有比较深入坦诚的交流。

无论哪种方式,你都需要识别出几个关键问题,缩小谈话范围,避免漫无目的地东拉西扯,尽量做到有效沟通。比如,可以建立一个问题列表:

  • 在价值交付过程中,你所在团队的主要职责是什么?
  • 你所在团队的上下游团队有哪些?
  • 价值在当前环节的处理方式,时长是怎样的?
  • 有哪些关键系统支持了价值交付工作?
  • 是否存在等待或其他类型的浪费?
  • 工作向下游流转后被打回的比例是多少?

为了方便你更好地理解这些问题,我给你提供一份测试团队的访谈示例。

通过访谈交流,我们就可以对整个软件交付过程有一个全面的认识,并根据交付中的环节、上下游关系、处理时长、识别出来的等待浪费时长等,按照VSM模型图画出当前部门的价值流交付图,以及各个阶段的典型工具,如下图所示:

当然,实际交付流程相当复杂,涉及到多种角色之间的频繁互动,是对DevOps转型团队的一种考验。因为这不仅需要团队对软件开发流程有深刻的认识,还要充分了解DevOps的理念和精髓,在沟通方面还得是一把好手,能够快速地跟陌生人建立起信任关系。

价值

话说回来,为什么VSM会是企业DevOps转型的第一步呢?实际上,它的价值绝不仅限于输出了一幅价值流交付图而已。VSM具有非常丰富的价值,包括以下几个方面:

1.看见全貌。

如果只关注单点问题,我们会很容易陷入局部优化的怪圈。DevOps追求的是价值流动效率最大化,也就是说,就算单点能力再强,单点之间的割裂和浪费对于价值交付效率的影响也是超乎想象的。所以,对于流程改进来说,第一步,也是最重要的一步,就是能够看见全貌,这样才能从全局视角找到可优化的瓶颈点,从而提升整体的交付效率。

另外,对于全局交付的建模,最终也会体现到软件持续交付流水线的建设上,因为流水线反映的就是企业客观的交付流程。这也就很好理解,为啥很多做持续交付流水线的公司,现在都延伸到了价值流交付平台上。因为这两者之间本身就存在一些共性,只不过抽象的级别和展现方式不同罢了。

2.识别问题。

在谈到企业交付效率的时候,我们很容易泛泛而谈,各种感觉满天飞,但感觉既不可度量,也不靠谱,毕竟,它更多地是依赖于个人认知。换句话说,即便交付效率提升了,也不知道是为啥提升的。

而VSM中的几个关键指标,也就是前置时长、增值和不增值时长,以及完成度和准确度,都是可以客观量化改进的指标。当面对这样一幅价值流图的时候,我们很容易就能识别出当前最重要的问题和改进事项。

3.促进沟通。

DevOps倡导通过团队成员间的沟通和协作来提升交付效率,但客观现实是,在很多企业中,团队成员基本都是“网友关系”。即便都在一个楼里办公,也会因为部门不同坐在不同的地方,基本上只靠即时通讯软件和邮件交流。偶尔开会的时候能见上一面,但也很少有深入的交流。如果团队之间处于你不认识我、我也不认识你的状况下,又怎么有效协作呢?

另外,很多时候,在我们开展VSM梳理的时候,团队才第一次真正了解上下游团队的职责、工作方式,以及让他们痛苦低效的事情。这时,我们通常会设身处地地想:“只要我们多做一点点,就能大大改善兄弟团队的生存状况了。”实际上,这种同理心对打破协作的壁垒很有帮助,可以为改善团队内部文化带来非常正面的影响。实际上,这也是我推荐你用会议或者工作坊的方式推进VSM的根本原因。

4.驱动度量。

我们都认可数据的力量,让数据驱动改进。但是,面对这么庞杂的数据体系,到底哪些才是真正有价值的呢?VSM就可以回答这个问题。

在VSM访谈的时候,我们要问一个团队的交付周期、准确率等指标问题,如果你发现这个团队支支吾吾,只能给出模糊的回答,这时你就要注意啦,这里本身就大有问题。因为这就表示当前环节的度量指标不够清晰,或者指标过于复杂,团队不清楚关键的结果指标。

另外,如果数据的提取需要大量时间,比如需要采用人为统计算数的方式,那么这就体现了这个环节的平台建设能力不足,无法自动化地收集和统计数据,甚至有些关键数据还没有沉淀到数据系统中,只能通过人工本地化的方式进行管理。

这些都是DevOps转型的过程中需要解决的问题,可以优先处理。可以说,VSM是一场团队协作的试炼。收集VSM数据的过程本身,就需要平台间的打通和数据共享,以及自动化的推进,这有助于度量活动的开展。

5. 价值展现。

对于企业而言,任何投入都需要有产出。要实现DevOps的转型,企业需要投入大量的精力。那么如何让高层领导明白企业交付效率改善所带来的价值呢?价值流梳理就是一种很好的方式。因为VSM从价值分析而来,到价值优化而去,本身就是在回答DevOps对于企业的价值问题。

总结

在这一讲中,我给你介绍了DevOps转型的第一步——VSM价值流图,包括它的来源、3个关键要素,以及在企业中开展VSM的2种方式。最后,我介绍了VSM的5大价值,分别是看见全貌、识别问题、促进沟通、驱动度量和价值展现。

就像我们常说的,DevOps转型是一场没有终点的旅程,VSM的梳理也不会是一帆风顺的。因为对于企业价值交付流程的梳理,需要随着认知的深入不断地进行迭代和优化。不过,好的开始是成功的一半,当我们开始梳理VSM的时候,我们的着眼点就会慢慢调整到DevOps模式,并真正地开启我们的DevOps转型之旅。

 

原文地址:https://www.cnblogs.com/ting152/p/13527413.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


前言我们于2022年5月宣布推出 AmazonDevOpsGuruforServerless ,这是面向AmazonDevOpsGuru https://aws.amazon.com/devops-guru/的全新功能。通过此功能,开发人员能够提高无服务器应用程序的运行性能和可用性。该产品链接可点击:https://aws.amazon.com/devops-guru/fe
GIT、GITLAB、GITHUB、GITLIBGit是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Github - 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等作为开源代码库以及版本控制系统,Github目前拥有140多万开发者用户。随着越来越...
初识JFrog Artifactory背景在软件项目开发中,一个项目常常依赖于大量的外部库,而这些外部库又在不断的进行版本更新,特别是在当前微服务开发越来越流行的情况下,一个服务依赖于多个服务,如何管理依赖库以及依赖版本,确保开发有序进行呢?JFrog ArtiFactoryArtiFactory是一款二进制存储管理工具,用来管理构建构建工具(如:gradle)等所依赖的二进制仓库,以方...
在删除文件夹的时候,可能会遇到文件夹正在使用,操作无法完成,因为其中的文件,或文件夹已在另一个程序中打开,请关闭该文件夹或或文件,然后重试。这类无法关闭删除文件夹的情况,如下图所示。 解决这个的关键是,找到是哪个程序在使用该文件夹,把这个程序关闭掉就行了。 但有时说实在的并不好找。 下面来介绍一个方便的找到这些程序的方法。 首先按ctrl+shitf+esc快捷键,打开任务管理器。然后...
xcopy 若目标盘上不存在此子目录,而在目标盘的结束符又不以""为结束,则将提示:does destination specify a file name or directory name on the target[f=file,d=directory]?在目标盘上创建文件[按下]还是创建子目录[按下d] ?应选择d键如何在命令中指定copy的是一个文件或者目录?而不用再手动输入F或...
DevOps软件开发工艺解读随着业务复杂化和人员的增加,开发人员和运维人员逐渐演化成两个独立的部门,他们工作地点分离,工具链不同,业务目标也有差异,这使得他们之间出现一条鸿沟。而发布软件就是将一个软件想从鸿沟的这边送去那边,这之中困难重重。另一方面,行业竞争更加激烈,无论是客户还是公司自身,都要求软件能快速发布,频繁修改,而上边所说的这种隔阂,阻碍了开发团队的生产力,成了企业亟待解决的难题。面对...
创建任务创建任务比较简单,这里我们创建自由风格项目:General信息这里填写项目或任务的基本信息,如下:GitBucket这里我们用到的就以下两点,一个是参数化构建:构建的时候可以指定部分参数,比如这里我们这里指定要构建的分支作参数,第二个是丢弃旧的构建:这样每次构建都会丢弃之前历史构建,防止jenkins构建项目过多导致内存泄漏等问题:源码管理源码管理主要是填写我们要构建的...
一、在任务设置-构建触发器模块,选中“Build periodically”二、然后在日程表里输入你的定时构建时间,输入的时间语法参考如下:1、时间字段遵循cron的语法,每行由TAB或空格分隔的5个字段组成:MINUTE HOUR DOM MONOW DOW - 分钟:小时内的分钟数(0-59) - 小时 :一天中的小时(0-23) - DOM:月份的日子(1-31) ...
DevOps进阶(九)使用assembly plugin实现自定义打包assembly plugin的使用方式比较简单,主要有:1. 修改pom.xml pom.xml中设置如下:<build> <plugins> <plugin> <artifactId&g
<h2 id="1-操作环境"><strong>1. 操作环境</strong></h2>1. Windows:win72. JenkinsJenkins 1.6193. JavaJDK_1.7.0_64bit.exe4. Tomcatapache-tomcat-8.
在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。(2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。一.find命令基本格式:find path expres......
走近DevOps工程师我们之前已经听到很多谈论DevOps和DevOps世界的最新趋势的事情,但是就DevOps工程师本身,到底干些什么呢?在最纯粹的存在形式上来说,DevOps工程师是为了加快开发和运营团队之间的交付效率而存在的桥梁。DevOps工程师在软件生命周期中能带来什么?在传统的交付周期中,软件开发人员会在经年累月的编写代码后,将软件交给QA团队进行测试,然后将最终版本交给运营...
1、关闭Jenkins 只需要在访问jenkins服务器的网址url地址后加上exit。例如我jenkins的地址http://localhost:8080/,那么我只需要在浏览器地址栏上敲下http://localhost:8080/exit 网址就能关闭jenkins服务.2、重启Jenkieshttp://localhost:8080/restart3、重新加载配置信息http...
   我们在执行Jenkins的项目构建的时候一般都是通过web管理界面中的”构建”来执行项目构建操作,但是除此之外我们还可以通过项目配置中的”构建触发器”来触发构建操作,其中”构建触发器”有一种方式是通过配置令牌远程触发项目构建;要启用Token(令牌)远程触发项目构建首先要保证Jenkins服务安装了build-token-root 插件,...
maven三种打包插件maven有多种可以打包的插件,如下: plugin function 官网 maven-jar-plugin maven 默认打包插件,用来创建 project jar maven-shade-plugin 用来打可执行包,executable(fat) jar http://maven.apache.org/plug...
Linux下查看和添加环境变量$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。编辑你的 PATH 声明,其格式为:PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后......
贾磊:高级质量经理&敏捷教练曾就职于外企、国企、大型上市企业等,担任过测试工程师、测试经理、项目经理、敏捷教练、质量总监、高级质量经理等岗位。是一名敏捷变革的爱好者和践行者。爱好网球、羽毛球。正文原文链接:https://www.scaledagileframework.com/continuous-explorati
在IT流行语的字母组合中,DevSecOps是一个很容易让人混淆的缩写。DevSecOps是一个特定工具吗?是否有DevSecOps流程或最佳实践?DevSecOps应该成为内部IT部门的优先事项,还是更广泛的公司理念?如果一个公司已经利用了DevOps的流程和技术栈,那么它应该升级到DevSecOps吗?或者这只
企业项目开发流程商城1.1B2C直销商城商家与会员直接交易(BusinessToCustomer)1.2B2B批发商城商家与商家直接交易1.3B2B2C购物平台商家和会员在另一个商家提供的平台上面进行交易1.4C2B定制商城会员向商家发起定制商品的需求,商家去完成。1.5O2O线上线下
jenkins清除工作空间报错 错误如下: Error:WipeOutWorkspaceblockedbySCM   解决方法:进入jenkins服务器,进入workspace,手动rmcd/var/jenkins_home/workspace  ===================注释==================如果你的启动命令如下:【进行了外部目录的挂载