文章目录
《Accelerate》精益软件开发和DevOps
前言
本文根据《Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology》一书整理而成。
作为被Martin Fowler力荐的2018计算机优秀图书,该书并没有就精益软件开发和DevOps提出新的理念,而是从问卷调查和统计学来试图解密精益软件开发和DevOps之所以会帮助提升软件交付绩效和组织绩效背后的“科学”原理。
《Accelerate》知识图谱如下:
重要观点
-
关注能力而不是成熟度
-
关注结果而不是产出
-
不可忽视的组织文化
-
技术实践至关重要
-
关注架构特征而不是架构细节
-
内建安全胜于安全审查
-
精益软件开发管理
-
精益产品开发
-
快乐工作
-
以人为本
-
领导者和管理者的支持至关重要
关注能力而不是成熟度
表(成熟度):
工具/软件,文档,看板,过程(站会、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(变革领导者)