敏捷開發——互聯網時代的軟體開發方式

引言--從『小目標』說起

『先定一個能達到的小目標,比方說我先掙它一個億』--這句被刷屏朋友圈的神句雖然被無數網友調侃甚至吐槽,但如果只看前半句,真的是沒毛病。不管多大的目標都是由一個個小目標組成的,而只有每個小目標都靠譜了,最後的那個大目標才是真的靠譜~

有人要問,這和敏捷有毛關係?

答:關係大了

因為敏捷開發的核心思想恰恰就是小步快跑、不斷迭代,在一次次的迭代升級中最終完成那個『大目標』!

正因為敏捷開發的這種不斷迭代升級的開發模式,使得其更加適合當今瞬息萬變的互聯網,可以說是互聯網時代的軟體開發方式。

好了,下面請看官們聚精會神,用5分鐘完成你和敏捷開發的第一次全接觸:

一、什麼是敏捷開發?

如果用一句話來簡單認識一下敏捷開發這四個字,可以這麼說:一種應對快速變化需求的軟體開發能力

PS:官方解釋請自行前往 Agile software development

要理解那句話的含義,我們先來看一張圖:

假設你的客戶要求你造出一輛蘭博基尼lp700,交付時間很緊迫,你有兩種選擇:

第一種:如圖1

先出設計稿,設計通過後開始施工,先造輪胎->底盤->發動機->外殼->內飾->噴漆->打磨拋光->驗車->交付,當你沒日沒夜的終於趕在工期前自信滿滿的把車交到客戶手上的時候,客戶卻告訴你,我一年前想買一輛蘭博基尼,現在覺得這太low了,還是要一輛特斯拉 Model 3吧,這時你的一臉懵逼何處安放。。。

第二種:如圖2

先做輛酷炫滑板車,滿足客戶家小孩兒玩耍的需求;再改造成時尚單車,滿足客戶上班騎行的需求;再改造成哈雷摩托,滿足客戶周末拉風的需求;最後依據客戶迭代升級成敞篷酷炫的電動特斯拉跑車,客戶全程滿意,最終妥妥地把支票遞給你~~

如果是你,會選哪種?

其實如果把造車換成開發一個軟體項目的話,那麼第一種方式我們稱為傳統的瀑布式開發;第二種方式就是我們的敏捷式開發。

請注意上述例子中有兩個關鍵詞:需求變更和迭代升級

由於現實生活中,客戶的需求是隨著市場在不斷變化的,因此那種一張圖紙做到底的方式顯然無法適應客戶頻繁變化的需求;通過迭代升級,每一次迭代都能夠交付一個最小可用的產品(MVP),客戶可以基於此產品繼續提出新的需求來不斷完善。

如上圖所示,一個大的項目在敏捷開發的模式中被分解成多個『小目標』,通過完成所有這些『小目標』,一個大的項目隨之完成。

二、互聯網時代為什麼需要敏捷開發?

這個問題總結下來有兩點:快速試錯和擁抱變化

今年張小龍在WXG大會上提到:

我們今天可以想一些與眾不同的點子,然後我們可以很快就看到效果,因為我們可以很快把它上線了,然後可以去驗證,如果不對就下線,如果還有改進餘地,下個版本再去改它。這是一個能夠持續實現你的想法的過程

張小龍所說的上線、驗證、改進的持續循環流程實際上就是一個快速試錯和擁抱變化的過程。 當今的互聯網,市場變化日新月異,在不斷變化的市場中取得成功就要擁有快速試錯的能力。

下面是滴滴打車最新的客戶端截圖。從圖中可以看到,滴滴支持的全部車輛服務已經覆蓋到了快車、小巴、計程車、順風車、專車等多達10種服務,而大眾剛剛熟悉滴滴時,滴滴僅有計程車、快車和順風車三種車型。

試想如果滴滴從一開始就計劃設計出10種車型再開始上線推廣,那估計現在滿街跑的就該是Uber或者快的或者什麼滴而不是滴滴了。商機轉瞬即逝,正是在一次次的上線中,從車主、用戶及市場的反饋中不斷調整迭代,才造就了今天的滴滴,而這正是敏捷思想的精髓所在。

三、有哪些公司在使用敏捷開發

可以說,在如今的軟體開發領域,敏捷開發模式已經成為主流,從BAT等互聯網一線大廠到中小創業公司,從傳統的銀行、保險等企業,再到北大、清華的圖書館,都在使用敏捷開發。

國外使用敏捷開發的公司更不用說, 微軟、Google、Facebook的工程師們都已採用敏捷開發的模式進行軟體項目的開發。

四、敏捷開發適合哪些項目?

實際上,敏捷開發比較適合那種有明顯緊急的時間要求、項目本身複雜程度高且比較新穎、團隊自主性強的項目。

首先,這個項目一定是有明確的時間要求,要在某個較短的時間內完成交付成品,傳統的瀑布模型無法在如此短的時間內做出快速反應,保持對項目的緊張性和專註性是敏捷開發的優勢之一。

其次,這個項目本身複雜度要高些且比較新穎。一般來說,軟體開發項目的複雜度都很高,

最後,團隊成員自主性要強。實施敏捷開發的基礎就是要有一個高度自覺和自主性的團隊,敏捷開發是以人為本的。

裝修就是一個很好的敏捷項目實踐,舉個例子:

小明是一名Web開發程序員,經過多年奮鬥終於在帝都買了一套100平米的豪宅,接下來的頭等大事就是裝修。 裝修可以看成一個很典型的使用敏捷開發的項目:

  • 緊迫感--恩,裝修的工期是非常有限的,因此必須保證在規定時間內完成
  • 複雜度--裝修過的人懂的,丈量、設計、採購、裝修等等環節,每個環節之間的配合都很關鍵
  • 團隊自主性--全家總動員,熱情節節高,你懂的~

我們可以把每個環節想像成一次小的迭代過程,通過完成一次次的迭代最終完成整個項目。

五、相比傳統,為什麼高效?

敏捷開發講求Idea的快速落地、高效實踐。

怎麼理解這句話呢?我們還是先來看一下敏捷開發和瀑布式開發的流程圖,左下方是瀑布式開發,右上方是敏捷開發。

首先是人員成本:

試想你是一個程序猿,如果你工作在瀑布模型中,那麼當需求人員在與客戶溝通需求中,需求文檔還沒有出來,由於瀑布模型以文檔驅動,此時你是處於空閑狀態的,你後面的測試兄弟也是如此;而在敏捷模式中,每個開發測試人員都是全程參與每個迭代的,因此人員充分參與所有過程。

其次是溝通成本:

在傳統的瀑布模型中,需求、開發、測試人員都在不同的Team中,假設開發要與需求溝通,那麼要跨Team去溝通,時間和空間無法保證同步,因此溝通成本較高;而敏捷開發團隊中的人員都在一個Scrum Team中,團隊不大,溝通起來成本很小。

最後是風險成本:

對於瀑布模式,最大的風險成本來源於一旦開發過程中有需求變更或者嚴重的問題,所有流程都要回滾到上個階段推倒重來,且越到後期風險越高,修改的成本越大;而對敏捷模式,可以很靈活輕鬆的面對需求變更,有任何bug、需求更改可以放到下一個迭代去做,大大降低了開發過程中的風險成本。

六、以人為本

敏捷開發的十二條原則中有一條叫做:激發個體的鬥志,以他們為核心搭建項目。

敏捷開發是一種以人為核心、迭代、循序漸進的開發方法,在敏捷開發過程中,人是第一位的,過程是第二位的,當然也對個人的能力和自主性提出了更高的要求

七、敏捷開發流程總覽

說了這麼多,來看一張真正的敏捷開發過程SCRUM的完整流程圖吧:

這張圖描述了一個敏捷開發項目(Scrum)中的團隊成員、流程、交付結果及主要事件。 需要說明的是,敏捷開發是一個很系統的理論體系,要弄清裡面的內容需要進行學習並接受相應的培訓,極客學院會邀請京東金牌敏捷教練為線下高端班(魔鬼程序員)的學員進行專業的敏捷開發與培訓,讓學員在最後一個月的敏捷項目開發中真正體驗敏捷開發的奧妙與樂趣。

附:

以下為金牌教練為大家推薦的幾個敏捷開發網站:

  1. 敏捷開發宣言:agilemanifesto.org
  2. Scrum Guide:scrumguides.org
  3. Scrum Primer:Short Introduction to Scrum

文章來自於特邀嘉賓極客學院高端培訓品牌魔鬼程序員教學總監

更多乾貨分享可以關注公眾號:魔鬼程序員


推薦閱讀:

敏捷開發必須要通過用戶故事來溝通嗎?
項目是否必須在產品經理出整個產品的所有原圖之後才能開始進入開發階段?
如何應對客戶頻繁但簡單的需求變動?
為什麼Scrum不行,您的團隊是否採用過Scrum模式,效果如何呢?

TAG:极客学院 | 敏捷开发 | 前端开发 |