优化系统的一部分将总会导致整体系统的局部最优化。
----聚焦于整体价值流:从概念到现金。从客户的需要到部署软件。
----交付完整的产品:客户需要不是软件,他们要的是解决他们的问题。完整的团队创建全面的解决方案。
----着眼长远:警惕治理和激励系统受短期思维和局部优化绩效驱动。
2. 根除浪费
浪费是没有增加客户可以感知价值的任何事物。在软件开发存在三件最大浪费是:
----创建错误的事物:Peter Drucker说:“再没有比高效地完成那些根本不该做的事更无益处的了”。
----学习失效:我们的许多政策,比如通过计划差异来治理、经常交接和决策与工作分离,干扰了软件开发的本质——学习。
----系统颠簸,干扰平滑价值流的做法,如任务切换、需求清单过长、一大推部分完成的工作——事倍功半。
3. 内建质量
假如你在验证过程中经常发现缺陷,那么你的过程是有缺陷的。
----最终的确认应该不再发现缺陷!任何软件开发过程其主要目的是尽可能地在软件开发过程早期发现和修复缺陷。----使用测试优先的过程防错:测试,包括单元测试、端到端测试和集成测试,在软件开发的任何时候,在任何系统层级上,必须可以可用于树立系对统正确性的信心。
----打破依赖:系统架构应该能够支持在任何时候添加任何特性。
4. 持续学习
规划是有用的。学习是本质。
----可预测组织不猜测未来并将称之为计划。它开发一种对还未及展现的未来进行快速响应的能力。
----持有期权:想象代码作为试验——使之容变。
----最后负责时刻:在作出不可逆转决策之前尽可能多地学习。避免过早作出改变需要付出昂贵代价的决策和过迟决策。
5. 快速交付
从深入理解对所有利益攸关者来说什么是有价值的开始。从深入理解价值中创建稳定的拉动式的工作流。
----快速交付,高质量和低成本兼容:以速度为基础的竞争力的公司有大的成本优势,提供卓越品质和更能满足他们客户的需要。
----排队理论不只用于服务速度,也应用于开发:聚焦于利用率创建了阻塞导致实际上降低了利用。使用小批量和更少在制品降低周期时间。积极地限制列表和队列的规模。
----管理工作流比管理进度安排容易得多:使用迭代或kanban系统建立可靠的和可预测的交付的最好方法是建立可靠的和可重复的工作流。
6. 尊重每个人
人的公平和自豪感受自治、掌控和目标所激励。
----自治:最有效的工作群体是半自主团队和负责完整的有意义的任务的内部领导。
----掌控:敬重人意味着提供挑战、反馈和让每个人成为卓越的环境。
----目标:与有价值的工作目标相联系。只有相信他们工作有意义,人们才会投身于其中。
7. 持续改进
结果不是要点——要点是人员和提供结果的系统能力的开发。
----失败是一个学习的机会:当噪声不能容忍时,最可靠的绩效来自连微小的实效都深入调查和纠正。
----现有的标准是用来挑战和改进的:每个人遵循体现当前知名最佳实践的标准,同时,积极鼓励每个人去挑战和改变标准。
----运用科学方法:传授团队去建立假设,进行许多快速试验,创建简洁文档,执行最佳替代方案。