蘇州APP開發-開發個這樣的APP要多久?
2015/07/31

蘇州APP開發-開發個這樣的APP要多久?

蘇州APP開發-開發個這樣的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,獨自坐在辦公室裏,還是拿著那個水杯,懊惱不已——打住!這樣是不是比較有戲劇性?可雖然一開始我就宣告此故事「如有雷同,純屬巧合」,但也不能胡亂瞎編,真正的結局是:確實風風火火弄了幾個月,後來就突然杳無音訊了,本來想打電話問問王總究竟怎樣,無奈他變成了另一個超級忙人,再無心思跟我聊家常了。嗯,結局還是差不多,我還是那個繼續苦逼地坐在辦公室裏的程式設計師,唉,別想了,開工吧!

來源:蔣國綱的技術部落格