View on GitHub

软件开发与教练

blog

没有那种螺丝刀

在关于敏捷开发的学习讨论中,常常听到一些困惑。比如:敏捷就不进行分析和设计吗?在实际做一件事前先进行设计不是很正常的吗?以及由此衍生的话题:我们做的是小瀑布还是敏捷?小瀑布和敏捷有区别吗?敏捷和瀑布本来就是统一的……,等等。

然而问题的关键不在于是否做分析、设计这些活动。也不在于分析、设计与实现的先后顺序。而是在于认为我们可以规定这些活动的阶段。可以在不涉及被实现系统的具体内容,从方法论和流程的角度,对这些活动进行计划。

让我们来看看常见的“瀑布式”工程的进行情况

理想中

理想中

实际中

实际中

可以看到,很多问题需要在首次得到可运行的软件后才能被定义和解决。很遗憾的是这个时间点往往被安排在计划的后期,甚至可能在项目结束之后。而计划表中号称为“测试”或者“集成”阶段,才是真正根据反馈进行调整,做出设计决策和开发的时候。 换句话说:很多名为“瀑布”的项目,实际上是用手忙脚乱、缺乏准备、背负延期愧疚的“乞丐版敏捷”完成大部分工作的。

然而更不幸的是。

老板眼中

老板眼中 也就是说上一张图中所展示的真实情况不会反映在组织内部的沟通中。决策所基于的是掩盖现实的说辞,和在说辞之上反思得到的所谓“改进”。

螺丝刀

这让我想起一个笑话。

妈妈马上就要生二宝了。即将当哥哥的孩子非常好奇。跟着妈妈问东问西。
“妈妈,小宝宝是怎么生出来的呀?”
妈妈说:“先是头,然后两只手,然后是身子,最后是脚……”
“我知道,我知道!”,孩子抢着说,
“然后爸爸就拿螺丝刀把它们拼起来!”

正如这个笑话所展示的,问题不在于是否生命的孕育都有一个生长的过程,也不在于生长的先后顺序。而是在于,根本没有那种螺丝刀。当下次再有人推销各种“螺丝刀”的时候,想想这个故事。

放弃那个可以拼凑出完美系统的“螺丝刀”幻想。为系统的生长提供条件,主动而频繁地观察、实验、调整,以保证它的健康。这就是敏捷。

顺便说一句:我觉得“没有螺丝刀”比“没有银弹”更有针对性。“没有银弹”揭示了深刻的道理,但很遗憾被人云亦云地滥用了。以至于当你给头疼的人推荐止痛药的时候,他会不假思索地反驳说没有包治百病的“银弹”。止痛药虽然不能治疗所有疾病,但它有确定的药效。而“螺丝刀”最好的情况也不过是摆在新生儿的旁边寄托美好的愿望。更差的情况下,则会为了体现“螺丝刀”的价值危害生命的成长。