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