LinkedIn利潤井噴背後的軟體開發模式革命

pythontab發表於2013-04-17

LinkedIn現在已經成為了華爾街的寵兒。伴隨著不斷上揚的公司收入和利潤,它的股價相比2年之前已經上漲了兩倍,並連續7個季度在營收上超過了銀行家的預期。不過,LinkedIn的成功絕不僅僅是數字上的戲法:LinkedIn的產品迭代週期大大縮短了。其革命性的軟體開發方式成為了公司不可或缺的一大成功要素。

Kevin Scott為LinkedIn所帶來的變革很大程度上幫助LinkedIn實現了今日的成就。他於2011年2月加入LinkedIn,目前是是分管工程的高階副總裁,而在這之前他已經在谷歌工作多年。正是他與他的開發團隊徹底顛覆了這家網際網路企業開發與部署軟體更新的方式。以往需要整整一個月來部署新功能的系統,現在已經能夠實現每天多次的更新推送。

Kevin Scott

這種軟體構建上的革命幫助LinkedIn釋出了一系列智慧化的功能(比如“您應考慮僱傭的人”建議框),幫助企業招聘專員在LinkedIn上更好地完成招聘任務。在近幾年,LinkedIn其他的產品創新還有很多,如:改版公司主頁,新版通知系統,重新設計的網站主頁,新聞頁面的評論功能和Like功能,iPad端與Windows Phone端的應用,改版的個人資料頁面,求職app,部落格系統等。就在這2周,LinkedIn參考Facebook的實踐釋出了一個新功能,讓使用者可以與好友的狀態更新建立聯絡。

Scott談到:“假如我們沒有花時間革新我們構建軟體的方式的話,像‘技能認可’系統,'業界領軍者'系統,改版個人資料頁面,移動端應用,升級版招聘者工具等在內的無數意義深遠的新功能幾乎是不可能成功構建出來的。“

LinkedIn使用了一種名為“持續部署”的軟體開發模式。透過持續部署的機制,開發者可以透過零散的程式碼塊形式來組織並編寫程式碼,然後迅速將程式碼塊部署到軟體的主開發線上面去。軟體的主開發線(或被稱為“支幹線”)在所有開發者之間共享,並透過程式碼版本管理系統依據預先設定好的標準進行程式碼維護。新新增的程式碼塊在完成部署前必須透過一系列精心設計的自動化測試,以確保程式碼塊中沒有bug存在。程式碼塊透過這些測試後,就會合併入主開發線,並在系統中進行記錄,以通知管理人員新功能已經作好上線準備了。

LinkedIn以往的軟體開發模式相對來說就傳統得多了。其核心思想是在需要進行軟體更新時,從程式的主開發線上擷取一段分支程式,並在幾天乃至數週的時間內對這段分支程式進行開發。開發人員往往不得不在完成大段新功能程式碼的開發工作後,乾坐著等待這些程式碼合併進入主開發線。而即使在合併完成後,這些新功能依然需要再次進行測試,以確保新引入的程式碼不會與主開發線上同時引入的其他程式碼產生衝突。在這種“基於功能劃分軟體分支”的體系中,bug並不少見,甚至還可能構建出完全無法正常執行的系統。這些問題主要歸因於由各自獨立的多個開發團隊開發的程式碼往往會在同一時間合併進入系統的主開發線,從而導致許多難以預測的後果。而為了儘可能避免這種情況,管理人員傾向於儘可能控制每個月新功能迭代更新的數量與範圍,從而在整體上使公司軟體的開發週期變得更長。

為了實現從傳統的開發模式到“持續部署”開發模式的轉變,LinkedIn不得不在2個月的時間內中斷所有的新開發工作,而將所有的開發人員安排到舊程式碼遷移和自動化測試工具構建的工作上來——只有這樣才能保證新開發模式的正常運作。

“這種模式的轉變其實蘊藏著巨大的風險。”Scott表示,“這意味著我要告訴我的工程團隊,我們即將要徹底改變我們開發軟體的方式。在這2個月的轉變過程中,我們需要齊心協力跨越象徵著我們傳統軟體開發模式的大橋,並在跨越成功之後把這座大橋徹底焚燬。”

LinkedIn並不是唯一使用持續部署開發模式的公司。Scott在之前的系統開發中也曾經使用過這類開發模式,而其他的網際網路企業,如Etsy和Facebook,也開始逐漸採納這種開發模式。然後LinkedIn這個例子的代表性在於,這種革命性的開發模式直接地幫助了LinkedIn實現了公司業績上的提升,應證了持續部署模式的所能為科技企業帶來的收益,從而間接地推動了科技行業軟體交付效率的提升。

而對於Scott來說,持續部署模式的意義並不僅僅在於那些規則與方法,更在於這種模式的的確確解決了LinkedIn原來所面臨的問題。

Scott認為:“我們必須改變現狀。以往,開發者之間的開發工作是相對獨立的。在開發完成之後,他們需要在辦公室裡大喊一聲:‘請把我開發的功能分支程式碼合併到整個分支中,然後執行測試,告訴我測試結果,再在合適的釋出視窗把這些程式碼釋出到網站上去!’ 而我們所希望的場景是,開發者交付程式碼時,這些程式碼就已經是合乎規格並可釋出的了。主開發線上的所有程式碼應時刻處於可釋出的狀態。假如這種情況被打破,那麼這就是一個嚴重的問題,所有人應該停止手上的新功能的開發工作,投入到修復主開發線程式碼的工作中來。”

誠如本文中之前所提到的,這種革命性開發模式的實踐從目前來看是相當成功的。Scott在上次採訪中也提到這種開發模式,並闡述了這種模式對LinkedIn求職者產品專案的所帶來的惠意。而自那時起,LinkedIn在軟體開發方面日益高效,而它的股價也又上漲了61個百分點。


相關文章