什么是真正的敏捷開發?敏捷開發與瀑布開發有何不同
什么是真正的敏捷開發?敏捷開發與瀑布開發有何不同。從本質上講敏捷開發的一個重要目標是建立持續價值交付的能力。這種能力最終必須服務于業務的創新,促進業務的成功。
敏捷開發的目標——更早的交付
我們經常會說敏捷模式,那什么開發模式是不敏捷呢?我們通常說“瀑布”是不敏捷的。
瀑布開發模式把開發分成一系列階段,如需求、設計、開發、測試,就像上圖它畫出來的,看起來很像瀑布,所以叫瀑布開發。問題是需求的交付難道不都是要經歷這些階段嗎?
瀑布開發的本質問題并不是階段,而是批量。需求批量地在一起進行設計,然后是批量地開發,批量地測試、交付等等。批量有什么問題? 首先,批量讓價值交付延遲,所有需求在最后的階段才能交付,價值交付比較晚。
價值交付比較晚又怎么樣?看這幅圖。左邊是Intel的創始人摩爾,摩爾定律的提出者。摩爾定律告訴我們,18個月之后,用同樣的錢能買到多一倍的東西,比如計算能力、存儲量、晶元數等等。而右邊這位是Google執行董事長施密特,他提出了反摩爾定律,表述為:“如果18個月之后我們只能賣出跟今天一樣的東西,我們就只能得到一半的收入”。
反摩爾定律是摩爾定律的一個簡單推論,它告訴我們,越遲交付的價值也是越低的價值。對硬件公司這很關鍵,甚至決定它們的的宿命——技術進步必須跟得上摩爾定律,否則利潤就會被摩爾定律吞噬,讓產品或公司走向滅亡。
軟件或互聯網服務又怎樣呢? IBM在上世紀90年代,意識到不能做一家硬件公司,轉而主攻服務和軟件行業,它的確過了一段好日子。然而,很快互聯網時代到來了,軟件和服務行業的創新一下子加速了。這時,相對硬件公司,反摩爾定律在軟件和互聯網服務公司的作用是有過之而無不及的,時間的遲早可能不僅僅決定價值的多少,有時錯過整時間窗,可能會一無所獲。
反摩爾定律告訴我們,越遲交付的價值也是越低的價值。所以對于軟件開發來說,瀑布模式延遲了價值交付,得到的價值也更少。相對瀑布,我們提出了迭代交付,我們把開發分成迭代,每個迭代交付一部分價值,更早交付的價值往往意味著更多的價值。就這一點來說,迭代相對瀑布的本質是,更小批量的快速交付,從而更早獲取更多價值,和獲取市場競爭的先機。
所以敏捷開發有第一個目標就是更快的交付價值,這里的快指的不是絕對速度,而是更早的交付。
敏捷開發的目標——有效學習和靈活響應變化
我們再看一個坐標圖,這個坐標是項目的時間歷程,最左是項目開始,最右是項目結束。縱坐標是團隊擁有的這個項目和產品的知識,比如說用戶要什么,采取什么樣的產品方案,應該做什么樣的功能,以怎樣的形式來協作,選擇什么樣的技術方案等等。
我們想問一下團隊(包括產品也包括開發、業務)什么時候對于產品和項目的知識最充分、最多?大家的答案都很一致,項目結束的時候。這顯而易見,我們在項目進程中積累了知識,特別是當向用戶交付產品后,用戶反饋:“我要的不是這個啊,我說的明明是…”,這時候你瞬間狂漲知識,并感嘆道“你怎么不早說呢?”。這中間可能有溝通問題,但更多可能的是,用戶這時才清楚或能夠描述他們要的是啥,更有甚者,我們可能一開始連用戶是誰也未必能準確的定義。產品和業務開發本來就是一個探索的過程,開始時一定是最無知的時刻。
再問一個問題。項目中的大部分決策,是什么時間做出的呢?大家的答案也很明確——項目開始的時刻。這里埋藏了一個重大的悖論,我們在最無知的時刻,做出了最重要而且是絕大部分的決策,并把它作為隨后執行的依據。面對不確定的技術、市場環境,傳統開發模式已無法適應要求,悖論越發突出。
?對于這一悖論,敏捷的對策還是迭代。開始時,我們會做出一些初始的決策,比如說總體目標是什么,大概的策略和打法是什么,從哪里開始,怎么檢驗等等。但這些只是初始決策,定義了大致的方向。在整個開發過程,我們迭代交付需求,獲取市場的反饋和最新的信息,并基于這些反饋和信息,積累和修正對產品的認知,增量地決策和調整。
產品開發過程中,技術環境、市場環境、競品策略、團隊認知都會發生變化。面對變化的環境,我們必須承認自己的無知,在開發過程主動有效地學習,不斷地汲取反饋,靈活地調整。這也是敏捷的第二個業務目標,有效學習和靈活響應變化。
綜合上面提到的敏捷開發的兩個業務目標,我們就可以給敏捷開發下一個定義了。敏捷指的是創建一個組織更快(早)的交付價值,和更有效學習和靈活應變的能力。
從能力的角度,敏捷的核心是持續交付價值的能力,以及以持續交付為基礎的快速反饋學習能力。為了具備這樣的能力,產品的開發和交付方式需要做出根本變化。這幅圖從概念上體現了,傳統批量式的開發方式到敏捷的持續交付方式的轉變。
傳統開發方式下,需求成批量的流經各個階段和組織部門,如產品、UED、開發、測試、運營等直至交付,各個職能各自優化自己的工作,形成效率豎井。由于批量的原因,需求等待整個批量完成,才能集中進入下一階段。從單個需求的角度看,需求大部分時間都處于等待狀態。
上圖的右半部分表達了這一過程,單個需求的實際處理的時間很短(圖中折線中上面綠色的短線),它們大部分時間都處于等待狀態(圖中折線下面紅色的長線),最終表現出的實際交付周期很長。
通過敏捷開發的實施,我們希望整個組織協調一致,更緊密協作,縮短交付周期。圖中左半部分是理想的敏捷開發模式,它體現了敏捷開發的基本目標——持續價值交付和快速反饋、學習,這其中持續價值交付是基礎。