PS: 第一次翻译英文文章,请多指教。原文【The True Corruption of Agile】,作者是大牛Uncle Bob。和我之前写的一篇博客”我的敏捷观“很意合。关于文章所说的13项实践,可以参考Uncle Bob的另一篇文章“极限编程,一次反思”
Andrew Binstock最近一遍博客"敏捷的腐败",这篇博客是在Allen Holub写的一篇博客“The Agile Holocracy”而写的,请允许我总结一下:
Holub 说
“...敏捷是一种文化,而不是一套实践”
Binstock说得更详细:
一个团队(site)是否敏捷依赖于它的文化。它的文化支持敏捷宣言的个人价值吗?如果是,那么它就是敏捷的,否则它就不是敏捷的。所以,你即使不采用TDD,持续集成,scrum,你也可以很敏捷;同样,你即使完全采用了这三个实践,但是你不适应改变,工作中完全不具有弹性,那么,你就完全不敏捷了。
乍一看,这些说法似乎很合理,毕竟,文化是用来表达价值观的。然而,Holub和Binstock其实就是在说,文化和实践是分开的。事实上,文化和实践不是分开的,文化是由实践来定义的。
你知道你是通过观察你周围人们的实践来认识你所处其中的文化的。如果你看见一个穿着长袍的女人,你就能猜出她的文化。如果你看到一个新娘和新郎在华盖下面打碎玻璃,你就能猜出是什么文化。如果你看到一群小孩挥舞着棍子在敲打着挂在树上的纸糊的驴,你就能猜出是什么文化。
如果没有实践,你就没有文化。你所遵循的实践和你的文化是一致的。
有一天,我们的老师新提出一个实践活动:如果你上课迟到了,那么就不是简单的鞠躬了,你还要趴下来做10个俯卧撑。他问我们是否能接受。这个提议立即招来了异议:年轻人都支持这个提议,因为它代表对于守时价值观的尊敬,也是对于那些暗示来上课的同学的尊敬。而我们其他人都表示反对,因为这个新的实践活动是对于我们这些每天很忙的人的不尊敬,因为对于我们这些大忙人来说说,要守时还是很不实际的。我们对于我们自己的工作和婚姻的价值观要高于道场的价值观,我们并不想要那些迟到了就要接受惩罚的价值观。
老师在下课后问我们感觉怎么样?我脱口而出:“我坚决反对。”当老师问我为什么反对的时候,我又说不出什么所以然来。因为这个实践(迟到受惩罚)冲击的是我们内心最深处的价值观,所以我当时还真找不到反对的理由。虽然这件事发生在15年前,但是我也是在我写这篇博客的时候,才找到反对的理由的。在那时,我只是简单的回答老师,我需要更多的时间来处理(自己的事情?)
这节课上最终也没有结论。然而,随后在休息室里面的情况就糟糕了。我们这些不赞成的人互相看着不断摇着头。我们其中一个甚至失望地大喊道:“世风日下啊!(things are changing for the worse around here)”
幸运的是,在这种负面情绪失控之前,我们的老师走进休息室里说道:“忘了我说的吧,就当我从来没有提过那个实践活动。”这是非常明智的举动。在下节课之前,这种负面和怀疑的情绪就没烟消云散了。
这是一个实践和价值以及文化如何深深地纠缠在一起的例子。文化是通过实践来表达它的价值的。如果像Holub和Binstock所说的那样,认为实践和文化之间没有任何关系,则完全是荒谬的。
尽管Binstock坚持认为实践和文化无关,但是如果你所在的团队实践着持续集成,短迭代,结对编程以及测试驱动开发,那么这就说明你的团队具有敏捷宣言所宣扬的价值观;如果他们不具有这些价值观的话,那么他们也不会遵循这些实践。
当然,对于一个团队,只是一味进行实践,而忘记了实践所代表的价值观也是可能的。这是官僚机构和宗教共同的毛病。他们被实践活动如此强烈的界定(defined),以至于实践就变成了形式,最原始的价值观被遗忘了,而形式就变成了价值观。
对于形式主义的担心是很正常的。在1999年,当Kent Beck和我决定把我们的精力都放到提升极限编程当中去时,我们就担心我们可能正开始的是一种宗教而不是一种运动,所以一开始我们就发誓要打击形式主义。这种担心和誓言在2001年诞生敏捷宣言的大会上又重新被表达出来。
但是自从那以后,形式主义并没有出现。我并没有看到人们形式地进行结对编程、测试驱动开发,小型发布,现场客户,等等。我所看到的是,人们完全是处于热情才采取这些实践。但是热情不应该被错当成宗教或是形式主义。热情代表的是改变现状;而形式主义则完全相反。
也许Holub和Binstock正式由于担心形式主义才激发他们提议将实践和文化分离开来。也许他们也是担心强调实践纠结一定会贬低价值观。但这完全是不正确的观点,例如当前对于TDD的热情就是对价值观非常深刻的表述。
无论如何,如果你像Holub和Binstock所说的那样,将实践和文化分离开来,那么你就是在腐败文化。你不能只有文化而没有实践。
“如果读者知道大型的,无误的Internet是先于敏捷产生的,甚至先于TDD产生,那一定很痛苦吧。疯了,对吧?”
他又说道:
“特别是当我和测试驱动开发(TDD)的信徒聊天时,他们似乎完全不能理解真正优秀可靠的代码是在TDD出现前就已经开发出来了。我感觉他们认为,那些将人类送上月球,电话交换器,机票预定系统以及电网的代码完全是由于幸运和独特的天赋才产生的,而不是由于仔细的训练和开发上的严格。”
这种相当卑鄙的抱怨真是令人失望。像TDD这样的实践活动,或者参与实践的热情,难道它们是如此具有威胁性而应该被报以嘲弄吗?
当然,在TDD产生之前,优秀的软件就已经写出来了。即使在今天,不使用TDD,优秀软件也一直在不断被写出来。可那又怎样呢?这些事实并没有说明TDD无效。毕竟,许多医生在使用无菌手术前也救了很多人,许多会计在使用复式记账之前也成功地在记账。那又怎样呢?过去的成功并不意味着今天新的实践是无效的,过去的成功也不意味着对于新的实践的热情是不恰当的。
这种情况也肯定出现在无菌手术用于医疗的过程中。在接受者人数超过非接受者人数之前的60年,接受者一直被医疗机构所嘲笑和解雇。那时候的医生不喜欢去思考,他们不洗干净手会引起疾病,他们说他们关心的是洗手需要的时间问题。那个时候的医生和现在的一样,也是大忙人。他们认为洗手这种形式减少救治病人的数量。
复式记账甚至有更波折的历史:接受,遗忘,又被接受,颁布法令,忽略,这样大约有三个世纪。让复式记账法成为主流的战斗既漫长又艰难。
目前,这些实践已经扎根于医疗和会计的文化之中。现在很难想象,一个医生不消毒就动手术,一个会计还在使用单式记账法在给企业做帐。
由于那些不希望改变过时实践的人数在下降,而那些对新实践充满热情的人数在增长,新的实践最终战胜了那些过时的实践。这些新实践代表的是文化的价值观上的转移(shift)。那些新实践目前是不能和转移的文化分离开的。
我在敏捷运动中看到的最大问题就是实践的缺失。这么多年以来,实践一直被低估了,甚至是被剥离掉了。实践的缺失已经稀释和改变了敏捷文化,我都不再认识它了。敏捷文化已经从优秀转移成了平庸,脱离了艰难的现实,走向了自我感觉良好的陈词滥调。
这种腐化开始于一个概念:任何人只要坐下来上两天课,然后弄一张纸,就可能变成一个master。很快,敏捷就被稀释了,到最后就把技术实践都扔掉了。这种情况促使Martin Fowler发布了他经典和决定性的博客:疲软的Scrum(Flaccid Scrum),他强调,项目管理的胜过技艺(craftsmanship),软技能(态度)胜过硬技能(实践)。
2001年在Snowbird上举行的会议上,我们写下了敏捷宣言,Kent Beck说了其中一个目标是“治愈开发和商业之间的分歧”。不幸的是,贬低实践在敏捷运动中的重要性已经加深了这种分歧。当项目管理纷纷涌进敏捷运动的时候,开发者却纷纷逃出来了。原始的运动已经分裂成两个运动。软件技艺运动保存了实践和文化的耦合;而敏捷运动已经将二者分开了。
所以,对于我来说,敏捷的真正腐化正是Holub的言论:
“...敏捷是一种文化,而不是一组实践...”
不。敏捷是通过一组实践来表达的文化。
这些实践是一成不变的吗?XP原始的13项实践就是圣经吗?如果你不实践TDD,你就是一个叛逃者吗?当然不是的。但是如果你不使用这些特殊的实践,你最好能使用其他一些和这些实践一样好,或者是更好的实践。这些你使用的实践将定义你的文化,并成为你价值观的一种表达。
如果你的价值观是敏捷宣言中所说的那些,那么你的实践也应该看起来像那些原始的13项实践;因为从很大程度上来说,正式这13项实践驱使我们写下了那些敏捷宣言。
如果你获得了更好的实践,我和乐意看到它们。如果我相信它们是比较好的,我将会马上采用它们。因为我绝不会成为一个阻止洗手的医生。