持续交付2.0

《持续交付2.0》读后感——软件工程实战进阶

Image

本文作者网名 银光 ,来自国内某互联网大厂。
原文发表于豆瓣的《持续交付2.0》的读书笔记, 2021年8月。

在还没有阅读本书之前,我以为本书是介绍devops工具的,看完之后,觉得本书应该属于软件工程,并且是接地气的,进阶版的软件工程。

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

双环模型

开篇便是从较宏观的角度介绍软件研发过程的持续交付2.0双环模型,

探索-->验证-->探索-->验证...,

很熟悉的模式,想起了实践论、小步快走、用户调研……

总的来说,双环模型是很好的抽象总结。

组织文化

接着介绍了组织文化,怎么让双环模型落地。章节内容不多,但谈到了很多要点,总结下我有感触的文化上的3点:

(1)owner意识,组织里的每一个人都对整体产品负责,任何好的制度,最终都要落到人来执行,安灯系统在制度上更容易激发执行者的责任意识;

(2)目标感,在流程的每个方面强化目标感,基于目标衍生出来的动作,包括:关键结果、培训、衡量手段;

(3)学习型组织,允许犯错,定期复盘,让组织越来越好;

除了介绍文化之外,还重点介绍了,如何建立组织所希望的企业文化的步骤,这点和团队管理比较像,作者总结的很完善:

(1)定义想要做的事情;

(2)定义期望的做事方法;

(3)提供相应的培训;

(4)做些必需的事情来强化所希望的那些行为。

读到这里「心有戚戚焉」,也是总结了我在团队管理上的探索。

我希望我们团队是一个(1)执行力强又有创造思维;(2)协作高效;(3)有分享精神、有影响力;(4)持续进步的团队。

于是,我总结出来一套做事方法,并采取一些制度流程,例如:

  • 制定需求开发的标准流程

  • 定期每周一次团队分享会议

  • 每周复盘团队OKR

  • 每周复盘个人需求规划&执行情况

  • 鼓励每个负责人自己提炼需求——技术驱动、

  • 强制Code Review 制度

  • 强制文档总结

  • 强化导师带人时间投入

…

还提供了一些职业素养的指导文档、新人手册、导师文档以及推荐阅读书籍,并在团队会议、奖项申报、绩效考核中强化团队导向,让符合团队导向的同学拿到更多激励。 

软件研发流程

接下来有多个章节,主要介绍了软件研发流程中的要点。

软件系统架构

首先是软件系统架构,可持续交付对系统的架构有要求,常见的是微核架构和微服务架构。作者总结的持续交付架构写得很好:

  • 为测试而设计;

  • 为部署而设计;

  • 为监控而设计;

  • 为扩展而设计;

  • 为失效而设计。


5个小点很精炼,高扩展、容易测试、容易部署、可监控、要有容错设计,仔细思索,影响交付效率的通用的要点就是这些。

需求协作管理

书中对需求协作管理的讨论,包括从需求产出到需求交付的全流程,其中很重要的点是如何拆分需求,例如:INVEST原则(独立的、可协商的、有价值的、可估算的、规模小且适中的。

部署流水线

需求编码完成之后,就是部署,接着介绍了部署流水线原则和工具的设计,这里详细介绍了流水线涉及的每个环节.

分支策略

接下来看的是分支策略,当前推崇的是主干开发,主干发布,注意:只要分支时间存在时间极短(书中认为,代码变更从开始到提交应尽量不超过1天、绝大多数不应超过3天),及时合回到主干,那么就可以算作这种模式。

代码编写过程中怎么能够持续的合并代码、快速编译反馈,依赖基础设施建设、研发流程,以及工程师的素质。要实现持续高效的代码合入,减少人力,在代码质量上需要自动化——自动化测试。

配置管理

为了实现流水线的“一切自动化”——软件配置管理就显得非常重要,软件配置管理是指在整个软件生命周期中,对生产和运行环节中相关产物的管理。

低风险发布

接着是低风险发布,指在发布环节如何保证低风险高效率。最后是监测与决策,服务上线之后,监控少不了。

真实案例

最后三个章节介绍了三个真实案例。

(1)将大团队拆小:feature term模式的实践;

(2)小团队从“假”敏捷到“真”敏捷转换的实践;

(3)小团队从混乱模式进入到敏捷开发,再进入到持续交付,并形成devops文化的实践;

我正好在职业生涯中参与过类似案例1和3的团队。

2011年毕业工作,遇到的第一个团队便是采取敏捷开发模式,没有猜错的话,也正好是和案例3是同一家公司,我参与的是PC客户端研发团队,当时还将我们团队的敏捷实践作为学习案例贴在宣传栏上——男厕所坑位宣传栏:)。2016年到T厂,正好是某APP团队按feature term模式拆分之后,没机会见识一个超级大团队的混乱。

身在其中,有时并不懂得其中的幸福,刚毕业以为所有的软件研发团队都该是敏捷的,有story、有需求拉通PM\RD\QA评审、有jenkins...等等,后来到了公司的深圳研发中心,才见识到石器时代的开发模式,一时震惊。

越往后见识过不同的研发模式、不同的人,越觉得那些年在B厂待过的第一个团队,无论人员战斗力、研发模式、氛围,都是难得再见的。

好的研发模式,必须要有优秀的执行者,粗放的研发模式下待了三年多之后,见到T厂某BG终于重视研发效能,重视工程师素养培养,真实可喜,如今新入职的小同学们,是否能够意识到,你们正处在前所未有的幸福之中?

附录:一些比较新的名词:测试左移、质量内建。