Accelerate 精益软件开发和DevOps

时间:2024-03-14 20:23:22

《Accelerate》精益软件开发和DevOps

前言

本文根据《Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology》一书整理而成。

作为被Martin Fowler力荐的2018计算机优秀图书,该书并没有就精益软件开发和DevOps提出新的理念,而是从问卷调查和统计学来试图解密精益软件开发和DevOps之所以会帮助提升软件交付绩效和组织绩效背后的“科学”原理。

《Accelerate》知识图谱如下:

Accelerate 精益软件开发和DevOps

重要观点

  • 关注能力而不是成熟度

  • 关注结果而不是产出

  • 不可忽视的组织文化

  • 技术实践至关重要

  • 关注架构特征而不是架构细节

  • 内建安全胜于安全审查

  • 精益软件开发管理

  • 精益产品开发

  • 快乐工作

  • 以人为本

  • 领导者和管理者的支持至关重要

关注能力而不是成熟度

表(成熟度):

工具/软件,文档,看板,过程(站会、Sprint Planning、Sprint Retrospective),Scrum Team

里(能力):

结果导向,有机结合(人,技术,工具,过程),参见下面的“关键能力”

关注结果而不是产出

坏的的度量指标:

  • 代码行数:(副作用:烂代码、啰嗦或难以维护的代码)
  • Velocity(团队速度)(副作用:忽视团队间协作)
  • 资源利用率(副作用:排队、长期间等待,请参考ToC约束理论)

好的的度量指标:

  • Lead Time (前置时间)// 更快交付、更快反馈
  • Deployment Frequency(部署频率)// 小批量、大批量意味着不容易部署、部署指部署到生产环境(至少是预生产环境)
  • Mean Time to Restore(平均故障恢复时间,MTTR)// 可靠性、响应能力
  • Change Fail Percentage(变更失败率)// 质量

不可忽视的组织文化

组织文化类型:

  • 病态(权力导向)// 恐惧和威胁、报喜不报忧、欺上瞒下
  • 官僚(规则导向)// 地盘、按流程规定办事
  • 有创造力的(业绩导向)// 专注于如何实现目标、鼓励竞争

技术实践至关重要

持续交付:

  • Version Control (版本控制)

  • Deployment Automation (自动化部署)

  • Continuous Integration (持续集成)

  • Trunk-Based Development (主干开发)

  • Test Automation (自动化测试)

  • Test Data Management (测试数据管理)

  • Shift Left on Security (安全左移)

  • Loosely Coupled Architecture (松耦合架构)

  • Empowered Teams (激励团队)

  • Monitoring(监控)

  • Proactive Notification (积极通知)

关注架构特征而不是架构细节

  • 可部署性

  • 可测试性

  • 可扩展性

  • 工欲善其事必先利其器(让使用工具的人选用合适的工具)

    这个观点认为不是微服务架构就一定好过单体架构,关键还是看架构能否满足可部署性、可测试性和可扩展性的要求。

内建安全胜于安全审查

  • 安全左移
  • DevSecOps
  • Rugged DevOps

精益软件开发管理

  • 限制在制品(WIP)
  • 可视化一切(比如Kanban)
  • 更快地从市场/客户获得反馈
  • 轻量级变更审批流程(把审批流程和CI/CD Pipeline结合起来)

精益产品开发

  • 小批量生产
  • 可视化流程和工作
  • 获得并实现用户反馈
  • 团队自主实验

快乐工作

  • 减少痛苦
  • 减少倦怠

导致倦怠的问题:

  • 工作超负荷
  • 无力感
  • 缺乏奖励
  • 工作环境不友好
  • 缺乏公平
  • 价值观冲突

如何避免倦怠:

  • 组织文化支持
  • 减少痛苦
  • 领导者支持
  • 技能投资
  • 鼓励创新

以人为本

  • 工作满意度
  • 多元化
  • 关心少数群体

领导者和管理者的支持至关重要

  • 变革型领导者(愿景、沟通、引导、支持、认可)
  • 管理者(投资团队以实现目标、减少痛苦、绩效与目标一致)
  • 支持团队

关键研究问题

  • 软件交付意味着什么?是否可以衡量软件交付?

  • 软件交付是否影响组织绩效?

  • 组织文化是否重要?如何衡量组织文化?

  • 有哪些重要的技术实践?

  • 我们可以重新验证软件交付对组织绩效的影响么?

  • 技术实践和自动化是否影响软件交付?

  • 精益管理实践是否影响软件交付?

  • 技术实践和精益管理实践是否影响工作的某些方面?

  • 在软件开发过程中集成安全性会帮助还是减慢软件开发过程?

  • 主干开发模式是否更有利于软件交付?

  • 精益产品管理对软件开发和交付是否重要?

  • 良好的技术实践是否能加强员工对公司的忠诚度?

  • 什么样的架构实践能推动软件交付效能的改进?

  • 变革型领导如何影响软件交付?

  • 软件交付是否影响非盈利结果?

关键能力

Continuous delivery

  • Version control(版本控制)
  • Deployment automation(自动化部署)
  • Continuous integration(持续集成)
  • Trunk-based development(主干开发)
  • Test automation(自动化测试)
  • Test data management(测试数据管理)
  • Shift left on security(安全左移)
  • Continuous delivery (CD)(持续交付)

Architecture

  • Loosely coupled architecture(松耦合架构)
  • Empowered teams(鼓励团队)

Product and process

  • Customer feedback(用户反馈)
  • Value stream(价值链)
  • Working in small batches(下批量生产)
  • Team experimentation(团队自主实验)

Lean management and monitoring

  • Change approval processes(轻量级变更审批流程)
  • Monitoring(监控)
  • Proactive notification(积极通知)
  • WIP limits(限制在制品)
  • Visualizing work(可视化工作)

Cultural

  • Westrum organizational culture(组织文化)
  • Supporting learning(支持学习)
  • Collaboration among teams(团队间协作)
  • Job satisfaction(工作满意度)
  • Transformational leadership(变革领导者)