原文链接:https://hackerchick.com/agile-vs-lean-yeah-yeah-whats-the-difference/
敏捷和精益是同一样东西吗?当人们讨论敏捷的时候,他们是在说Scrum吗?还是敏捷有不同的流派?如果是这样,原因何在呢?
在读者发散出更多的问题前,在此处先做一点解析:
LEAN(精益)
精益开发Lean,源自精益生产。精益生产是一组原则指导,主要应用在质量、速度和客户关系。(这里是否已经开始联想到敏捷开发?)
Mary & Tom Poppendieck 将精益生产的原则引入到了软件开发中。参见“Implementing Lean Software Development: From Concept to Cash”。笔者认为精益开发的思想也为敏捷的可行性/科学性提供了依据。
1、Eliminate Waste(消除浪费)
2、Build Quality In(嵌入质量)
3、Create Knowledge(创造知识)
4、Defer Commitment(延迟决策)
5、Deliver Fast(快速交付)
6、Respect People(尊重他人)
7、Optimize the Whole(整体优化)
Lean的核心是:不停地(无情地)消除任何不增加价值的工作。只做此刻必要的工作。消除浪费指消除没用的会议、任务和文档。也包括消除此刻不是必须的建造。当我们知道某些东西是我们未来需要的,如果我们在当前就创建,由于需求的变化那我们可能要面临返工,甚至可能当前的建造在未来已经没有价值。消除浪费还包括消除低效的工作方式,例如多任务并行(multitasking),消除浪费才能达成快速交付。
Lean另一个强调的概念是系统“the system”。整个团队应该是一个整体的运作。我们应该从一个高层次去观察我们的工作,确保我们从整体去进行优化。例如,很多Manager会关注对具体的个人开发人员的优化,确保他们100%的在开发。但这样做往往适得其反。很多时候,我们不应该让开发人员开发不是紧急的,未定义清楚的东西,不要为了编码而编码。因为这样做很多时候只是为我们以后带来更多的工作(返工)参考“Why You Should Let Your Developers Surf”。
Lean还强调尊重他人(一线开发或团队成员)。相信正在做一件事的人就是最能做好这件事的人(the people doing the work are the ones that best know how to do it)。给他们配备需要的东西去高效工作,并且信任他们。软件开发是关于学习的,所以要对工作合理的结构化,确保我们是在持续的学习。这也是精益提倡“延迟决策”,在最后一刻再做决定的原因。因为在那个时候我们会知道得更多。最后,要在建造(软件)产品的时候就嵌入质量(检查、保证)。如果我们总是要回头去修复之前的问题,那么我们将无法做到“快速交付”。
真正精益的组织具有强大的竞争优势,因为他们能够以高度严谨的方式去回应市场需求,而不是去预测未来。--Mary Poppendieck
Agile(敏捷)
敏捷对应的是一组价值观和原则。具体可以参考敏捷宣言(Agile Manifesto)。敏捷宣言是针对过去流行的重量级方法论的变革。重量级方法论把软件项目和真正要做的事情割裂开来。我们真正要做的事情是创建软件,帮助客户。后者才是根本和目的。笔者认为,敏捷的价值观和原则是正确和有效的,因为他们同样符合精益Lean背后的科学性。因此,在敏捷中可以看到和精益非常类似的表述。
文章接着列出了敏捷宣言和12个原则。这里不再展示,读者有兴趣可以通过上面的链接去查看。
所有遵循敏捷宣言和原则的项目都可以被认为是敏捷的。当然,敏捷团队为达成敏捷也会执行一些特定的共同的实践。例如
Scrum或者Kanban,或者两者的混合。这些属于管理实践。
XP(极限编程)属于技术(工程)实践。更多更新的实践,例如持续发布(Continuous Deployment),生产环境测试(Testing in Production)。
一个好的敏捷团队要同时选择对自己最适用的的管理和工程实践。那些只选择了一两项措施的团队,很可能只是在进行假敏捷。
后记:
一些朋友读了本文后表示没了解到区别是什么。我尝试说一下我的理解。首先精益是一个更大的概念。最先影响的是精益生产。然后从制造业引进到软件开发,有了敏捷和精益开发。从时间上看,敏捷应该早一点,2001年敏捷宣言发表。而文中提到的精益开发是2003年成书的。但是,Scrum是在1995年提出的,Scrum也是源自精益生产的。所以两者的关系是你中有我,关联发展的。就正如笔者所说,背后的科学性是相通的。大家的价值观也近似。只是在具体的一些实践有偏向。
所以我个人的归纳是,敏捷是精益在软件开发中的一种体现。精益开发和Scrum一样是敏捷管理实践中的一个流派。至于具体实践的区别,文章确实没有提及。Scrum我个人比较了解,至于Lean,希望以后有更多的了解,可以向大家介绍。谢谢你的阅读,欢迎留言!