“做一个APP需要多长时间?”这个问题估计比测一个人还能活几天还难,一个条件如此不充分的问题,如何回答呢?
总体来说,需求越是明确,团队越是成熟,估算出来的时间就越是准确。而软件开发这个事情,不管发展多少年,不管提出了怎样的方法论,都没办法像传统制造业那样把“工时”算得那么精确,其内部错综复杂的逻辑关系使然,软件工程,绝无可能量产。
用户看到的只是一个APP,如果他用的是iOS系统,也许他根本就不会接触Android,不知道开发者除了iOS版之外,还需要做一个Android版,(有没可能还有Windows版?这样工作量无疑更大)或者,网页版搞定一切?也许你真正动手做过后就不会这么认为,再说微信小店那种模式真能适用于所有场合么?而且,如果不是网络出现异常的话,一般用户也不会注意到服务器的存在,服务器总是那么默默无闻地为用户全天候地工作,它的开发难度恐怕也不亚于APP本身,而负责APP运维的还需一些人力,大了之后甚至需要组建一个专业团队,他们需要一个“后台”,能随时查看和处理数据,如果需要随时随地都能查看和处理数据,恐怕还得给后台专门弄个APP。
这个道理就有点类似:我们看到了战机在天上华丽地完成了歼敌任务,以为只是战机本身很牛,往往忽视了战机相关的那些配套,如果没有娴熟的飞行员、作战指挥中心、地面雷达、预警机、补给、机场或航母、地勤人员等等,那么战机将失去战斗力。APP也一样,它不是一个只要能跑起来就完事的东西,支持它的配套设施和维护工作丝毫不比APP本身简单。
除开这些大的方面,细节上也带有许多的不确定性,所以一支成熟的团队尤为重要,一个经验丰富的开发者会知道,至少大致知道这个开发过程会遇到哪些问题,哪些问题比较简单,哪些问题则可能需要耗费大量的时间,这得依赖经验。我有一句话常常挂在嘴边,那就是:“没做过的东西别轻易说简单。”“想当然简单”的态度对项目没有任何好处,如果自己不确定,那么去咨询一个有这方面经验的人,就算得不到具体的答案也有大致的方向,沿着这些方向研究一下,就能知道会面临的那些问题,当然往往还不是全部。
关于“低估了难度”这事情,我过去的公司有个经典故事,当时有个小项目,就是准备把一套已经在仪器上使用的只支持英语的程序增加多语言支持,程序并不大,涉及内容也不算太多,工程师一开始认为这只是个简单的翻译工作,顶多两个星期就能完成,但一做下去就发现不简单,首先翻译得找专业人士来做,自己做不好,我们没人精通欧洲各国语言,接下来还有单位换算,有些国家用公制,有些用英制,这个得考虑,包括日期显示格式也得考虑,一下子不知道多了多少工作,这些都差不多了之后又发现了德语单词过长,我们的仪器的屏幕显示不下,超出范围,于是再调字体,做精简,前前后后开会讨论了N次,最后想Release的时候发现这么一改,程序的Size变大了很多,有些仪器的存储器装不下,这下大家可都傻了,优化呗,精简呗,程序开始有些凌乱不堪了,最后勉强通过质控部检验,总算发布了,发觉足足搞了半年。不过如今想想之所以耗费了这么多时间,一个很重要的原因是经验不足,对多语言,国际化这块不熟,走了不少弯路,所以我前面也提到,成熟的团队尤为重要。
我们在估算项目时间的时候,往往只算了“写代码的时间”,而把那些和老板或客户扯皮,做需求分析,设计,测试,和修复bug的时间不考虑进去,而这些时间加起来通常比写代码的时间多出不少,我个人是不轻易为了讨好老板而把完成时间说得很短的,为啥?——根本做不到嘛,干嘛要撒谎?如果一个需要一星期完成的新功能开发,我通常得把这个时间double,这已经算比较“不保守”的了。
即便只算写代码的时间,也往往会被低估,老板或客户对你开发的东西很可能不满意,或许你误解了他的功能需求,或者界面有点卡顿,或者这个图标颜色不好看,你是开发者,不是美工,虽然凑合可以当一下美工,但毕竟不专业,更重要的是做做UI设计,做做图这种事情,也得耗费不少时间,当你为“一个像素”焦头烂额的时候,是不是很渴望团队中有一名设计师?这时候得提醒下老板:你必须要在时间和功能之间,做点取舍。老板当然很不高兴,但也不得不在功能上做出了一些妥协。虽然这样做能让难产的项目早点上线,但却为来日项目的失败,给老板添加了一个很好的借口:我们的工程师太差了,没按我说的去做。
老板或客户除了会抱怨你做出来的东西不够好看之外,还会再提很多东西:这个界面能不能改成多选,能否增加通知功能,已读未读状态要有,界面能不能再流畅点,昨晚程序咋“闪退”了一次……需求只管提功能,但没说具体这个UI要多美观,也没说程序稳定性要好,更没涉及到要达到多大的吞吐量,当然,可能更重要的——安全性也没提,你心一惊:是啊,如果有黑客,不,只要稍微懂一点技术的恶意用户想刷爆我们的服务器,那简直太简单了,而这些防护措施我都没做!所幸的是项目名气太小,暂时无需考虑这个。(貌似大多数APP都活不到需要考虑这个的时候)
所有这些,你说功能也好,细节也好,稳健性也好,都不是能自动从土里长出来的东西,都得需要花时间去想,去做,有些甚至还是个“系统工程”,如果头痛医头脚痛医脚去做的话,系统里到处充满“飞线”,无疑会给将来的维护留下了许多隐患。攻城狮的你,都考虑了吗?更别说老板为了节省成本而给你购置的低性能电脑让你整天抓狂这些“无关紧要”的事。
|
|