看板方法: 拉動系統 Pull System

拉動系統 Pull System: 是一種流程的控制方式,限制只有在工作項目被完成的時候,新的項目才可以被拉動近來。

pull system

如上圖所示,當有工作項目Work Item被完成時,系統就會發出拉動的信號 Pull Signal,啟動拉動過程 Pull Process拉入新的工作項目,並開始工作直到完成時,才再繼續下一個循環。目的很明顯的寫在中間,就是為了消除浪費,消除備料、預做排程…等浪費。它是屬於即時處理的系統模式,也就是只有在有空的時候才會拉入新的工作來做。是豐田系統的理論支柱之一,也運用在看板方法上頭。也就是說,在看板的垂直欄位內,只有在前面欄位出現工作項目被完成,並移動出去的時候,新的工作項目才可以被拉動近來,如果沒有空缺出現,流程便無法進行下去,發生阻塞的現象,而解決這種阻塞讓流程能進續順暢進行的工作,正是看板方法的目標。

 

拉動系統挑戰傳統的思維模式

傳統的工作模式;是當有工作進來了,就把它分配下去做。這是一種主動分配的工作模式,稱之為"Push System"。它看起來非常適合一般的IT作業方式, 當工作需要完成時,就由主管來進行工作的分配。這種方式一開始都是一個蘿菠一個坑開始的,屬於單工的作業,效率很好。但隨著事情逐漸累積下來,再加上開始有維護的需求時,很快就變成能者多勞的方式,也就是工作能力強的人就開始同時負責多件工作,變成50-50 (一個人負責二件事)或 30-30-40(一個人負責三件事),工作很快便開始失去平衡了。此時管理工作就開始面臨挑戰了。

相反的;拉動系統 Pull System;是當有空、做完其他工作的時候,才會去拿取新的工作。例如: Scrum 的每日站立會議,團隊成員只有在完成了手上現有的工作時,才會去拿取新的代辦事項(sprint backlog)來做,因此工作效率較好,是一種典型的拉動作業。但是;難到拉動系統就沒有多工的問題了嗎? 答案是:有的。採用看板系統可以協助你在某些方面得到改善。

對看板方法而言;如果你希望底下的工作人員可以同時作多件事的話,也就是進行多工作業。那就用WIP來限制它,它的好處是運用WIP的限制來避免底下的工程師工作負荷過量。同時它也能夠作為度量工作效率的參考(請參考:限制半成品限額 Limit Work-In-Progress )。

 

.

採用拉動系統會影響到我們的工作方式,他不只是作法上的改變,對企業文化也是一種改變。它成功的在豐田企業製造了豐田奇蹟,但在軟體業的運用上則還很新穎,看板方法是目前為止最成功的一個例子。這也證明了精實軟體開發Lean software development 雖然講述的只有原則而沒有開發方法, 但對企業的影響卻更勝於其他敏捷的開發方法。

看板方法: 限制半成品限額 Limit Work-In-Progress

當我們依據利特爾法則在追求最高產出時,才豁然發覺實際上我們是在追求「平衡點」。

追求工作數量 workload 與 工作能力 Capacity 的平衡點。

 

MyKanbanBoard_wip

 

「平衡點 」Balance

看著看板上的各個欄位,為了要追求流程的最高產出,我們必須在每一個欄位的最上方做設定,設定這個欄位所允許的「工作事項的限額」,我們稱它為半成品 WIP: Work-In-Progress。這個限制半成品數量的動作,可以讓我們藉著調整工作的需要時間(Cycle time)來改變生產率(依據利特爾法則),因此而得到最佳的產能。(其實沒有所謂最佳的產能,它只是我們不斷在追求的一個目標。而我們一直在作的只是在調整平衡點而已,並希望藉由這樣的調整能獲得讓我們滿意的產能,更接近最佳產能。)

這個平衡點看起來蠻單純的,但執行起來還需要多考慮、多取得工作上的溝通跟認可,處理人的共識有時候比找出平衡點還重要,必須先與上下游之間有共識以後實施起來才不至於造成困擾。接著我們就來走一回最基本的WIP制定原則。

 

※ 單工的考量

一個人同時只做一件事時效能最高(請參考: Multitasking is evil)。所以當團隊有三個開發人員,此時我們就可以考量把 In progress 欄位上面的 WIP值設為3。也就是每人最多同時做一件事。反過來說,當你在設定「個人看板」的時候,In Progress 欄位通常應該是 1。也就是說一次只作一件事,相信這個時候你的工作效能最好。可惜的是,我們很少能一次只作一件事,忙碌總是不請自來的! 因此考慮如何多工又能做得有高效能才是重點。

 

※ 多工的考量

當有限的資源遇到突如其來超過原有資源數量時,排隊現象(queuing)就產生了。如果我們不想要產生排隊現象怎麼辦? 那就只好增加人力資源。但,沒那麼多人可以加入怎麼辦? 那就只好要求一個人同時做好幾件事了,也就是進行多工作業(Multitasking)。雖然我們都知道多工對效能一定會有所損失(工作在做轉換的時候,一定多多少少會消耗人的精神跟時間的)。那看板方法又是如何來處理這種現象呢?

二種方法供選擇:

一、將WIP的數值調大到你願意承擔的 Queue 的最大值,然後再視狀況依次遞減下來。

二、預設每個人需要承擔的多工數目乘上人數作為WIP值,用最小值的方法作設定,然後再視狀況依次遞增上去。

二種方法都有人用,見仁見智,請視狀況嘗試看看。但選擇哪一種方法都沒關係,因為重點在調整的方法上頭。重點在嘗試調整到讓產值與一個循環所需要的時間能夠達到你滿意的數值,然後這就是你的「平衡點」了。

怎麼樣的數值會讓你滿意呢?

就是累積流程圖(CFD: Cumulative Flow Diagram)的曲線能達到平滑。上面的二種方法;一個是由大到小,一個是由小到大,目的都在不斷嘗試著找出產生阻塞時的WIP點。找出來之後再由現象作判斷考慮調上或調下(找到平衡點);也就是曲線能否達到平滑的地步來做WIP值的調整依據(CFD圖的解圖,請參考:累積流程圖)。

※ 無可避免的緩衝區(Buffer)設計

在瓶頸前設置緩衝區,這是一種充分利用瓶頸處資源的典型作法。緩衝區的大小很重要,他就跟排隊 Queue一樣,它會增加WIP的數量,請注意: 當WIP的數值越大,就表示前置的時間就越長,所以WIP數值越小越好。但這二個數值間接的改善了曲線的平滑度,也增加了曲線的可預測性,可以增加我們作決策時的準確度。它也使得工作流程不會停頓下來,加速了交付的速度。

緩衝區的運用可以確保瓶頸處的資源一直處於工作狀態,從而提高了資源的利用率,避免了阻塞。真是好用,但一樣的前提一再的提醒我們,千萬不要為求敏捷而犧牲了品質,主管們最想要的除了高產能之外可預測性應該也很重要。

 

到底排隊(Queue)的大小要設多大呢?

要你憑空去設定一個數值好像蠻難的,但其實RUN過一輪以後你就知道了。就把它設得比產出速率大一點點就可以了,目的當然是讓流程可以不會被中斷。例如: 團隊每周可以交付 5個工作事項,而針對排隊的補充速率是每周一次的話,那把它設成6 或7就都可以了,至於是 6還是 7就看交付速率的穩定度來決定了,一般而言 7應該比較好一點。至於甚麼時候才應該調整這個排隊大小的數值呢?

當團隊提前完成時,若是才過了星期三,團隊就已經達成7 個工作事項,接著就會產生了大的盈餘時間,團隊成員會覺得太輕鬆了(通常是老闆會看不下去),這就表示Queue的大小明顯的可以再調高到 8。調整的狀態,經常會受工作事項的困難程度而影響,到底哪個數值才好,應該是隨著工作的難易度動態的調整,運用即時的判斷來作調整就可以了,沒有必要太傷腦筋或執著於某一個數值,因為它是相對的。

 

看板上沒有設置WIP值的欄位

當產出能力遠比瓶頸處的產出時間大的時候,就可不用設定WIP值了。也就是說在那個節點上有相當得盈餘時間在,當然沒有必要再設WIP值了。哈哈! 如果你是主管的話,此刻想的應該是如何消除盈餘時間,對不對?!

 

還有,最後一個欄位通常都不會設定 WIP值,下回再說吧!