关于这个话题,我们先来探讨一下,为什么项目会延期。
只要你参加软件开发项目,无论是作为新人,还是作为带新人的老手,或多或少都会经历过项目延期。即使你工作很多年,成了行家里手,做得都是详细的项目计划和估算,但在项目进展的过程中,总会出现一些偏差和意外。偶尔有幸运的时刻会提前结束,延期完成,甚至是项目烂尾也是很有可能的。
为什么项目这么容易延期呢?
这是因为人们在历史长河中累积的经验失效了。
到目前为止,计算机科学只出现了短短几十年的时间,人类很难按照以前的经验对项目进行判断和预测。看到一个人在操场上慢跑,你很容易能判断出来,这事儿不难,因为你也可以去操场慢跑。看到一位百米选手跑进了 10 秒,你就会知道,这事你拼了老命也做不到,难易立判。
但是一到了编程的范畴,你甚至很难从敲击键盘的速度上分辨出哪个是优秀的程序员,哪个是打字速记员。是的,搞速记的人,敲键盘的技巧可能会更加纯熟一些。
同样,我们可以从物体形态的大小、结构的复杂程度上作出判断。
我们一定知道,修建一座小桥的难度和工期会远远小于一幢摩天大厦。因为物理上形态的区别和感官上的认知,总能让我们的大脑去做出正确的判断。我们很少失误,几千年来,我们的基因就是这么告诉我们的。
但是,软件没有物理的概念,它既没有体积,也没有面积,更没有速度。你写了两万行代码,你的硬盘也不会重一点,10M 的代码,也不一定会比 1M 的代码好用。
技术项目更是很难简单从表面获知其复杂程度。打开 Google 的官方网站,我们看到的是个搜索框,这个简洁的搜索界面,就是整个 Google 帝国的入口,是浮出海面的冰山一角,隐藏在下面的则是数以万计的工程师和庞大的服务器集群。
即使你是经验丰富的工程师,有时候也很难从一纸需求上确定较为准确的工期。
那一旦项目延期了,该怎么办呢?