“做一個APP需要多長時間?”這個問題估計比測一個人還能活幾天還難,一個條件如此不充分的問題,如何回答呢?
總體來說,需求越是明確,團隊越是成熟,估算出來的時間就越是準確。而軟件開發這個事情,不管發展多少年,不管提出了怎樣的方法論,都沒辦法像傳統制造業那樣把“工時”算得那么精確,其內部錯綜復雜的邏輯關系使然,軟件工程,絕無可能量產。
用戶看到的只是一個APP,如果他用的是iOS系統,也許他根本就不會接觸Android,不知道開發者除了iOS版之外,還需要做一個Android版,(有沒可能還有Windows版?這樣工作量無疑更大)或者,網頁版搞定一切?也許你真正動手做過后就不會這么認為,再說微信小店那種模式真能適用于所有場合么?而且,如果不是網絡出現異常的話,一般用戶也不會注意到服務器的存在,服務器總是那么默默無聞地為用戶全天候地工作,它的開發難度恐怕也不亞于APP本身,而負責APP運維的還需一些人力,大了之后甚至需要組建一個專業團隊,他們需要一個“后臺”,能隨時查看和處理數據,如果需要隨時隨地都能查看和處理數據,恐怕還得給后臺專門弄個APP。
這個道理就有點類似:我們看到了戰機在天上華麗地完成了殲敵任務,以為只是戰機本身很牛,往往忽視了戰機相關的那些配套,如果沒有嫻熟的飛行員、作戰指揮中心、地面雷達、預警機、補給、機場或航母、地勤人員等等,那么戰機將失去戰斗力。APP也一樣,它不是一個只要能跑起來就完事的東西,支持它的配套設施和維護工作絲毫不比APP本身簡單。
除開這些大的方面,細節上也帶有許多的不確定性,所以一支成熟的團隊尤為重要,一個經驗豐富的開發者會知道,至少大致知道這個開發過程會遇到哪些問題,哪些問題比較簡單,哪些問題則可能需要耗費大量的時間,這得依賴經驗。我有一句話常常掛在嘴邊,那就是:“沒做過的東西別輕易說簡單。”“想當然簡單”的態度對項目沒有任何好處,如果自己不確定,那么去咨詢一個有這方面經驗的人,就算得不到具體的答案也有大致的方向,沿著這些方向研究一下,就能知道會面臨的那些問題,當然往往還不是全部。
關于“低估了難度”這事情,我過去的公司有個經典故事,當時有個小項目,就是準備把一套已經在儀器上使用的只支持英語的程序增加多語言支持,程序并不大,涉及內容也不算太多,工程師一開始認為這只是個簡單的翻譯工作,頂多兩個星期就能完成,但一做下去就發現不簡單,首先翻譯得找專業人士來做,自己做不好,我們沒人精通歐洲各國語言,接下來還有單位換算,有些國家用公制,有些用英制,這個得考慮,包括日期顯示格式也得考慮,一下子不知道多了多少工作,這些都差不多了之后又發現了德語單詞過長,我們的儀器的屏幕顯示不下,超出范圍,于是再調字體,做精簡,前前后后開會討論了N次,最后想Release的時候發現這么一改,程序的Size變大了很多,有些儀器的存儲器裝不下,這下大家可都傻了,優化唄,精簡唄,程序開始有些凌亂不堪了,最后勉強通過質控部檢驗,總算發布了,發覺足足搞了半年。不過如今想想之所以耗費了這么多時間,一個很重要的原因是經驗不足,對多語言,國際化這塊不熟,走了不少彎路,所以我前面也提到,成熟的團隊尤為重要。
我們在估算項目時間的時候,往往只算了“寫代碼的時間”,而把那些和老板或客戶扯皮,做需求分析,設計,測試,和修復bug的時間不考慮進去,而這些時間加起來通常比寫代碼的時間多出不少,我個人是不輕易為了討好老板而把完成時間說得很短的,為啥?——根本做不到嘛,干嘛要撒謊?如果一個需要一星期完成的新功能開發,我通常得把這個時間double,這已經算比較“不保守”的了。
即便只算寫代碼的時間,也往往會被低估,老板或客戶對你開發的東西很可能不滿意,或許你誤解了他的功能需求,或者界面有點卡頓,或者這個圖標顏色不好看,你是開發者,不是美工,雖然湊合可以當一下美工,但畢竟不專業,更重要的是做做UI設計,做做圖這種事情,也得耗費不少時間,當你為“一個像素”焦頭爛額的時候,是不是很渴望團隊中有一名設計師?這時候得提醒下老板:你必須要在時間和功能之間,做點取舍。老板當然很不高興,但也不得不在功能上做出了一些妥協。雖然這樣做能讓難產的項目早點上線,但卻為來日項目的失敗,給老板添加了一個很好的借口:我們的工程師太差了,沒按我說的去做。
老板或客戶除了會抱怨你做出來的東西不夠好看之外,還會再提很多東西:這個界面能不能改成多選,能否增加通知功能,已讀未讀狀態要有,界面能不能再流暢點,昨晚程序咋“閃退”了一次……需求只管提功能,但沒說具體這個UI要多美觀,也沒說程序穩定性要好,更沒涉及到要達到多大的吞吐量,當然,可能更重要的——安全性也沒提,你心一驚:是啊,如果有黑客,不,只要稍微懂一點技術的惡意用戶想刷爆我們的服務器,那簡直太簡單了,而這些防護措施我都沒做!所幸的是項目名氣太小,暫時無需考慮這個。(貌似大多數APP都活不到需要考慮這個的時候)
所有這些,你說功能也好,細節也好,穩健性也好,都不是能自動從土里長出來的東西,都得需要花時間去想,去做,有些甚至還是個“系統工程”,如果頭痛醫頭腳痛醫腳去做的話,系統里到處充滿“飛線”,無疑會給將來的維護留下了許多隱患。攻城獅的你,都考慮了嗎?更別說老板為了節省成本而給你購置的低性能電腦讓你整天抓狂這些“無關緊要”的事。
|
|