英文原文:Why Software Development Estimations Are Regularly Off
有些人认为,开展一个大型的软件项目就像是在建造一座桥。首先我们需要回顾以往的项目,然后利用这些数据来估算出我们完成这个项目所需要的时间和资金等。虽然这个观点在几十年前就已经被发现不甚正确,但是在 90 年代末,我还在卡内基梅隆大学读软件工程硕士的时候,一度被奉为金科玉律。
事实上,大多数值得我们去做的工程都不应该是以前项目的重复。不要以为当需要建造一座桥时,你随便”gem install bridge”或扩展 bridge4j 就可以了。一个需要开发的软件项目更像是这样的:
——发明家。打个比方,你已经发明了能利用太阳能供电的微波炉、以死虫子为能量的发电机、激光杀蚊器等等,很厉害。而在这时,有人要求说:
“大发明家,我需要一种能抓老鼠(而不是别的动物)的无人机,并且可以把老鼠扔到我前女友的头上去,她最讨厌这个了。给我一个预算和完成时间吧。”
很明显,你不知道要从何入手,对此一头雾水。虽然涉及的技术有些并非是新出来的,但是因为不曾涉猎过这方面的内容,所以首先得好好研究一下,然后你发现无人机好搞定的,定位技术也可以借鉴,但是要如何有效的识别老鼠呢?发明识别老鼠的技术又得要多少资金投入呢?是不是买一个无人机然后自己组装下就可以够了呢?客户又能不能偷偷把定位装置放到他前女友的随身物品例如钱包上呢?
软件不是像造桥那样是重复性的,它是不断创新不断更新迭代的。在 Twitter 上超火的关于这方面的一个帖子其实完全牛头不对马嘴。拿从旧金山徒步旅行到洛杉矶做类比其实并不合适。长途跋涉这事我们的祖先几千年前就知道怎么回事了,并且所有需要的知识我们现在通过谷歌也通通可以搜索到。爱好徒步旅行者甚至只要走上一回,在大家询问有关情况时,就能侃侃而谈,做出一个像模像样的估计。而在数次城际旅行之后,他就会有足够的知识得到一个精确的判断。但是如果我问的是从旧金山开车到洛杉矶要多少时间,由于交通堵塞以及未曾有过开车经验,误差就大了,估算也会不甚准确。
换一个角度,要是我们让经验丰富的软件工程师开发一个能控制汽车自己从旧金山开到洛杉矶的无人系统,那情况与上面所说的就完全不同了。两者所要解决的问题毫无类比性。软件开发的内涵应该是创造,这也是为什么所有用现实中的事物做类比而得出的预估常常不靠谱的原因。
译文链接:http://news.html5tricks.com/why-develop-not-good-estimate.html
翻译作者:IT 新闻 – 蒋丽丽