正所谓天有不测风云,既然是预估,就会有不准确,正好比天气预报,今天预报的晴天也可能突然转雨,明天预报的大雨也可能变为多云,更何况软件开发过程是一个漫长、繁杂的过程,其包括需求捕捉、需求分析、设计、实现和测试等步骤,人们不可能把每一个步骤都预测得毫无疏漏,因为这个开发的过程是活的,不是死的,需求是会有轻微变化的,而不是永远不变的。这里也正好诠释了一句话“人算不如天算”。
以上仅是客观原因。此外,还有许多主观可能原因。比如:
1、软件开发人员经验不足导致了估算过于乐观,估算不全面,只考虑到编码的时间,忽略了每个程序员的编码效率,还有需求分析、开会讨论、验证、工作中的突发事件等等。就像从旧金山出发,徒步旅行到洛杉矶那个例子一样,只看到地图上的距离,没想到实际路程的艰难。在各个阶段,应该预留一些处理突发事件的机动时间,提高开发过程中的容错率。
2、需求理解有差异,用户表达的和程序员理解的不一样,出现偏差。课上老师展示的秋千漫画图就很好地解释了这一点。而且客户需求不定,增加需求,组织协调不畅。
3、预估开发周期的时候没有考虑到一些特殊情况,比如遇到法定节假日放假等。
4、没有弹性配置开发各个阶段的计划时间。如需求分析必须在两周内完成,时间不够加班完成,但时间充足还有剩余时间,应该提前进入下一阶段,而不是提前完成了任务就可以去干别的事情。应将多余的时间分配给后面的项目。
5、也有可能团队中出现短板或者团队配合度不够。
总之,对于未知的事件,一般人总是习惯于主观臆断,自认为它应该是这样的,把处理事情的过程想的过于理想化,而忽略了现实的不可预测性,这样会可能导致我们的计划和现实出现巨大的偏差。在我看来,人们的推测只能尽可能的向结果靠近,而不能完成趋同。