《持续交付 2.0》读书笔记
当我们通过“探索环”对最小可行方案达成共识以后,要借助“验证环”的快速运转,才能将其交付到用户(客户)手中,从而得到真实且可靠的反馈,以验证之。
快速验证环的运转速度也由两部分决定:一是探索环中得出的最小可行性解决方案的大小和复杂性,我们在前一章中已经讨论过得到最小可行试验方案的工作方法,二是验证环自身运转的速度。
验证环的目标
进入验证环的基本前提是“团队已达成共识,所选的方案是当前所处环境下,验证或解决业务领域问题的最佳方式”。验证环的目标就是借助各种方法与工具,让质量可靠的解决方案以最快的速度到达客户手中,从而收集并分析真实的反馈。
质量与速度是验证环的关键,然而,它们却常常被认为是互斥的,也就是说,要想交付质量好,那么交付速度就会慢,反之亦然。然而,Puppet Labs 发布的 2017 年 DevOps
现状调查报告结果显示,与低绩效 IT
组织相比,高绩效 IT
组织可以同时实现这两个目标,也就是说,发布质量好而且频率高。持续交付 1.0
在这方面发挥了巨大作用,如质量内建、小批量交付、自动化一切重复工作等。
验证环的4个关键环节
验证环的主要工作内容就是以最可靠的质量和最快的速度,将最小可行性解决方案从描述性语言转换成可运行的软件包,并将其部署到生产环境中运行,准确收集相关数据并呈现,以便团队根据相关数据做出判断和决策。
与探索环一样,它也包含 4 个环节,分别 是构建、运行、监测和决策。
构建:是指根据非数字化描述,将解决方案准确地变成达到质量要求且可运行的软件包。
运行:是指将达到质量要求的软件包部署到生产环境或交到用户手中,并使之为用户提供服务。
监测:是指收集生产系统中产生的数据,对系统进行监控,确保其正常运行。同时将业务数据以适当的形式及时呈现出来。
决策:是指将收集到的数据信息与探索环得出的对应目标进行对比分析,做出决策,确定下一步的方向。
构建
构建环节是将自然语言的描述转换成计算机可执行的软件,即“质量达标的软件包”。这一环节既要求相关人员能对业务问题及试验方案达成共识,又要求能够准确地将团队的意图转换成最终仅由 0 和 1 组成的数字程序。
这一环节的参与角色最多,尤其当开发一个新产品或者产品有重大变更的时候,参与角色如业务人员、产品经理、开发工程师和测试工程师,以及运维工程师。每个角色的背景知识和技能优势各不相同,如何快速将人们头脑中的解决方案变成可以运行的高质量软件包,一直是软件工程领域的一个难题。这是验证环内不确定因素最多的一个环节。
时间盒管理 、 工作任务分解 和 持续验证 是应对这种不确定性的好方法。
时间盒管理:时间盒方法是一种常见的管理方法,很多项目管理方法中都使用时间盒管理。时间盒方法通常会涉及交付物、交付质量和截止时间。通过建立时间盒管理机制,可以了解当前的项目状态(进度与质量),及时发现风险,制订对策。它可以让团队时刻关注工作产出,及时得到进度和质量反馈。
工作任务分解:常见的两种任务分解是需求拆分和开发任务拆分。
持续验证:持续验证是指每当完成一项开发任务或需求(包含子需求),就立即对交付质量进行验证,而不是等待多项需求完成后,再进行大批量的质量验证工作。这是一种快速反馈机制,也就是说,一旦完成,即有反馈。例如,这些质量验证工作可能包括代码规范检查、代码安全扫描,验证其是否破坏了原有功能、是否满足设计需求等。尽管此时的工作成果还没有交到用户手中,但是可以验证其是否达到了内部质量标准。
运行
这一环节是开发团队与运维团队之间发生冲突最多的环节,也是重复性手工操作最多的环节之一。在这一方面,团队应该不遗余力地进行改进和优化,将人从重复性体力劳动中解放出来。
监测
监测环节收集数据,并统计展现结果、及时发现生产系统问题以及业务指标的异常波动,并做出适当的反应。它也是团队做出决策的最重要数据源之一。
为了能够在第一时间收集到所需数据,团队必须在验证环一开始就讨论并确定验证所需的数据需求,尽早讨论并定义数据需求规范,制订日志记录标准,建立数据日志元数据,并与相对应的功能需求一并同时实现。否则即使相应的功能特性上线,也无法得到相应的数据而耽误决策。
决策
决策是指收到真实的业务数据反馈结果后,根据探索环中已确定的相应衡量指标进行对比分析,从而验证是否符合最初的预期。通过分析其中原因,最终确认原来定义的那些需求假设是否成立,并决定是否坚持原有的产品方向,或者根据得到的信息做出调整。此时,下一步行动既可能是从精炼环节的最小可行方案列表中选择下一个试验方案,也可能是返回到持续交付 “8” 字环的起点,开始新问题的探索。
工作原则
验证环的工作原则主要包括 质量内建、消除等待、尽量并行、监测一切。很多软件开发方法已为我们提供了诸多优秀实践,消除了其中的浪费。然而,有一些实践可能会超出团队当前的能力,需要团队管理者制订相应的团队能力提升计划。
质量内建
“质量内建” 就是从生产过程的第一个环节开始,就要注重产出物的质量,并且在每个环节中都要开展质量保障活动,消除因质量问题导致的返工及次品率上升,以此降低最终的质量风险,保障进度。
消除等待
提升效率的最有效方法也许就是消除各环节的等待。
通过“拉动”让价值流动起来:团队的瓶颈通常都是动态变化的。即使我们做了需求分解工作,也不能保证在任何时刻整个系统都是平滑运行的。我们还有另外一种解决方案,那就是:利用开发环节暂时过剩的人力来建设工具平台,提升下游的基础能力,使得在不增加测试人力的情况下,永久提升团队整体产能。当然,通过提升人员整体技能水平也能达到同样的目的。
任务自助化:企业应该在工具平台建设方面改变一下思路,也就是说,通过运用先进的生产技术,使得环境部署、数据统计这一类事务性操作不再依赖“专家型”人才,而是让每个人在其需要时都能够“自助服务”。那么每个人都可以流畅地工作,而且“专家型”人才被“打断工作”的次数也会减少。
重复事务自动化
在软件研发过程中,还有很多重复性的工作,如搭建测试环境、回归测试、应用部署与发布等。在交付频率不高的情况下,这些活动并不会占用很多的工作时间。然而,随着验证环运转速度的提高,意味着在固定的时间周期内,软件的发布频率提高,这种事务性工作的固定成本占比也会越来越大。
我们必须通过优化流程和自动化措施,有效降低这些固定的事务性成本,同时避免不必要的人为操作失误,才能使其具有可持续性。
监测一切
当软件在生产环境运行之后,我们需要能够及时准确地收集并分析数据。对生产系统的监测有两个目的,一是要确认软件的确在正常运行,一旦发现异常,我们可以及时采取措施,纠正错误,以免影响用户的使用。二是要及时得到有效业务数据,验证我们在探索环中提出的假设。
对于第一个目的的监测,可以称为“应用健康监测”。
对于第二个目的的监测,可以称为“业务健康监测”,其主要是针对业务指标的监测。
小结
验证环以快速高质量交付为主,主要包括 4 个环节,分别是构建、运行、监测和决策。在 “持续交付 2.0” 的“识别并消除一切浪费”理念的指导下,验证环的 4 个工作原则分别是质量内建、消除等待、重复事务自动化和监测一切。
只有坚持这些指导原则,不断发现并消除工作中的浪费,才能够提升验证环的运转效度,加快对最小可行解决方案的验证。