为什么软件开发的实际工作量通常比估计的高几倍? 我们来看一个故事就明白了:
我们决定沿着旧金山到洛杉矶的海岸线来一次远足旅行, 走到纽波特沙滩去看望朋友们。路线如下图:
旅程一共400英里,按照每天行走10小时,时速4英里估算,10天就可以了!
软件项目的计划一开始很完美。
于是我们告知朋友们下个星期天的晚上备好晚餐。亲爱的朋友们已经迫不及待地想见到我们。
第二天我们早早就爬起来,兴奋地准备开始这趟冒险之旅。
翻开地图,我们才发现不对劲, 海岸线没有那么直!有“数百万”个弯弯曲曲之处。
一天走40英里的话只能跨过半月湾,到不了洛杉矶。
软件一开始就遇到了实际困难,估算不准确。
这趟旅程至少有500英里,而不是一开始估计的400英里。我们想还是现实一点好,于是打电话给朋友们,把晚餐推迟到了周二。朋友们略感失望,但也表示理解。
只好把交付时间推迟!
终于动身。两个小时之后,我们仅仅走到动物园。这到底是怎么回事?
不做不知道,这可不是田园牧歌。沙子,水,台阶,小溪,还有发怒的海狮!我们每小时最多走2英里,仅仅是估计值的一半。
我们要么每天行走20个小时,要么把拜访推迟到另一个星期。
我们决定折中处理,每天走12个小时,同时把拜访推迟到之后的周末。我的朋友们知道后,有点小不爽,但还是同意了。
交付时间再次推迟,客户开始不爽。
12个小时的艰难行进以后,我们准备在莫斯沙滩扎帐篷过夜。但是你不知道,在狂风中安扎帐篷有多难!到了半夜我们才终于搞定。但还是安慰自己,没关系,明天我们会加快步伐。
悲剧的是,我们十点钟才醒,而且浑身痛得要死。今天无论如何都走不到12个小时了,没关系,今天就走10个小时,明天花14个小时补回来。
又走了一段,我发现同伴一瘸一拐的。可怕的水泡出现了。因为我们是那种把困难扼杀在摇篮里的精英团队,所以现在就要治好他的脚!
我慢跑45分钟到了Pescadero,带回一些邦迪来拯救我的队友。回来的时候,太阳已经落山,精疲力竭的我决定结束今天的行军。虽然只前进了6英里,但有了新鲜的补给,我们坚信明天可以赶上落后的进度。
出现了没有预料到的外部和内部困难,但团队还是信心十足
第二天醒来,我们用邦迪包好了脚,继续前进。可是转弯之后,前面是一道深沟,完全没路走。
地图上面根本就没有标识!我们得往内陆走3英里才可以绕过它。我们还在一些用围栏圈起的联邦保护区里迷路了两次,到中午才重新回到了海岸线。花了大半天时间就走了一英里。但我们不想再次推迟约会时间。为了赶上进度,我们走到了半夜才停下来。
遇到了严重的技术障碍,加班!
在大雾中睡了一觉醒来,我的同伴发起了烧,还伴随着剧烈的头痛。
我问他:“还能继续走吗?”
我的同伴不温柔地回应了我:“你以为呢?傻X!我在冻得要死的雾里连续走了三天了!”
好吧,今天看来是失败了,但是没有关系,我们会休息好,明天行走14个小时,会赶上进度的。
程序员疲惫不堪,士气受到严重打击,PM还想通过加班来赶上进度
第二天,我迷迷糊糊地睡醒,打开地图。
我的老天鹅,花了5天时间,却连湾区都没有走出去!太可笑了!还是实际一点,打电话给我已经不爽的朋友们说明情况吧。
我的同伴说:“四天走了40英里,旅途一共600英里,所以需要60天时间,或许会要70天。”
我喷回去:“TMD不可能。虽然我没有这样走过,但我清楚,从旧金山走到洛杉矶不可能要70天!
我接着犟下去,“如果每天走16个小时,我们就可以赶上进度!即使艰难,但这是我们的至暗时刻,绝不放弃!”
同伴终于爆发:“一开始说星期天就会到的仁兄不是我!真的要被你搞死了!”
严峻的形势,巨大的压力, 团队内部出现争斗
我们都沉默了。正好电话打不通。我决定等他明天气消了再打电话给朋友。
#p#分页标题#e#
又是新的一天。可是在10点以前,我们都只能呆在帐篷里躲避外面的暴雨。按摩酸痛的肌肉,避开新长的水泡。没有人提到昨晚的争执,但悲剧的是,我的二百五同伴把水瓶忘在了营地,又得花30分钟回去找。
新的困难,低落的士气,频频犯错的成员
我记得我们已经没有卫生纸了,需要在下一个镇子采购补给。转过一道弯,又是一道湍急河流挡在面前。这时候我觉得我的肚子也开始湍急起来...
最后一根稻草,软件项目彻底崩溃了......
注:红色批注为码农翻身老刘所加,原文地址:https://www.quora.com/Why-are-software-development-task-estimations-regularly-off-by-a-factor-of-2-3
【本文为51CTO专栏作者“刘欣”的原创稿件,转载请通过作者微信公众号coderising获取授权】
戳这里,看该作者更多好文
【编辑推荐】
除了程序猿,开发人员还是设计师、建筑师……
我从资深软件工程师学到的避坑大法
82天突破1000star,项目团队梳理出软件开源必须注意的8个方面
为什么阿里巴巴建议开发者谨慎使用继承?
对开发友好的前端骨架屏自动生成方案