相較於Scrum, 我更推崇精益Kanban,幫助團隊建立價值交付流,識別瓶頸問題

2023-07-10 09:02:09

最近在學習實踐精益Kanban方法,結合自己團隊實踐Srum的經歷,整理些資料二者的差異。相較於Scrum, 我更推崇精益Kaban。

Agile是一套理論和原則,就像天邊的北極星。Devops是一種軟體開發和運維團隊間自動化和整合過程的方法。當實現Agile和Devops方法時,Kanban和Scrum提供了管理這些複雜工作的不同的實踐。
簡單來說,Kanban和Scrum是進行敏捷開發或專案管理工作的兩個不同的策略或者方法論。

  • Kanban方法意味著持續性與更好的流暢性。
  • Scrum則是基於更短,更加結構化的工作衝刺。

Scrum:一種結構化的敏捷方式

Scrum源自於橄欖球的一種爭球方式。現在作為一種迭代式增量軟體開發過程,通常應用於敏捷軟體開發。Scrum將工作分解成較小的功能單元,並在週期性固定的時間段內持續的交付。

  • 把組織細分成小組、跨功能、自我組織團隊。
  • 把工作細分成細小、實在的交付成果,交排人員負責需求清單以及跟據重要性排優先順序別,由團隊估算每個專案相對工量。
  • 把整個開發時間分成固定時長的短迭代(通常於一至四星期),在每個迭代後演示新增可釋出功能。
  • 優化釋出以及跟客戶一起更新優先順序別,基於每個迭代後釋出的觀察。
  • 優化過程,在每個迭代之後進行回顧

在我們考慮考慮採用SCRUM之前,先問自己一個問題:整個開發團隊是否是專職團隊,並且負責該專案。
SCRUM團隊會承諾每個Sprint結束都會交付產品或者價值。如果你的團隊成員有肯能去做別的其他專案,那麼SCRUM團隊無法承諾每個Sprint的交付。另外,在選擇SCRUM時,還需要考慮以下方面:

  • 節奏

SCRUM強調的是快速交付,在每個Sprint結束時交付使用者可用的可交付物,每個Sprint一般2周最多4周,有著清晰的開始和結束時間。該框架的背後思想是利用短的時間段強迫把複雜任務分解為小的user story.

  • 關鍵指標

衡量一個SCRUM團隊表現的關鍵指標是velocity(效率),即在一個Sprint中交付的story points的數量。該指標用以指導後續Sprint中可以承諾完成的story points。想象一下,如果一個團隊每個Sprint中平均完成35個storypoints,那麼後續的sprint中我們不會完成45個story points.

  • 應對變化

一般情況下,SCRUM團隊儘量不要在Sprint過程中進行範圍變更。如果團隊通過客戶反饋發現他們正在開發的功能沒有他們認為的那麼有價值,這種情況下需要變更該Sprint的開發範圍,以便優先交付對客戶最優價值的功能或價值。

Kanban:一種持續改善,變化靈活的過程

Kanban方法最初起源於豐田的JIT(Just In Time),之後作為一種高效管理軟體開發流程的技術和思想應用於網際網路行業。Kanban方法以價值流動為核心,不斷髮現團隊中的瓶頸工序,進行改進,使價值流動更加順暢和快速。

**工作流程形象化 **

  • 把工作細分成任務,寫在卡紙上,貼在牆上
  • 把欄命名好,來顯示任務在工作流程中的狀況

限制「在製品」(work in progress,簡稱 WIP)

  • 明確設定限制在每個狀態下同一時間能有多少工作任務

度量生產週期(即完成一個任務的平均時間),優化開發過程,縮短開發週期和使它更易於預測。

釋出方式

  • 看板過程中,軟體更新只要完成就可以隨時釋出,沒有一個週期或者提前決定的日期。理論上,看板並不需要預先確定一個時間點來交付一個任務或者軟體更新。如果一個特性完成,無論早晚,都無需像SCRUM過程那樣等到Sprint結束再發布。

角色

  • 整個團隊對看板負責。有些團隊可能需要一個敏捷教練的角色來幫助看板過程的順利進行,但是不像SCRUM一樣,有一個看板master, 來保證每件事情都平穩執行。看板過程中,整個團隊相互共同作業,來負責交付看板上的每個任務。

關鍵指標

  • 迴圈週期(Cycle Time)是看板過程的一種重要指標。它指的是一個工作項從開發到結束所花費的平均時間。工作項迴圈週期的改善意味著團隊的成功。

看板團隊經常用來分析專案進展狀況的工作是累計流圖(CFD)。它可以用來表示每個狀態下的工作項的數量,從而幫助識別出限制工作流的瓶頸。

應對變化

  • 看板的工作流可以任何時候進行變更。任何時候都可以新增新的工作項,也可以暫停或刪除正在進行中的專案,這一切取決有優先順序。而且,如果團隊交付能力發生變化,可以重新設定WIP(Work In Progress)限制,工作項也可以被隨之調整。

比較差別,探索適合自己的方法

在團隊的專案管理實踐中,我們往往將二者的優勢結合起來綜合的使用,以便幫助團隊更好的完成目標,而不是為了使用方法而使用方法

相同點:

  • 兩者都符合精益和敏捷思考
  • 兩者使用"拉動式"安排日程
  • 兩者限制開發中工作數目
  • 兩者是透過透明度來驅動過程開進
  • 兩者集中提早及衡常的付運軟體
  • 兩者基於自我組織團隊
  • 兩者要求把工作細分
  • 在兩個情況下發布計劃都是基於經驗資料(速度/開發週期)持續優化

不同點:

系統範圍

在討論Scrum和看板之前,有必要澄清系統範圍。在Scrum裡,系統範圍由產品的定義和完成的定義決定;而在看板裡,看板系統的邊界定義了系統範圍。

  • Scrum的運作是圍繞產品的,每個迭代開始從產品待辦列表挑選進入下一個迭代的故事,迭代結束將故事做到完成。故事的範圍是由產品的定義決定的,故事在產品的範圍內是端到端的。完成的定義體現的是故事可交付的程度,也就定義了價值流的終點。

  • 看板(Kanban)系統的邊界定義了價值流的範圍,由此決定故事的範圍。故事會流過整個看板系統,其終點狀態完成的定義也就相當於Scrum中完成的定義。


需要指出的是Scrum的系統範圍定義通常是基於組織結構的,它涉及到產品的定義和團隊的組建,產品待辦列表要與團隊相對應,因此係統邊界相對嚴格;而看板的系統範圍定義只是基於在統一的看板系統做視覺化和管理流動,因此係統邊界相對寬鬆。這也跟兩者不同的變革匯入思路有關

兩者都有一個思想去儘可能地擴充套件系統範圍,以利於管理整體的價值流動和實現。只是體現出來的對Scrum而言是產品定義的擴充套件和完成定義的擴充套件,而對看板而言是看板系統邊界的擴充套件。

在我看來,無論Scrum還是看板,都希望幫助到價值交付和持續改進,但是它們採取了不同的方式。最顯著的差別在於Scrum採用迭代而看板採用流。

Introduction to Jira Software Boards | Atlassian

價值交付

  • Scrum和看板都致力於最大化價值交付,無論是採用迭代還是流,關鍵都在於減少在製品。在製品由進行中故事的個數和故事的大小決定。
  • 當採用迭代時,限制故事的個數是間接的,迭代長度間接限制了故事的個數。當採用流時,限制故事的個數卻是直接的。

故事的大小是另一個影響在製品多少的因素。迭代會推動故事的拆分,因為在迭代結束時要求能夠將故事完成。然而,把故事拆得過小會使拆分變得不自然(也就是為了拆而拆),反而降低了那些拆分出來故事的價值。故事不能被無限地拆分,一個故事在有價值的前提下能拆多小通常存在自然的限制。採用迭代有可能會人為地破環故事的自然大小和完整性,而採用流則會更遵照故事自然的顆粒度。

持續改進

Scrum和看板都致力於持續改進,無論是採用迭代還是流,關鍵都在於創造合適的挑戰來驅動改進。當改進目標達成後,改進就會陷入停滯,而持續改進卻需要永不停歇。Scrum和看板都是通過提升目標來再次創造合適的挑戰以使改進繼續,但是提升目標的方式卻不同。

Scrum裡最重要的改進目標是在迭代結束做到完成。這裡有兩個變數,迭代長度和完成的定義。當通過改進做到迭代結束完成後,我們會看完成的定義是否可以擴充套件。擴充套件後的完成定義產生了新的挑戰,從而提供了繼續改進的動力。當完成的定義已經達到可以交付時,我們會看是否可以縮短迭代長度,這又能驅動進一步的改進。

看板的改進目標一方面來自於直接的在製品減少。通過在製品限制的降低,系統中更多問題會被暴露出來,從而驅動改進。另一個重要的因素是圍繞前置時間的改進,前置時間的縮短對價值交付和提升靈活性都有幫助,因此是很好的改進目標。

變革匯入

最後想說說的是關於Scrum和看板的變革思路, 根本在於改善(小變化)和改革(大變化)的平衡。當引入過大變化,由此產生的挑戰過大,結果適得其反。當過於保守引入過小變化,又使變化過於緩慢,甚至逐步喪失了改革的能力。

Scrum的有效運作需要組織設計,它的第一步在我看來是改革,然後由每個迭代回顧驅動持續改進。看板尊重現有的組織結構,從現狀出發,因此它的第一步更接近改善,然後也是持續改進。對兩者而言持續改進理論上引發改善或者改革都有可能,實際中發生更多的是改善。

當變革涉及系統範圍的擴充套件時,Scrum要求組織結構的改變,而看板要求的最小改變只是放在統一的看板上進行視覺化管理,因此更能反映「可能的藝術」。而當現有的組織結構制約了共同作業模式並最終影響到價值流動時,組織結構仍然需要被突破。

先匯入Scrum還是 Kanban?

從屬性上來看:

Scrum 容易探討未知,處理複雜專案,拿來開發新東西威力無比。
Kanban 是教我們如何自我檢討,可以迅速消除浪費,而得到好的效能。

如果你是開發團隊,當然是先從Kanban 開始。
先檢討團隊的基本動作,整頓好了再來開始作新的東西,從事開發的動作,自然減少浪費。這是精益Lean 的好處。
(有太多開發團隊,只曉得一意往前衝刺,忽略了自己在開發上的浪費,這會造成很難走得久遠,尤其是Startup的團隊尤其如是。)

如果你是運維團隊,當然是先從Kanban 開始。
視覺化是最大的亮點,團隊可以看見工作上的維護流程是一件相當有價值的事,針對個人亦是如此,人們常常因為養成習慣了,就一直持續做同樣的事情,很少會有機會回過頭來檢討,哪裡做得浪費了應該改進。
看板方法的第一步: 視覺化。正是團隊可以拿來持續改進的基礎。這一點對維護工做更顯得珍貴。

如果你是測試團隊,當然是先從Kanban 開始。
看的見以後才可以減少猜測的比例。測試團隊在擬定測試計劃之前,一定要對待測的產品或程式有足夠的瞭解,才可能寫出實用的測試案例,不至於浪費大量的測試資源,或做了過多的重複性測試。

你可能覺得奇怪,為什麼都是Kanban Method 先行呢?
其實原因很簡單,因為它"單純「,不是簡單喔! 它沒有想像上的簡單,因為它可以演進得很有深度,但是它的目的很單純,就是追求效能。不像Scrum 的目的,是要來應付複雜的專案開發作業,基本上的方向就完全不一樣的

相較於Scrum, 我更推崇Kanban, 因為限制少,推動Kanban的過程本身其實是定義團隊流程規則的過程,不需要特定的角色,容易理解和接受。

將看板方法融入Scrum的開發過程才是上策
看板方法是一種流程控制,他不是一種具有完備基礎的方法學,雖然他的潛在發展相當可觀,但目前他仍只是一種提供我們產出高效能的流程控制法而已。
他缺少需求描述、沒有完備的會議規劃、少了團隊職責分配,少了很多很多軟體開發上該有的措施,這一點讓他看起來十分空泛,但就是這個特性也讓他十分適合融入其它開法方法中,尤其是Scrum。

看板方法之父 David J. Anderson 是在Microsoft 公司推行敏捷開發法 Scrum 的時候發明看板方法的。他原本的目的只是要求能夠在最少阻力之下順利在組職中推行敏捷式的開發方法而已。卻由於他熟悉限制理論的運作而開創了看板方法Kanban Method。做出了對敏捷開發的精益Lean 一支的重大貢獻。
也就是這樣的典故,讓看板方法Kanban Method可以十分容易的融入到Scrum的開發過程。

著名的《 Essential Scrum 》 的作者Kenneth S. Rubin(它是2013年Amazon 敏捷理論最暢銷書),書中就大量的採用 WIP(Work-In-Process)的觀念,實際的運用在工作看板上面。讓Scrum在開發流程上減少了許多的浪費現象。

看板方法先行
因為它可以減少組織在推行敏捷上的阻力,它能讓工程師以最好的節奏持續進行開發工作。又能將精益觀念帶入團隊運作。
融入Scrum的開發過程
因為看板方法的流程控制方式是用來提升Scrum執行時的效能,讓 Scrum 能真正用來克服複雜的軟體程式開發過程。

Scrum 的目的在解決複雜的軟體開發作業
許多人誤把Scrum 當成加速軟體開發的銀子彈。這是錯的!

它的目的不在加速開發(加速開發工作是開發工具的廣告詞),它的目的是在解決複雜的軟體開發作業,讓它提高成功率。在協助團隊能夠提供給客戶真正要的產品,且讓他在市場上具有實際的競爭力。這一點也正好是看板方法所缺少的。

開發團隊千萬別因為實施了看板方法而誤以為需要把 Scrum 拋棄了,這是一種錯誤的想法,讓他們相輔相成才能有更大的效益。

先匯入 Scrum還是 Kanban? 二者之間並沒有衝突存在,都是通往敏捷開發的路徑,就看你現在最需要的是那一樣,那一樣就先來吧

  • 已經在使用 Scrum 作開發工作的人士,學習 Kanban Method 可以讓他們進入精益的領域,有所依據的持續追求更好的效能。
  • 先學會Kanban 方法 再跨足 Scrum 的人呢? 則可以看到敏捷開發在處理複雜問題上的具體方法,真正懂得去追求效能之外的正確性與方向。

實踐分享 - 結合業務性質,持續改進,適應外部變化

基於團隊業務情況(服務交付型別),結合自己對兩者的理解,以及實踐中遇到的問題,畫了如下圖:

我們遇到的問題:

  • 需求不固定,經常面臨隨時插入高優先順序需求
  • 客戶反饋需要快速解決,特別是阻塞性的
  • 資源緊張,負責平臺模組多,業務差異較大

探索改進過程

  1. 混亂期,團隊新組建,需求沒有得到有效跟蹤
  2. 建設期,逐步開始通過Jira跟蹤需求,嘗試敏捷Scrum, 各種站會,評審會,評估故事點等實踐,此時外部需求可控,從2周迭代釋出(小瀑布)逐步過渡到隨時可釋出狀態 (伴隨著建立了分支模型,分支模型也隨之調整了兩版,建立了和環境對應的持續交付流水線)
  3. 問題期,業務壓力大,各種Scrum會議感覺作用不大,團隊成員不需要參與所有需求評審,PO需要多個業務板塊切換準備需求
  4. 調整期,推動研發人員專職負責某個模組,負責整體迭代把控,拆分成迭代火車,各負其責,把sprin當作一個個專題需求火車
  5. 改進期,雖然劃分了責任邊界,但是外部需求/事務增加,積壓嚴重(狀態更新不及時),無法從宏觀瞭解整體情況(整個看板都是滿的),所以嘗試使用Kanban方法,梳理業務流程,在原有流程不變情況下,明確定義團隊共同作業規則,制定不同緯度/角色關注的看板,同時建立個人/團隊儀表盤,關注動態變化
    1. 需求看板 - 研發/產品經理關注
    2. Scrum迭代看板 (專注於內部開發迭代)- 研發同學關注
    3. 客戶問題看板 (劃分優先順序泳道)
    4. 缺陷看板 - 測試同學關注
    5. 運維/運營看板 - 包括技術債務,改進,支援事項等
    6. 整體全域性看板

經過上述過程,團隊逐步向 「自組織「團隊演化,」分工有序「,簡化花裡胡哨的Scrum儀式, sprint變成了業務釋出火車(劃分迭代範圍之用),把整個團隊跑迭代變成了2-3人的「按照業務領域劃分的迭代」,放棄了故事點評估(實踐證明似乎不太適合我們),相比於scrum偏重於迭代間的改進,我們更看重需求交付速度,不希望有擠壓,降低外部插入的需求或事項帶來的干擾,讓成員更專注。

總結

  • Kanban主要用來視覺化你的工作,限制在製品,使其最大效率的流動。Kanban團隊聚焦在減少花在專案(或者使用者故事)上的從開始到結束的時間。他們通過Kanban board 來實現它並持續改進他們的工作流。

  • Scrum通過設定稱為衝刺(Sprint)的間隔去承諾需要承載的軟體開發。它的目標是通過蒐集和整合客戶反饋去創造一個產品的快速學習環。Scrum團隊採取特定的角色,創造特定的工件,執行特定的儀式來保持事情的推進。

**
Scrum Kanban
規劃 它有固定的計劃。它專注於規劃。它從 sprint 計劃開始,以 sprint 回顧結束。召開每日會議,以便團隊瞭解接下來的步驟、優先順序以及從先前步驟中獲得的經驗。 它沒有固定的計劃,也沒有舉行日常會議。在看板中,隨時可能發生變化,即頻繁發生變化。
時間線 在 Scrum 中,我們處理具有固定持續時間的衝刺,這意味著經過一些固定時間後,我們將向客戶交付一些東西。 看板沒有衝刺的概念,因此它沒有將產品交付給客戶的固定時間表。
任務估計 在衝刺計劃期間,決定從產品待辦列表中提取多少活動並新增到衝刺待辦列表中。例如,如果衝刺是兩週,那麼選擇活動的數量,使它們可以在衝刺內完成,即在兩週內完成。 它不估計任務。
Scrum Master 在 Scrum 方法論中,我們有一名 Scrum 主管負責管理團隊並每天主持會議。 在看板方法論中,我們沒有任何 Scrum Master。交付有價值的產品是每個人的責任。
適用性 這種方法適用於大型專案,因為大型專案可以分為多個衝刺。 主要適用於小型專案。
不斷變化 在 Scrum 中,可以在較短的衝刺中輕鬆適應不斷的變化。 如果發生任何重大變化,那麼看板方法就會失敗。
成本 在 Scrum 中,任務是估計的,即在一個 sprint 中進行固定數量的活動,因此專案的總成本最小。 在看板中,沒有估算任務,因此專案的總成本不準確。
角色和職責 在 Scrum 中,Scrum Master 為團隊成員分配了特定的角色,而產品負責人則告訴團隊成員必須工作的產品目標。 沒有為團隊成員分配預定義的角色。所有團隊成員都有責任合作交付有價值的產品。
生產力衡量 生產力是通過使用週期時間或完成整個專案從開始到結束所花費的時間來衡量的。 生產力是通過沖刺速度來衡量的。
釋出方法 每個衝刺結束後的小版本。 它提供持續交付。

區別一:實施過程中關注核心的區別

Scrum實施的核心可以概括為「化繁為簡」,從幾個維度解釋下:

  1. 團隊角色的定義,將團隊人員定義為三個角色,Scrum Master(主要負責消除障礙,帶領團隊運作)、Product Owner(主要負責描繪產品遠景,定義優先順序)、Scrum Team(主要負責實現產品)
  2. 工作任務的拆分,將產品需求拆分成小的使用者故事,並評估優先順序
  3. 時間的拆分,將專案週期拆分成固定時長的迭代週期,每個迭代交付一部分可驗收的功能,通常迭代長度為1到4周

Kanban方法在實施的過程中更多關注的是視覺化的價值流動,從幾個維度解釋下:

  1. 拉動式生產,下游工作完成後,主動拉動上游的任務移動
  2. 限制WIP(work in progress),明確設定限制每個狀態下,同一時間內有多少工作量,減少同一狀態同一時間內,任務和價值的堆積
  3. 視覺化的價值流動通常是端到端的流動,直觀的反映使用者的價值(通常是可交付的使用者需求),並且反映出在價值流動過程中的瓶頸和問題,不斷為團隊改善提供依據

區別二:限制WIP數量的方式不同

Scrum與Kanban方法都會限制在製品數量,不過限制方式有所不同,

  • Kanban方法限制的更加直接,同一狀態同一時間內的工作任務有最大限制;
  • Scrum是間接性的通過迭代(sprint)來限制。限制WIP的核心目的是加速交付使用者需求的價值流動。

區別三:對任務變更管理的不同

在Kanban方法的中,下游任務完成後(有顯式化的拖動規則),即可拉動上游任務下移,同時,只要生產力允許,即可新增需求。

在Scrum方法下,當每個迭代的sprint Backlog確認後,當前迭代是不允許新增需求的,新增加的需求可以體現在下個迭代的sprint backlog中。

區別四:改進依據的不同

  • Scrum是以生產率作為計劃和改進的依據,以迭代(sprint)資料作為依據,分析迭代的相關資料(包括生產率、完成率等);
  • Kanban方法是使用生產週期作為計劃和過程改進的依據。

Scrum和Kanban方法作為即敏捷又精益的典型代表,除了上述不同外,還存在很多相同點:

  1. 二者都和敏捷與精益相對應。敏捷中的持續改進思想在Scrum和Kanban都有所體現,而且是很核心的一個內容;精益中的拉動式生產在Scrum和Kanban中也都分別覆蓋,Kanban方法體現的更加直接,下游直接拉動上游的工作任務。
  2. 二者都關注儘早的交付價值,儘可能頻繁的釋出可使用的軟體。Scrum將整個專案週期拆分成多個迭代,每個迭代釋出可驗收的軟體;Kanban方法在每個功能開發測試完成後就可以進行部署和釋出。
  3. 團隊狀態都直觀的反應在Scrum board和Kanban Board上,方便找到問題和瓶頸,並進行改善。

案例

比較了Scrum與Kanban方法之後,如何結合二者在團隊中進行專案管理實踐呢?這裡提供一個案例,從迭代、版本、變更、改進四個方面來介紹

迭代:在Kanban方法中,並未規定明確的迭代,而在Scrum中是規定了固定的迭代週期。在我們的團隊中,迭代週期從一月一迭代,逐步變為一月兩迭代,到現在的兩個自然週一個迭代,完全固化了迭代週期的概念。

將複雜開發週期很長的開發任務,分解成多個迭代週期,每個迭代週期交付一些可驗收的軟體或者功能。有利於減少風險,並更好的適應變化,及時的根據反饋調整工作目標。

版本:在迭代中,我們以排入版本計劃的功能點(story)作為工作重點,排入版本的story為互動已經完成的功能點(story),這些功能點可以直接進入開發和測試環節。這些story便是我們當前迭代可以交付的功能或者軟體。與此同時,產品、互動和視覺同學會繼續拉取需求池中的功能點,開始進行設計,準備下個迭代版本中的內容。使整個價值流動更加順暢。

變更:對待變更,我們同樣有自己的一套流程規範,既沒有像Kanban方法一樣,只要生產力允許,便可以新增需求;也沒有像Scrum一樣,版本內容確定,當前迭代基本不允許變更。
在實際過程中,當存在緊急需求,由產品經理髮起,和各個角色進行評估風險和對現有版本的影響,並採取相應措施降低由於需求變更對整個系統產生的影響,最後由專案經理髮出變更通知的郵件。

改進:我們改進的依據之一是團隊資料,由於我們所有的任務都是通過JIRA進行管理,可以方便的拿個團隊各種資料,包括:總工作量、總完成工作量、完成率、有效工作量、有效工作率、bug數、bug率等,對這些資料進行分析,發現團隊的問題,幫助團隊進行改進。