搞个这样的APP要多久?
我有些尴尬地拿着水杯正对面坐着来访的王总他是在别处打拼的人这几年据说收获颇丰见移动互联网如火如荼自然也想着要进来干一场尽管王总从事的行当也算跟IT沾边但毕竟太长时间不接触技术有些东西不太熟总要咨询下我这个在一线开发混了十几年的老程序员十几年的开发有好几种可能性不过这不是重点所以暂时忽略掉这个细节吧。我之所以尴尬是对王总的需求有些不知如何回答仿佛陷入了某种习惯性的沉思中。王总站了起来把手机递到我面前说“你看看就这样一个APP。”他不太熟练地在屏幕上划了几下我并没有很认真地看因为我知道这个问题很难那就是所有的开发者都会被问并且可能是被问得最频的一个问题“开发这么一个APP需要多长时间”我很想说不知道这可能是最直截了当和准确的回答但面对王总这位老朋友我要是这么回答估计有些失礼所以这个时候我除了大致思量了一下他所指的那个APP大致涉及到哪些方面之外还要组织下自己的语言如何用非常得体的话告诉他这个事情我估算不出。“你看就这么简单的一个APP”王总继续在屏幕上拨弄了几下然后带着几分期待的眼神看着我。我谨慎地说“坦白说我说不准我这方面经验也不是很足尽管做过APP开发但又跟这个很不一样得具体分析好所有的逻辑才能估算出时间。”王总对我的说法似乎不以为然他晃了晃手机说“我要求不多其实比这个还简单”他指着屏幕上某些地方继续说“这个这个这个都可以不要只需要这么一个列表里面有详情可以查看修改……”我心里很自然地想到这是很典型的“想当然简单”的态度我想我得让他认识到这个问题的复杂程度我反问道“需要登录吗”王总稍作停顿后说“那当然。”“什么登录用户名密码方式还是手机登录抑或像QQ微博微信这种可以借用的第三方登录”王总这回似乎想了一下“作为移动互联网我想手机登录肯定是要的QQ微博对了微信微信最好也要……哦你前面说用户名密码这个应该也是要的吧。”我很流利地接着问“那总得有注册如果你打算用手机登录那得找个短信平台还有微信登录你得先做好企业身份认证对了有登录有密码那密码找回功能也得有吧。”“这是肯定的。”“同时有多种登录途径你必须要想出一种合理的逻辑来将它们‘整合’最常见的当然是账号绑定例如给你的账号绑定手机号码这样就能用手机号来登录同样一个账号对微信登录也同理但如今移动互联网的用户们都挺厌恶注册流程的所以往往会要求直接手机登录或者直接微信登录自动完成注册过程那考虑这种情况如果用户先用微信登录然后再用手机登录而不是绑定那么就会产生两个不同的账号而且无法将其再‘整合’起来我们得想出一套比较完善的方案……”王总对我所说的似乎有些缺乏耐心“没必要这么复杂吧你看看这个APP这些不都有吗”“有没有我前面所描述的那个问题你尝试过了吗”但王总似乎对问题并不关心他只想知道做这么一个APP需要多长时间当然要多少钱这也是他关心的问题他拿出了信心满满的语气“有问题怕什么困难算什么这些我相信都能解决但时间很要紧得快我们的竞争对手不会等我们就这么一个东西你想想看要多久”看他的架势像十足那种混得风生水起的成功人士而我这种身份低微的程序员在他面前确实是有口难言我本来还想继续告诉他细节的重要性却被他打断“不不需要有多精确你只需要估算一个范围两个星期或是两个月”我觉得我没必要再隐瞒什么了“我真的不知道也许一支优秀的团队两个星期就能做好不过我自己可不相信有这么牛逼的团队但我很明显不是那个能创造这种奇迹的人。”我心想其实就算说出了“两个星期到两年”这么一个开玩笑式的范围也可能是错的。王总似乎对我这样的回答很失望。但他是个执行力很强的人想做一件事就一定会行动行动一定快一定要有结果这种雷厉风行的行事风格确实我挺欣赏不过他的这个项目我可真帮不上忙但我还是出于礼貌说道“技术方面有什么问题还是可以来问我的。” 不怎么华丽的分隔线 “做一个APP需要多长时间”这个问题估计比测一个人还能活几天还难一个条件如此不充分的问题如何回答呢总体来说需求越是明确团队越是成熟估算出来的时间就越是准确。而软件开发这个事情不管发展多少年不管提出了怎样的方法论都没办法像传统制造业那样把“工时”算得那么精确其内部错综复杂的逻辑关系使然软件工程绝无可能量产。用户看到的只是一个APP如果他用的是iOS系统也许他根本就不会接触Android不知道开发者除了iOS版之外还需要做一个Android版有没可能还有Windows版这样工作量无疑更大或者网页版搞定一切也许你真正动手做过后就不会这么认为再说微信小店那种模式真能适用于所有场合么而且如果不是网络出现异常的话一般用户也不会注意到服务器的存在服务器总是那么默默无闻地为用户全天候地工作它的开发难度恐怕也不亚于APP本身而负责APP运维的还需一些人力大了之后甚至需要组建一个专业团队他们需要一个“后台”能随时查看和处理数据如果需要随时随地都能查看和处理数据恐怕还得给后台专门弄个APP。这个道理就有点类似我们看到了战机在天上华丽地完成了歼敌任务以为只是战机本身很牛往往忽视了战机相关的那些配套如果没有娴熟的飞行员、作战指挥中心、地面雷达、预警机、补给、机场或航母、地勤人员等等那么战机将失去战斗力。APP也一样它不是一个只要能跑起来就完事的东西支持它的配套设施和维护工作丝毫不比APP本身简单。除开这些大的方面细节上也带有许多的不确定性所以一支成熟的团队尤为重要一个经验丰富的开发者会知道至少大致知道这个开发过程会遇到哪些问题哪些问题比较简单哪些问题则可能需要耗费大量的时间这得依赖经验。我有一句话常常挂在嘴边那就是“没做过的东西别轻易说简单。”“想当然简单”的态度对项目没有任何好处如果自己不确定那么去咨询一个有这方面经验的人就算得不到具体的答案也有大致的方向沿着这些方向研究一下就能知道会面临的那些问题当然往往还不是全部。关于“低估了难度”这事情我过去的公司有个经典故事当时有个小项目就是准备把一套已经在仪器上使用的只支持英语的程序增加多语言支持程序并不大涉及内容也不算太多工程师一开始认为这只是个简单的翻译工作顶多两个星期就能完成但一做下去就发现不简单首先翻译得找专业人士来做自己做不好我们没人精通欧洲各国语言接下来还有单位换算有些国家用公制有些用英制这个得考虑包括日期显示格式也得考虑一下子不知道多了多少工作这些都差不多了之后又发现了德语单词过长我们的仪器的屏幕显示不下超出范围于是再调字体做精简前前后后开会讨论了N次最后想Release的时候发现这么一改程序的Size变大了很多有些仪器的存储器装不下这下大家可都傻了优化呗精简呗程序开始有些凌乱不堪了最后勉强通过质控部检验总算发布了发觉足足搞了半年。不过如今想想之所以耗费了这么多时间一个很重要的原因是经验不足对多语言国际化这块不熟走了不少弯路所以我前面也提到成熟的团队尤为重要。我们在估算项目时间的时候往往只算了“写代码的时间”而把那些和老板或客户扯皮做需求分析设计测试和修复bug的时间不考虑进去而这些时间加起来通常比写代码的时间多出不少我个人是不轻易为了讨好老板而把完成时间说得很短的为啥——根本做不到嘛干嘛要撒谎如果一个需要一星期完成的新功能开发我通常得把这个时间double这已经算比较“不保守”的了。即便只算写代码的时间也往往会被低估老板或客户对你开发的东西很可能不满意或许你误解了他的功能需求或者界面有点卡顿或者这个图标颜色不好看你是开发者不是美工虽然凑合可以当一下美工但毕竟不专业更重要的是做做UI设计做做图这种事情也得耗费不少时间当你为“一个像素”焦头烂额的时候是不是很渴望团队中有一名设计师这时候得提醒下老板你必须要在时间和功能之间做点取舍。老板当然很不高兴但也不得不在功能上做出了一些妥协。虽然这样做能让难产的项目早点上线但却为来日项目的失败给老板添加了一个很好的借口我们的工程师太差了没按我说的去做。老板或客户除了会抱怨你做出来的东西不够好看之外还会再提很多东西这个界面能不能改成多选能否增加通知功能已读未读状态要有界面能不能再流畅点昨晚程序咋“闪退”了一次……需求只管提功能但没说具体这个UI要多美观也没说程序稳定性要好更没涉及到要达到多大的吞吐量当然可能更重要的——安全性也没提你心一惊是啊如果有黑客不只要稍微懂一点技术的恶意用户想刷爆我们的服务器那简直太简单了而这些防护措施我都没做所幸的是项目名气太小暂时无需考虑这个。貌似大多数APP都活不到需要考虑这个的时候所有这些你说功能也好细节也好稳健性也好都不是能自动从土里长出来的东西都得需要花时间去想去做有些甚至还是个“系统工程”如果头痛医头脚痛医脚去做的话系统里到处充满“飞线”无疑会给将来的维护留下了许多隐患。攻城狮的你都考虑了吗更别说老板为了节省成本而给你购置的低性能电脑让你整天抓狂这些“无关紧要”的事。 不怎么华丽的分隔线 话说王总告别我之后就以迅雷不及掩耳之势注册了公司注册了域名搞到了办公室还一下子叫来了一帮子人风风火火地搞了起来这种发展势头这种干劲我只有自叹不如。心底里真有些后悔怎么没跟他去干事业不过这只是感性的一瞬间理性又在接下来的几百毫秒里将我拉了回来还是别去好跟他沟通不来的。王总的项目后来以一飞冲天之势迅猛发展而他如今已经是一家估值几亿的公司的CEO我嘛越来越觉得自己是个Loser独自坐在办公室里还是拿着那个水杯懊恼不已——打住这样是不是比较有戏剧性可虽然一开始我就声明此故事“如有雷同纯属巧合”但也不能胡乱瞎编真正的结局是确实风风火火弄了几个月后来就突然杳无音讯了本来想打电话问问王总究竟怎样无奈他变成了另一个超级忙人再无心思跟我聊家常了。嗯结局还是差不多我还是那个继续苦逼地坐在办公室里的程序员唉别想了开工吧