我曾读过一本很棒的间谍小说,福赛斯(Frederick Forsyth) 的 《豺狼的日子》(The Day of the Jackal),惊心动魄的情节中最令我印象深刻的,是代号“豺狼”的职业杀手在执行任务前的各种准备工作。其中有一段剧情:在接下任务之后,豺狼为了确定最重要的暗杀时间及地点的选择,他数日泡图书馆,通过《大英百科全书》检索有关戴高乐的参考书目,然后用假身份邮购了所有资料,花了三周的时间,阅读了所有能搜集到的戴高乐的资料,从中分析他的性格,习惯,总统日程等。最终发现戴高乐在每年6月18日——“自由法国运动”纪念日——必定会出席一个无论刮风下雨都要公开露面的仪式,地点就在“六月十八”广场。敲定了时间和地点之后,豺狼又用了三天,实地考察了准备行动的广场,并确定了暗杀时藏身的公寓。
对困难估计的越充足,准备工作就越周全,成功的机率就越高。
一个项目中的困难,是需要所有的项目干系人都意识到,才会有解决方案。之所以这么说,是因为我曾经合作过一个优质客户,甲方对困难的估计非常充分,光立项就花了半年的时间,并制定了400人天的研发周期,而当项目中意外频发,不可避免地还是面临 delay 时,甲方很理解地说对此有充分地心理准备,主动调整deadline,这才保证了项目在和谐的氛围中“如期”上线。
做软件很难,需要每个人都不犯浑才能取得成功。
回到1969年,Multics 项目的失败后,其中一名叫做 Ken Thompson 的工程师总结了 Multics 中的种种经验教训,然后就有了 Unix . 这听上去有些荒谬,大名鼎鼎的 Unix 起源于一个失败的项目。事实确实如此,Unix 最开始叫做 Unics ,起这个名字本身就是针对 Multics 而言的,Multics 希望做成大而全的系统,而 Unics 就只做好一件事。“小即是美”的哲学正是吸取了 Multics 失败的教训。这种影响也一脉相承到和 Unix 几乎同时出现的C语言文化中。
前面提到的 OSAF/Chandler 项目的失败,却由此诞生了一本不可多得的著作《梦断代码》(Dreaming in Code).
有句话怎么说来着:失败是成功的妈妈…… 嗯?
所以,项目为什么会失败。 :)