读《持续交付2.0》

几年前看过《持续交付(发布可靠软件的系统方法)》,感触不是很深,最近看了这本书的译者乔梁编写的《持续交付2.0》,结合工作中的种种,又有一种相见恨晚的感觉。可见好书是需要经常翻阅的,每次都会带来新的收获和思考。

全书围绕着双环模型展开,介绍了持续交付,快速实现客户业务价值的一系列的方法论和实践工具。本文将结合实际工作中遇到的问题来谈谈这些方法论和工具。

双环模型

  • 第一个环被称为探索环,主要就是搞清楚客户背后真实的业务目的,不只是要实现什么,怎么实现,而是要了解背后真正的原因,才能给出更合理的解决方案,通过沟通讨论出一个最小的可验证方案,以便能快速验证可行性,探索环也是持续交付2.0中新增的一个环

  • 第二个环被称为验证环,验证环的主要工作内容就是以最可靠的质量和最快的速度,将最小可行性解决方案从描述性语言转换成可运行的软件包,并将其部署到生产环境中运行。

信息偏差

即便是再熟悉,再有默契的人,沟通同一个事物的时候也会产生理解上的偏差。我觉得在探索环中需要做到信息的一致性,即便不能完全一致,后面的验证环也能快速出成果给客户确认,因为足够小,可以及时地调整方向,把风险降到最低。

信息偏差不止是客户和我们之间,在团队内部也经常会出现,我们在安排任务时不管是口头描述还是有详细的文档,总会出现结果和期望有偏差的情况。樊登讲过的日本企业交代任务的方式我觉得可以尝试一下:

  • 1、交代清楚事项

  • 2、让员工复述一遍(有的软件公司成为反向交底)

  • 3、和员工讨论做此事的目的

  • 4、让员工考虑有没有什么风险

  • 5、要求员工提出个人见解

看似很麻烦,但可以确保双方的想法能达到一致,减少后续返工的风险,其实就是磨刀不误砍柴工。

开发软件的目的是创造客户价值,所以,我们不应该仅仅关注快速开发软件功能,还应该关注我们所交付的软件的功能正确性。

流水线工作方式

双环中有很多的步骤,每个步骤环环相扣,从探索环业务需求的输入到验证环产出可以运行到成果,这是一个闭环,这个闭环的周期越短风险就会越小。从输入到输出,整个流程像流水线一样运转时,效率是最高的。就像敏捷中的看板文化一样,随着时间的推移,一个个的用户故事从最左边逐步移动到最右边。如果中间某个环境出现堆积或者断层,都说明可能出现问题了,需要停下来解决。

最近一个项目中需要做数据迁移,由于数据量和迁移的范围非常大,项目经理召集了公司很多其他项目组成员进行协助,项目经理按照自己熟悉的技术规划了迁移方式,学习成本比较高,对于初级开发或测试人员来说,短时间内很难上手,导致进度缓慢。

后来我们领导提出了更合理的方式,就是将迁移任务根据技术的难易程度分解成了几个大的步骤,各种水平的人都有事可做,并可以很快上手,最终高效完成了任务,这就是流水线效率的体现。

聚焦

书中讲到了四大原则:

  • 坚持少做

  • 持续分解问题

  • 坚持快速反馈

  • 持续改进并衡量

四个原则概括下就是要「聚焦」,特别是在时间紧任务重的情况下,更是要聚焦,只有聚焦了,双环模型的周期才会缩短。

案例一

最近团队有几个同事在开发一个独立的类邮件模块,功能涉及到收发邮件、删除邮件、收藏等功能。客户第一阶段关注的是,先要有这样一个功能模块,功能可以后面完善。聚焦的做法就是,快速完成邮件的收发功能,在交付期前有多的时间再完善删除邮件、收藏等功能。到了交付期,删除和收藏功能没有完成,不影响我收发功能的发布。

如果一开始将收发、收藏、删除等同时并行在做,可能到了最后时间,每个功能点都完成了一部分,但却不能交付客户。

案例二

我们开发的产品是一个功能强大的快速搭建平台,最近一客户使用我们平台来搭建业务功能,上线时间非常紧迫,这时就应该聚焦有哪些必须(阻碍业务)的功能目前还不能实现,利用探索环提交到产品团队,讨论出最小可行解决方案,然后在验证环快速出成果交付客户验证。

这时如果客户关注点在平台的非核心功能(主业务无关),提出各种优化需求和新增需求,这样就本末倒置了,最终上线会有极大的风险。

安灯(Andon)系统

「Andon」是一个信号灯,丰田公司要求员工,在生产流水线上遇到麻烦,都可以拉这个信号灯,生产线会立即停下来,直到问题解决,流水线才恢复运行,不让问题流到下一个环节。

安灯系统最重要的是让每一个员工都有质量意识,软件开发团队的中的成员往往就缺少这种意识,为了能早点完成任务,常常忘记完成这些任务的最终目的。

在这里分享一个小故事:

说有一人在路边看见地里有两人,一个人在前面挖坑,后面的人又用土把挖的坑埋上,由于好奇和不解,上前询问,两人回答,他们在种树,只不过负责放树苗的人今天请假没来。

从本职工作来说两人都完成的挺好,但没有价值。仔细想想一想,我们有时候是不是就像上面挖坑的人或是填坑的人一样?所以团队的每个人都应该为结果负责,都要能在适当的时候勇敢地拉下这个信号灯。

工具

持续交付在实践过程中离不开自动化工具,大体可以分为自动化构建和自动化测试。

自动化构建

不同大小的公司,或者处于不同阶段的团队,会采取不同的工具,适合自己的才是最好的,之前写过的几篇文章可以给大家参考:

1、GitLab 配合 Jenkins 打造自动化部署
2、在团队中使用 Gitlab 中的 Merge Request 工作模式
3、在 CentOS7 中安装 GitLab
4、敏捷下的需求和代码分支管理
5、不断进化的分支和需求管理

在上面的文章中有介绍我们是采用 GitLab 的 Merge Request 模式,对应到书中的分支策略,就是是主干开发,主干发布,因为每一个 Merge Request 分支的周期非常短,最终还是合并到主分支进行构建发布。但这种方式有一个问题,当同时并行任务过多时,合并时容易混乱。后面会尝试主干开发,分支发布的方式。

自动化测试

自动化测试大体可以分为单元测试和端到端测试,单元测试对开发人员的要求比较高,要保证持续交付高质量的产品,单元测试非常重要,我们现在也在规划和完善。

端到端测试目前已经在使用中,在之前的文章《端到端测试实践:Jenkins 集成TestCafe 》有所介绍。

总结

持续集成2.0这本书中有很多的干货,本文我只是找了几个我认为比较重要的点进行了描述,总之就一个目的,我们要快速地、正确地、高质量地把任务完成,并交付客户。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java使用Apache CXF开发Web Service

转自:http://blog.csdn.net/hu_shengyang/article/details/38384597 以前工作中也用CXF,但都是用别人现成搭好的环境,这次自己重头搭建一遍环境。过程中也有遇到的问题,也做了简单的整理。 对于CXF是干什么用的,我不想多说&#x…

程序员修神之路--kubernetes是微服务发展的必然产物

菜菜哥,我昨天又请假出去面试了战况如何呀?多数面试题回答的还行,但是最后让我介绍微服务和kubernetes的时候,挂了话说微服务和kubernetes内容确实挺多的那你给我大体介绍一下呗可以呀,不过要请和coffee哦◆◆kubernet…

.NET core3.0 使用Jwt保护api

摘要:本文演示如何向有效用户提供jwt,以及如何在webapi中使用该token通过JwtBearerMiddleware中间件对用户进行身份认证。认证和授权区别?首先我们要弄清楚认证(Authentication)和授权(Authorization&#…

Java ArrayList的实现原理详解

ArrayList是Java List类型的集合类中最常使用的,本文基于Java1.8,对于ArrayList的实现原理做一下详细讲解。 (Java1.8源码:http://docs.oracle.com/javase/8/docs/api/) 一、ArrayList实现原理总结 ArrayList的实现原…

.NET开发者的机遇与Web Blazor基础(有彩蛋)

一.唠唠WebAssembly的发展历程目前有很多支持WebAssembly的项目,但发展最快的是Blazor,这是一个构建单页面的.NET技术,目前已经从Preview版本升级到了beta版本,微软计划在2020年5月发布Blazor的第一个版本。Blazor是什么&#xff…

Java LinkedList的实现原理详解

LinkedList是Java List类型的集合类的一种实现,此外,LinkedList还实现了Deque接口。本文基于Java1.8,对于LinkedList的实现原理做一下详细讲解。 (Java1.8源码:http://docs.oracle.com/javase/8/docs/api/&#xff09…

知乎高赞:中国有哪些不错的开源软件产品?

点击蓝字“dotNET匠人”关注我哟加个“星标★”,每日 7:15,好文必达!在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?”事实上,还不少呢~…

容器日志管理 (2) 开源日志管理方案 ELK/EFK

本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。上一篇《容器日志管理(1)》中介绍了Docker自带的logs子命令以及其Logging driver,本篇将会介绍一个流行的开源日志管理方案ELK/EFK…

关于Scrum起源,读这一篇论文就足够啦!《新新产品开发游戏》

关于Scrum的起源,我们经常会提到1986年发表在HBR上的一篇论文,《The New New Product Development Game》,今天我们把它重新翻译,一起重温为何Scrum会如此设置3355?为何会用橄榄球的术语来代表Scrum?The Ne…

Java HashMap的实现原理详解

HashMap是Java Map类型的集合类中最常使用的,本文基于Java1.8,对于HashMap的实现原理做一下详细讲解。 (Java1.8源码:http://docs.oracle.com/javase/8/docs/api/) 一、HashMap实现原理总结 HashMap的实现原理总结如下…

ASP.NET Core快速入门(第5章:认证与授权)--学习笔记

点击蓝字关注我们课程链接:http://video.jessetalk.cn/course/explore良心课程,大家一起来学习哈!任务31:课时介绍1.Cookie-based认证与授权2.Cookie-based认证实现3.Jwt认证与授权介绍4.Jwt认证与授权实现5.Jwt认证与授权6.Role …

Java HashSet的实现原理详解

HashSet是Java Map类型的集合类中最常使用的,本文基于Java1.8,对于HashSet的实现原理做一下详细讲解。 (Java1.8源码:http://docs.oracle.com/javase/8/docs/api/) 一、HashSet实现原理总结 HashSet的实现原理总结如下…

asp.net mvc 自定义 pager 封装与优化

asp.net mvc 自定义 pager 封装与优化Intro之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, 自定义分页 pager 越来越容易扩展了…

Java LinkedHashMap的实现原理详解

1. LinkedHashSet概述: LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序…

.net core 中通过 PostConfigure 验证 Options 参数

.net core 中通过 PostConfigure 验证 Options 参数Intro在 .net core 中配置项推荐用 Options 来实现,有一些参数可能必须是用由用户来配置,不能直接写成默认值的参数,这样就需要就 Options 中的参数做一些校验,否则程序内部可能…

Spring配置错误java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataS

在对Spring数据源dataSource配置之后,运行程序出现如下错误: java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy 原因是项目没有导入spring-jdbc的jar包。 如果使用maven,可以直接在pom…

.NET做人脸识别并分类

前言在游乐场、玻璃天桥、滑雪场等娱乐场所,经常能看到有摄影师在拍照片,令这些经营者发愁的一件事就是照片太多了,客户在成千上万张照片中找到自己可不是件容易的事。在一次游玩等活动或家庭聚会也同理,太多了照片导致挑选十分困…

.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端

.NET Core ❤ gRPC千呼万唤的 .NET Core 3.0 终于在 9 月份正式发布,在它的众多新特性中,除了性能得到了大大提高,比较受关注的应该是 ASP.NET Core 3.0 对 gRPC 的集成了。它的源码托管在 grpc-dotnet 这个 Github 库中,由微软 .…

dotnet Blazor 用 C# 控制界面行为

微软很久就在做 Blazor 但是我现在才开始创建一个测试项目,我想用 C# 去控制 HTML 界面。小伙伴也许会问现在前端不是烂大街么,为什么还需要 Blazor 来做。可能原因只有一个,就是可以使用 C# 写脚本,代码比较清真用 VisualStudio …

2019年该学习哪门语言?建议学习C#语言

世界上只有少数几种语言是多功能的,而没有一个像C#那样干净整洁。作者 | Arctek译者 | 谭开朗,责编 | 郭芮出品 | CSDN(ID:CSDNnews)以下为译文:最直接的答案是:值得。但我想你不是来找这样的答…