最近在學習實踐精益Kanban方法,結合自己團隊實踐Srum的經歷,整理些資料二者的差異。相較於Scrum, 我更推崇精益Kaban。
Agile是一套理論和原則,就像天邊的北極星。Devops是一種軟體開發和運維團隊間自動化和整合過程的方法。當實現Agile和Devops方法時,Kanban和Scrum提供了管理這些複雜工作的不同的實踐。
簡單來說,Kanban和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方法最初起源於豐田的JIT(Just In Time),之後作為一種高效管理軟體開發流程的技術和思想應用於網際網路行業。Kanban方法以價值流動為核心,不斷髮現團隊中的瓶頸工序,進行改進,使價值流動更加順暢和快速。
**工作流程形象化 **
限制「在製品」(work in progress,簡稱 WIP)
度量生產週期(即完成一個任務的平均時間),優化開發過程,縮短開發週期和使它更易於預測。
釋出方式
角色
關鍵指標
看板團隊經常用來分析專案進展狀況的工作是累計流圖(CFD)。它可以用來表示每個狀態下的工作項的數量,從而幫助識別出限制工作流的瓶頸。
應對變化
在團隊的專案管理實踐中,我們往往將二者的優勢結合起來綜合的使用,以便幫助團隊更好的完成目標,而不是為了使用方法而使用方法。
在討論Scrum和看板之前,有必要澄清系統範圍。在Scrum裡,系統範圍由產品的定義和完成的定義決定;而在看板裡,看板系統的邊界定義了系統範圍。
需要指出的是Scrum的系統範圍定義通常是基於組織結構的,它涉及到產品的定義和團隊的組建,產品待辦列表要與團隊相對應,因此係統邊界相對嚴格;而看板的系統範圍定義只是基於在統一的看板系統做視覺化和管理流動,因此係統邊界相對寬鬆。這也跟兩者不同的變革匯入思路有關。
兩者都有一個思想去儘可能地擴充套件系統範圍,以利於管理整體的價值流動和實現。只是體現出來的對Scrum而言是產品定義的擴充套件和完成定義的擴充套件,而對看板而言是看板系統邊界的擴充套件。
在我看來,無論Scrum還是看板,都希望幫助到價值交付和持續改進,但是它們採取了不同的方式。最顯著的差別在於Scrum採用迭代而看板採用流。
Introduction to Jira Software Boards | Atlassian
故事的大小是另一個影響在製品多少的因素。迭代會推動故事的拆分,因為在迭代結束時要求能夠將故事完成。然而,把故事拆得過小會使拆分變得不自然(也就是為了拆而拆),反而降低了那些拆分出來故事的價值。故事不能被無限地拆分,一個故事在有價值的前提下能拆多小通常存在自然的限制。採用迭代有可能會人為地破環故事的自然大小和完整性,而採用流則會更遵照故事自然的顆粒度。
Scrum和看板都致力於持續改進,無論是採用迭代還是流,關鍵都在於創造合適的挑戰來驅動改進。當改進目標達成後,改進就會陷入停滯,而持續改進卻需要永不停歇。Scrum和看板都是通過提升目標來再次創造合適的挑戰以使改進繼續,但是提升目標的方式卻不同。
Scrum裡最重要的改進目標是在迭代結束做到完成。這裡有兩個變數,迭代長度和完成的定義。當通過改進做到迭代結束完成後,我們會看完成的定義是否可以擴充套件。擴充套件後的完成定義產生了新的挑戰,從而提供了繼續改進的動力。當完成的定義已經達到可以交付時,我們會看是否可以縮短迭代長度,這又能驅動進一步的改進。
看板的改進目標一方面來自於直接的在製品減少。通過在製品限制的降低,系統中更多問題會被暴露出來,從而驅動改進。另一個重要的因素是圍繞前置時間的改進,前置時間的縮短對價值交付和提升靈活性都有幫助,因此是很好的改進目標。
最後想說說的是關於Scrum和看板的變革思路, 根本在於改善(小變化)和改革(大變化)的平衡。當引入過大變化,由此產生的挑戰過大,結果適得其反。當過於保守引入過小變化,又使變化過於緩慢,甚至逐步喪失了改革的能力。
Scrum的有效運作需要組織設計,它的第一步在我看來是改革,然後由每個迭代回顧驅動持續改進。看板尊重現有的組織結構,從現狀出發,因此它的第一步更接近改善,然後也是持續改進。對兩者而言持續改進理論上引發改善或者改革都有可能,實際中發生更多的是改善。
當變革涉及系統範圍的擴充套件時,Scrum要求組織結構的改變,而看板要求的最小改變只是放在統一的看板上進行視覺化管理,因此更能反映「可能的藝術」。而當現有的組織結構制約了共同作業模式並最終影響到價值流動時,組織結構仍然需要被突破。
從屬性上來看:
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儀式, 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實施的核心可以概括為「化繁為簡」,從幾個維度解釋下:
Kanban方法在實施的過程中更多關注的是視覺化的價值流動,從幾個維度解釋下:
Scrum與Kanban方法都會限制在製品數量,不過限制方式有所不同,
在Kanban方法的中,下游任務完成後(有顯式化的拖動規則),即可拉動上游任務下移,同時,只要生產力允許,即可新增需求。
在Scrum方法下,當每個迭代的sprint Backlog確認後,當前迭代是不允許新增需求的,新增加的需求可以體現在下個迭代的sprint backlog中。
Scrum和Kanban方法作為即敏捷又精益的典型代表,除了上述不同外,還存在很多相同點:
比較了Scrum與Kanban方法之後,如何結合二者在團隊中進行專案管理實踐呢?這裡提供一個案例,從迭代、版本、變更、改進四個方面來介紹
迭代:在Kanban方法中,並未規定明確的迭代,而在Scrum中是規定了固定的迭代週期。在我們的團隊中,迭代週期從一月一迭代,逐步變為一月兩迭代,到現在的兩個自然週一個迭代,完全固化了迭代週期的概念。
將複雜開發週期很長的開發任務,分解成多個迭代週期,每個迭代週期交付一些可驗收的軟體或者功能。有利於減少風險,並更好的適應變化,及時的根據反饋調整工作目標。
版本:在迭代中,我們以排入版本計劃的功能點(story)作為工作重點,排入版本的story為互動已經完成的功能點(story),這些功能點可以直接進入開發和測試環節。這些story便是我們當前迭代可以交付的功能或者軟體。與此同時,產品、互動和視覺同學會繼續拉取需求池中的功能點,開始進行設計,準備下個迭代版本中的內容。使整個價值流動更加順暢。
變更:對待變更,我們同樣有自己的一套流程規範,既沒有像Kanban方法一樣,只要生產力允許,便可以新增需求;也沒有像Scrum一樣,版本內容確定,當前迭代基本不允許變更。
在實際過程中,當存在緊急需求,由產品經理髮起,和各個角色進行評估風險和對現有版本的影響,並採取相應措施降低由於需求變更對整個系統產生的影響,最後由專案經理髮出變更通知的郵件。
改進:我們改進的依據之一是團隊資料,由於我們所有的任務都是通過JIRA進行管理,可以方便的拿個團隊各種資料,包括:總工作量、總完成工作量、完成率、有效工作量、有效工作率、bug數、bug率等,對這些資料進行分析,發現團隊的問題,幫助團隊進行改進。