Lean是从丰田的生产以及开发方式发展出来的一种过程管理方法,从90年代开始被很广泛的研究。几年前的一本书《Lean Software Development》将Lean方法引入了软件开发领域,当时读了就觉得此书非同一般,非常有收获。所以决定将其精华整理一下,做个笔记。Lean在中文里翻译成“精益”,感觉总是怪怪的,所以我就直接用英文了。
首先概括一下Lean软件开发的七个原则。
1. 消灭浪费(Eliminate Waste)
这是Lean最基本的一个原则。丰田的大野耐一说过,我们所做的就是观察从客户给我们一个订单直到我们收到付款这个时间段,并且通过消灭无价值的浪费来缩短这个时间段。(All we are doing is looking at the timeline from the moment a customer gives us an order to the point when we collect the cash. And we are reducing that timeline by removing the nonvalue-added wastes.)软件开发中最大的浪费就是多余的功能。
2. 品质为先(Build Quality In)
从一开始就注重品质,而不是最后依靠测试。测试的任务不是发现缺陷而是预防缺陷,测试驱动开发(TDD)就是一个很好的实践。
3. 创建知识(Create Knowledge)
软件开发是个创建知识的过程。开发之前我们应该有一个基本架构,但是实际上,详细的设计总是发生在编码时的。我们不但应该有一个鼓励大家系统学习的开发流程,而且应该不断的改进这个流程。
4. 推迟决定(Defer Commitment)
首先我们应该依靠灵活的设计来使的大多数的决定是可逆的,这样就可以作出决定并在以后轻松的改变它。不可逆的决定(比如使用哪种开发语言等)应该尽可能的推迟,直到不得不作出这个决定时,因为此时我们拥有最多的信息。
5. 快速交付(Deliver Fast)
我们应该尽快的交付软件,这样客户才会满意,并且可以让客户没有时间来改变他们的想法。快速的交付还可以削除大量的浪费。
6. 尊重员工(Respect People)
软件开发以人为本,人是软件开发团队中最重要的资源。
7. 全局优化(Optimize the Whole)
软件开发中很容易发生局部优化,但是一个Lean的团队应该优化整个价值流(value stream),即从收到一个订单开始直到软件发布以及维护。
另外,从这些原则看出,Lean和Agile在很多方面都是相通的,但也有一些不同,以后会再谈这个问题。