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