• Scrum4hw
  • Cal2019
  • A-csm
  • 2018-new-csp-path
  • Csp-4
  • Arne-201911
  • Shine-scrum-02
  • Inner-training
  • Jens-heart-of-scrum
Accelerate:驱动效能改进的24个关键能力

#翻译:Wand,校对:姚冬

*本文节选及翻译自2018年硅谷畅销书《Accelerate》by Nicole Forsgren, Jez Humble and Gene Kim,仅供个人学习及交流用途。


前言

我们的研究揭示了24个关键能力,它们驱动着软件交付效能的改进,并经由统计证明其重要性。我们把这些能力归为5个类别:

   持续交付

   架构

   产品与流程

   精益管理与监控

   文化


在每个类别中,陈述的能力项之间没有特别的先后顺序。

持续交付能力

1.    对所有生产工件进行版本控制

版本控制使用GitHub或者Subversion之类的版本控制系统,管理包括应用代码、应用配置、系统配置、自动化构建与环境配置脚本在内的所有生产工件。

2.    自动化部署流程

部署自动化是部署能够实现完全自动化且不需要人工干预的程度。

3.    实施持续集成

持续集成(CI)是实现持续交付的第一步。这是一个开发实践,代码经常性地签入,每次签入触发一个快速测试集以发现严重的回归问题——开发人员马上修复它们。CI流程创造了规范的构建和包,并最终部署和发布。

4.    使用基于主干的开发方法

主干开发已经被用来预测高效能软件开发与交付。它的特征是一个代码仓库拥有少于3个活跃的代码分支;分支和分叉在被归并到主干之前的生命周期非常短暂(例如少于一天);同时,应用团队很少或从不存在“代码锁”时期,即由于合并冲突、代码冻结或者稳定期缘故,导致没有人能签入代码或者发起pullrequests。

5.    实施测试自动化

测试自动化是在开发全过程中,软件测试持续自动化(而非手工方式)运行的实践。有效的测试套件是可靠的——即测试能够发现真正的缺陷,并且只让可发布的代码通过。注意,自动化测试套件的创建和维护应当主要由开发人员来负责。

6.    支持测试数据管理

测试数据需要仔细地维护,测试数据管理正在成为自动化测试越来越重要的组成部分。有效的实践包括:拥有足够的数据来运行您的自动化套件、按需获取必要数据的能力、在部署流水线中调适您的测试数据的能力、并且数据不会限制您所能运行测试的数量。但需要提醒的是,在任何可能情况下,团队应该最小化其运行自动化测试所需测试数据的数量。

7.    将安全左移

把安全集成到软件开发过程的设计与测试环节之中,对驱动IT效能来说至关重要。这包括组织应用安全评审、请信息安全团队参加应用的设计和演示过程、对安全类库和包进行预授权、以及将测试特性的安全性作为自动化测试套件的一部分。

8.    实施持续交付(CD)

持续交付是一个开发实践,即软件在整个生命周期中一直处于可部署状态,同时团队视保持软件的可发布状态,优先于开发新的特性。对系统质量与可部署性的快速反馈,对所有团队成员都是可见的,并且当团队获知系统不可部署时,快速地进行修复。最后,系统可以在任何时间按需被部署到生产环境或交付到最终用户手中。


架构能力

9.    使用松耦合架构

这影响到团队能够在多大程度上测试与部署他们的应用,而不需要与其他服务进行编排。拥有松耦合的架构将允许您的团队能够独立工作,而不用依赖其他团队的支持和服务,从而使得他们能够快速地向组织开发并交付价值。

10. 构建一个赋能团队的架构

我们的研究表明,能够选择使用什么工具的团队,在持续交付上做的更好,从而驱动了更好的软件开发与交付效能。没有人能比实践者自身更清楚的知道他们需要些什么来做得更有效。


产品与流程能力

11. 收集并实施客户反馈

我们的研究发现,组织是否积极与频繁的获取客户反馈、并将这些反馈融入它们的产品设计,对于软件交付效能来说非常重要。

12. 可视化整个价值流的流动

对于从业务一直到客户的整体工作流动,包括产品与特性的状态,团队应该有良好的理解并构建可见性。我们的研究发现,这对IT绩效有着积极的影响。

13. 以小批量工作

团队应该把工作切分成能够在一个星期或更短时间内完成的小片。关键是把工作分解成小的特性以便能够快速开发,取代在分支上开发复杂特性并且不频繁发布的做法。这个想法可以被应用在特性层面以及产品层面。(MVP是一个拥有刚好足够的特性的产品原型,能够对产品及它的商业模式获得验证式学习。)以小批量工作,提供了短的前置时间,以及快速的反馈环。

14. 促进并使能团队实验

团队实验是开发人员的一种能力,他们在开发过程中尝试新的想法、创建并更新规格说明,而不需要经过来自团队外部的审批,这允许他们能够快速地创新并创造价值。尤其是当它与小批量工作、融合客户反馈及可视化工作流动等能力相结合时,影响巨大。


精益管理与监控能力

15. 拥有轻量的变更审批流程

我们的研究展示,基于同行评审的轻量级变更审批流程(结对编程或团队内代码评审),相对于使用外部变更审批委员会(CAB),能产生卓越的IT效能。

16. 跨应用与基础设施的监控以为业务决策提供信息

使用从应用与基础设施监控工具产生的数据,采取行动并进行业务决策。这超越了在事情不对劲的时候只能传呼人员的状况。

17. 主动检查系统健康状况

使用阈值和变动率告警来监控系统健康度,使得团队能够先发地侦测并化解问题。

18. 约束在制品(WIP)以改善过程及管理工作

使用在制品约束来管理工作流动,在精益社区中很流行。当有效使用时,它驱动了过程改进与吞吐率提升,并把系统中的约束可视化。

19. 可视化工作以监控质量并促进团队沟通

使用仪表盘或内部网站等可视化的陈列,来监控质量和在制品,这个做法对软件交付效能的贡献已经被证明。


文化能力

20. 支持生机型文化(由Westrum博士提出)

这个衡量组织文化的方式基于一个由Ron Westrum开发的拓扑模型。Westrum是一个社会学家,研究在航空与医疗等领域中安全攸关的复杂系统。我们的研究发现,这种文化衡量,是IT效能、组织效能及降低过载的预测性因素。它的典型特征包含良好的信息流动、高度合作与信息、团队之间的连接以及有意识的探寻。

21. 鼓励并支持学习

在您的文化中,学习被视为必不可少的持续过程吗?学习被视为成本还是投资?这是对一个组织的学习型文化的衡量。

22. 支持并引导跨团队协作

这映射出开发、运维与信息安全等团队之间能够多好地进行交互,在传统模式中,它们被视为各个孤岛。

23. 提供让工作有意义的资源和工具

这个对工作满意度的特别的衡量,是关于从事有挑战性、有意义的工作,并赋能员工实践他们的技能和专业判断。提供做好工作所需的工具与资源,也与此休戚相关。

24. 支持或展现转型领导力

转型领导力支持并增强DevOps所必需的技术与过程举措。它包含5个要素:愿景、智力激发、启发式沟通、支持型领导风格与个体觉察。

图: DevOps关键能力的总体研究