【導讀】前端時間,一篇“從產品經理的角度算一算,做個app需要多少錢”的文章在網上瘋傳,可見大家對網際網路創業的熱情!這次,從一名技術經理的角度再給大家分析一下,如何使用跨平臺開發技術為你節省上百萬的開發成本。所謂“跨平臺”開發技術,就是使用一種語言和一種開發工具同時支援幾種不同的手機/平板裝置,這樣做不僅僅省錢而且開發效率高,可以讓你更快的推出新版本和新功能!
作為一名軟體工程顧問,我曾參與過很多的專案,主要為軟體團隊進行開發工具和方法論方面的諮詢/培訓/指導,我接觸過不下100個各種型別/大小的開發團隊,有傳統行業,有網際網路,有不差錢的,也有剛起步的創業者;其中也不乏app開發專案。開發團隊遇到的問題最大共性是每個人在一個團隊中的位置很大程度上決定他的判斷,簡而言之:視野問題!而當大家問一名IT人士那個經典的“做個app要多少錢?”的問題時,他也僅僅能根據自己的技術背景和經驗給你一個答案,更加傾向於推薦那些相對穩妥的方案;而不懂技術的人更加無從判斷。我想說的是:雖然網際網路創業是個技術活,但技術選型一定要業務先行,ROI(投入產出比)優先。這就是為什麼你首先應該從成本角度進行分析,做出判斷;而不要受制於技術!
在回答完那個經典的“做個APP多少錢?”的問題後,下面這些問題就會接踵而來:
- 應該開發iPhone版本還是Andrioid版本?
- 可能需要聘用掌握了不同開發語言(iPhone使用Xcode/Object-C,而Android使用Android SDK和Java)和技能的團隊成員,研發成本幾乎翻倍
- 產品的後臺系統使用怎樣的開發環境?
- 如何在新功能上線時保證iPhone/Android的APP與後臺系統的同步?
- 從無到有開發這樣一款APP到底需要多少成本?
- 如何瞭解使用者的使用習慣,並通過資料分析來指導後續版本的開發?
對於當前所流行的“網際網路+”的眾多創業者來說,如何能夠以最快的速度和最小的成本來開發/運營自己的產品是決定是否能夠在早期快速取得客戶,獲取生存空間和贏得未來機會的決定性因素。其實對於任何的軟體開發來說,多快好省永遠是我們的追求,當前的創業大潮使得這一原則更加凸顯,也讓更多的人瞭解到了軟體開發。
DevOps(研發運維一體化)也是最近幾年在軟體行業非常流行的做法,DevOps通過打通開發和運維這兩個原本屬於不同領域的團隊來為我們運營產品提供更快的價值輸出,其實也是多快好省地體現。從使用者的角度,使用手機/平板等移動裝置的使用者已經超過了PC使用者,而在移動裝置領域又存在著iPhone/Android/Windows三分天下的狀況,這使得上面所提到的快速推出產品變得更加困難,同時由於不同的裝置所使用的作業系統,開發環境和執行環境都完全不一致,讓我們的研發管理變得更加的複雜,實現DevOps也是難上加難。
本篇部落格將使用MyShuttle.biz這個應用來為你展示一個“網際網路+”時代的創業團隊如何使用跨平臺開發技術來多快好省地解決以上問題。
在2014年的 Visual Studio and Azure Connect() 線上釋出會上,微軟使用了一套名為 MyShuttle.biz的樣例程式來展示Visual Studio 2015和Microsoft Azure所提供的DevOps能力,這套樣例的原始碼也被分享出來。其中使用了眾多的技術來全面展示微軟開發工具和雲端計算平臺所提供的跨平臺開發和DevOps能力。
全套樣例程式碼可以通過以下地址下載:
https://code.msdn.microsoft.com/windowsapps/MyShuttle-demo-applications-1a4b68fe#content
跨平臺移動開發白皮書 – MyShuttle.biz案例分析
這本白皮書將對當前2大主流跨平臺開發技術進行詳細的介紹,我將藉助MyShuttle.biz這個案例,為你展示如何使用跨平臺開發技術結合雲端計算完成一個典型“網際網路+”產品的技術佈局,團隊組織,開發環境配置和開發流程管理,最終實現基於雲的開發運維一體化(DevOps)環境。由於內容較多,我將按照以下順序逐步釋出;本系列的前一部分不會涉及過多的技術內容,適合創業者,技術管理者和普通大眾閱讀;後半部分會涉及較多深入的技術細節,適合對DevOps和跨平臺移動開發技術本身感興趣的朋友閱讀。
- 案例背景:MyShuttle.biz的業務模型,應用架構
- 跨平臺開發技術如何做到多快好省的?
- 跨平臺開發技術的成熟度和不同方案優劣比較
- 跨平臺開發環境配置和能力分析
- Apache Cordvoa HTML/JavaScript Hybrid APP 跨平臺技術
- Xamarin 原生APP跨平臺技術
- ASP.NET 5 跨平臺開發技術
- 基於雲端的DevOps環境配置和能力分析
案例背景
MyShuttle.biz是一套類似“滴滴出行”的網際網路租車應用,可以為企業使用者提供叫車,計費和後臺管理能力,解決企業使用者日常用車需求。雖然“滴滴出行”解決了普通民眾的出行需求,但是企業用車市場仍然是空白。作為在公司中工作的人來說,有客戶到訪,公司團建,出遊,甚至日常的跑業務,稅務等活動都需要用車,而企業養車則是非常大的開銷;MyShuttle.bizs就是在這樣的大背景下誕生的,希望能夠將租車公司的空閒車輛與企業使用者相銜接,實現社會交通資源的優化和企業用車成本的降低。
大家可以通過以下視訊來了解這個應用:
應用架構
MyShuttle.biz使用3套相互獨立的系統來實現以上業務目標,後臺系統通過雲端計算提供資料儲存,業務邏輯處理和後臺管理功能,並通過網頁應用/Windows APP的形式提供給租車公司/使用者企業的管理人員使用;使用者APP通過各大應用市場給使用者免費下載和使用,使用者可以使用APP完成叫車,付費和訂單管理功能;司機APP則提供給司機使用,完成叫車資訊的推送,接受訂單,跟蹤里程等操作。
後臺系統除了可以由使用者通過瀏覽器完成各種操作外,還提供了流行的Restful介面供APP和其他第三方系統整合使用。
後臺系統
- 使用SQL Azure 提供安全的高可用資料儲存服務
- 使用ASP.NET 5 WebAPI和Azure Mobile Service 所提供的WebAPI提供資料訪問服務
- 為租車公司提供基於瀏覽器的SPA應用(單頁面應用)來進行車輛,司機和訂單管理服務
- 為用車企業管理人員提供基於Windows APP的桌面應用來管理員工,車輛訂單
使用者APP
- 使用Xamarin跨平臺開發工具提供原生的App體驗,同時支援iPhone/Android/Windows Phone三大移動平臺
司機APP
- 使用Apache Cordova跨平臺開發工具提供基於HTML/Js的Hybrid App體驗,同時支援iPhone/Android/Windows Phone三大移動平臺
“跨平臺”技術如何做到多快好省?
由於使用了跨平臺開發技術,我們不必聘用同時具備Object-C/Java/C#能力的開發人員,只需要熟練使用C#語言和Visual Studio IDE的開發人員即可,我們的團隊組成可以規劃為:
– Team 1: 2名後臺開發人員:
○ 熟練使用C#開發語言,ASP.NET MVC
○ 對Microsoft Azure雲端計算平臺有所瞭解
○ 瞭解Restful介面開發
○ 負責後臺系統中的資料庫,WebAPI開發
– Team 2: 2名HTML/Javascript/Web/APP開發人員:
○ 熟練使用C#/HTML/JavaScript/CSS開發語言,前端框架如Jquery, AngularJS
○ 對Microsoft Azure雲端計算平臺有所瞭解
○ 瞭解Restful介面開發
○ 負責Web SPA App及Apache Cordova Hybrid APP的開發(司機APP),同時支援iPhone/Android/Windows Phone移動平臺
– Team 3: 2名原生APP開發人員
○ 熟練使用C#和Xamarin
○ 瞭解Restful介面開發
○ 負責原生APP開發(使用者APP),同時支援iPhone/Android/Windows Phone移動平臺
– Team 4: 1名設計人員
○ 熟悉移動APP和Web應用使用者體驗設計
○ 可以獨立完成平面原型和元素切圖,熟悉應用開發過程,具備與開發人員合作的經驗
– 1名產品經理
○ 熟悉網際網路產品和移動APP運營
○ 熟悉網際網路產品開發,具備與研發團隊合作經驗
○ 可以獨立完成使用者故事的編寫
○ 熟悉敏捷開發過程,熟練使用backlog來進行產品規劃
○ 良好的溝通能力
– 1名技術經理
○ 熟練使用C#/ASP.NET MVC/HTML/JavaScript/CSS等開發語言
○ 熟悉主流前端開發框架和Restful介面
○ 熟悉Microsoft Azure雲端計算平臺
○ 熟悉網際網路開發,具備管理研發團隊經驗
○ 熟悉敏捷開發過程,數量使用backlog,sprint,burndown,kanban等工具來進行產品開發過程管理
○ 良好的溝通能力
當然,根據應用的複雜度和業務量的不同,我們也可以對以上團隊結構進行簡化或擴充套件;如果我們資源有限,可以按照以下思路簡化團隊
- 將Team 1和Team 2合併,節省2名開發人員;因為大家都使用C#語言,MVC架構和REST介面的實現與前臺開發關係緊密,這樣做不僅僅可以節約成本,還可以提高開發效率,節約團隊間的溝通成本;當前,前提是工作量和進度的要求可以滿足。
- 在Team 1/2合併的基礎上,我們還可以考慮只使用一種跨平臺技術(Apache Cordova或者Xamarin),這個案例中,為了能夠展示不同跨平臺技術的優劣而同時使用了2種技術;而在真實的專案中,我們完全可以只使用一種;這樣,我們還可以考慮砍掉team 3,而由Team 1/2完成所有工作,這也是使用HTML/javascript作為統一的前端語言以及Apache Cordova提供的最大優勢;讓我們可以使用最少的團隊實現最多的移動平臺覆蓋;當然,如果使用者對於介面體驗要求較高,使用Xamarin原生跨平臺方案還是有其優勢的。
隨著業務的推進,我們也許需要擴充套件團隊,使用跨平臺開發技術前提下,無論簡化或者擴充套件團隊,我們的團隊永遠會和業務對齊,不會有多條業務線使用同一個技術團隊的情況出現。在傳統的開發模式下,如果你沒有足夠的資源給每個業務線(司機/租客等)配備獨立的技術團隊,而按照技術平臺(iPhone/Android)來組建團隊架構的話,就會出現不同的業務線需要同一個技術團隊做不同的事情,這時候必然會造成資源衝突,造成內耗。而使用跨平臺開發技術就很好的避免了這個問題,因為我們不必因為技術不同而割裂本應該跟隨業務的團隊結構。大型軟體研發團隊的管理中的首要原則就是團隊應該和業務對齊,而不要受技術選型的影響;這樣做的目的是為了我們可以根據業務線的需求,最小化外界因素對交付的影響,做到按照業務功能持續交付;而多條業務線使用同一個技術團隊,不僅僅開發人員無所適從,也會大幅增加溝通成本,造成質量問題。
最後,對於團隊建設和能力成長,採用跨平臺技術的團隊使用同樣的語言,工具,開發環境;這使得團隊成員的溝通變得容易,大家可以一起交流技術,互相幫助對方完成工作,這樣更加有利於我們建立健康的團隊氛圍,培養大家互相協作的氣氛。
按照以上團隊能力,下表中我們看到研發成本的計算:
(以下開發人員工資的資料採集自CSDN的2013年開發者薪資調查,根據這份調查的資料我大致估算了各個類別程式設計師的薪資中上位水平,同時乘以1.4的係數以考慮社保等因素來計算總體月成本。調查原文:http://www.csdn.net/article/2014-03-26/2818997/1 )
需要特別提一句,這裡的團隊配置中我們對每個技術崗位的職位都配置了2個開發人員,同時不同技術崗位因為所使用的技術非常相似,都具備互換性。崗位的互換性對於我們避免員工生病/請假/離職所帶來的影響非常重要!而且我這裡的平均工資達到了18000元/月,比產品經理的那個計算方式更高!這意味著你可以聘用更高水平的開發人員。
按照以上我們也可以推算出前3年的開發成本:
如果按照以上計算,單單使用跨平臺移動開發技術,就可以在第一年為你節省將超過60萬元的研發成本,隨著團隊的擴大(因為APP團隊佔研發成本的大部分),節省的比例和金額會變得更加驚人!請大家注意,在“產品經理”的計算中,他所使用的“第一版”成本是按照6個月計算的,大致100萬的研發成本,和我這裡的“傳統”計算方式基本一致,而實用“跨平臺”技術的“第一版”成本比“產品經理”的計算方式低20萬元!
在現實中,我遇到的朋友很多都問我怎樣多快好省地開發一款app,我常常告訴他們應該用跨平臺技術;但最後的結果他們還是會選擇傳統的各平臺獨立開發的方式,希望以上的分析能夠幫助這些朋友可以對“跨平臺”技術的成本優勢有所瞭解。當然,你心裡關於這些技術的其他疑問,比如他們和傳統原生app有哪些不同,各種不同的跨平臺技術間有哪些優劣,在後續的文章中我都會一一解答……
更多內容,請關注公眾微訊號 DevOps