累積流程圖 Cumulative Flow Diagram 解密

.

累積流程圖是用來描述工作是如何在系統中移動的圖示。

.

累積流程圖

一個真實世界的累積流程圖(PP: prepare production)

上圖顯示了隨著開發時間的推移,團隊在每個階段所進行的任務及消耗的時間。水平軸的單位是時間(Sprint日期),垂直軸線則是工作量(一般為故事點)。在Kanban Tool 網站上有一張手繪的累積流程圖,但一般建議不要用手來繪製,應該交由電子看板作自動呈現。下面這張圖看起來很專業但完全不推薦這麼做。

.

手繪累積流程圖.png

Kanban Tool 網站上有一張手繪的累積流程圖

.

他是一張極簡單的工作軌跡圖示,但卻能讓我們看見團隊在專案開發過程中的使用者故事完成的狀態,是一張流量圖,線與線之間的垂直距離,就是故事在欄位裡停留的期間,在這段時間裡它就是半成品(WIP)。

半成品的定義

Work In Progress,縮寫為WIP,又可寫為goods in process,in-process inventory,又稱為在製品,是尚未完成製造過程的商品,或是停留在庫存倉庫或是生產線上,等待著進一步處理的商品。這個術語常使用在供應鏈管理上。在軟體開發上,只要開始工作的任務,在尚未通過QA認可移入完成欄位的開發工作就還是「半成品」。它代表著一種浪費的指標,越大越浪費,也就是生產的效能越差。(WIP的值越大,就表示開發的 Lead time 越長)

.

信息輻射.png

這是我在GOPS 大會上的演講資料(原作是Pawel Brodzinski)

.

信息輻射: 所指的是輻射信息,也就是這張圖給你的第一印象,你在看的時它自然釋放出來的是什麼樣的訊息。

.

累積流程圖解讀

上圖中有10個現象,畫成這個樣子好像誇張了一點,但相信我只要你繼續待在這個圈子裡,早晚會遇到的。請問;閱讀累積流程圖應該從哪裡看起呢? 這一點和我們看看板是一樣的,要先從它所表現出來的輻射信息開始。上圖中很明顯的「瓶頸」應該是我想刻意表達的(但在演講廳裡,第一個回答的人沒挑那個很明顯的黑圓圈!)

當累積流程圖上面的各個線條都能夠保持常態的間距,就表示開發工作都能在看板上順暢的流動。若是有糾結(kink)的線條則表示出開發作業出現瓶頸了,我們可以透過持續觀察線條的呈現狀態,來追蹤開發作業是遇到瓶頸卡住了呢,還是工程師遇到連續假期讓進度變慢了,便可以思考如何運用調整WIP的數目限制來改善作業狀態。

.

累積流程圖_stat.png

A: 線條有放大的現象,B: 線條有趨近的現象。

.

 調整方式:

》當有二條線有放大的現象時,表示WIP值要變大了,也就是應該要投入較多資源來協助開發。反之;

當有二條線條有趨近的現象時,表示WIP值要減少了,也就是應該要調降投入的資源.

.

累積流程圖_0

上圖中,BC線段顯示出當前每個步驟裡正在處理的工作數目。而水平線條AB則是它們共花費了多少時間。當垂直線條的間距變大了,表示需要花去更多的時間(lead time 變大),也就是當前的開發速度變慢了,若其中有線條靠得很近時,則表示上面的作業追上下面的作業了(若是出現的是開發追上測試的欄位,則表示測試即將變成瓶頸。若是出現的是測試追上完成的欄位,則表示作了一堆小功能,沒太多可測的工作)

.

lead timeLead time 的趨勢圖

.

由lead time (也就是由需求故事被放入待辦事項欄位開始,一直到它被開發完成為止總共花費的時間稱之),上圖中;我們取每三個點的平均值來連接起來,就能看到Lead time 的趨勢線,便能夠預測接下來的開發工作有可能花費的時間了。當WIP值變大時,Lead time 就變長了,因此我們應該追求最小的半成品WIP的極小化。

 .

看板是一個持續改善的依據

由於看板能夠忠實記錄開發的過程,所以我們能夠透過持續觀察累績流程圖上線條的走向(趨勢),然後依靠它來決定如何進行調整的動作。舉例來說:當我們觀察到測試與完成二條線之間的間距有漸行加大的現象時,這表示: 測試作業的時間加長了,有可能會成為發布作業的瓶頸,這時候應該將WIP值加大,也就是投入更多的測試資源,解決之道可能是請測試人員將工作明確的切分出來,然後可能就是請團隊中的開發人員協助投入測試工作,來加速測試作業。

.

結論

實踐看板的三大步驟: 視覺化流程、WIP控管、流程管理。一般的使用者都停在第二步;也就是WIP的控管上。原因很簡單,因為WIP很難設定。設值很容易,但卻始終無法體驗到設定了的WIP值到底有什麼影響? 也就是一直試不出來WIP的影響。怎麼辦呢? 解決方法是去看累積流程圖,從記錄的曲線去看趨勢的走向,想知道調整WIP就能神奇的轉變流量嗎? 答案是;除非你看到了WIP的邊界值,否則你會始終感受不到設定的意義的,也就是調來調去都沒有特別的感覺。一種好的做法是: 配合WIP的趨勢去調整人力資源,而不是只有調整WIP值,去等待變化。這才是務實的做法。試試看吧! 很快你就能看到效果了。 範例:

.

累積流程圖_ab

由累積流程圖看開發流程的趨勢

.

設定WIP來改變趨勢走向

我們應該善用顯示在累積流程圖上頭的數據,不只因為數據可以讓我們看見過程,更可以看見趨勢,而WIP的調整正是用來調整流程的流動趨勢的。累積流程圖上線條的走向,劃一條垂直線就是開發作業在幾條交叉線之間所停留的工期,也就是 WIP值。由上圖中,4/12到4/13的開發過程,A點的數據Doing的WIP值由 8 提升到B點的 12,也就是 Lead time 變大了,原因可能是團隊正在開發一個較大的功能,所以開發時間就變長了。這段時間維持到 4/19 號,WIP值開始下降了,到 4/20 回復正常。所以測試欄位的 WIP值最小值是3,而Doing 的WIP值最大是E點的15。

反過來檢討;我們在遇到B點開發作業的WIP急遽增加時(8 增加到12時),可以發現是否遇到較大的開發功能了,該如何調整人力來縮短這段時間呢? 也就是要如何來縮短 4/12 到 4/20的開發負荷才能讓團隊維持在正常的產能。做法可能是找到合適的工程師來開發這項耗時的功能,或是把這項功能Breakdown 成更多細部的項目讓團隊發揮力量一起來運用分工的方式來克服它,這就需要視情況而定了。

.

.

註1. Kanbanize 的CFD 教學影片

註2. 上面圖示均採用 VSTS所產生的累積流程圖及 Lead time 圖示.

註3. 很多書上有另一種速率的度量方式: 也就是以開始點的WIP值為準,形成一種倒三角形的計算方式,立意是以開始時的半成品數為基準。我個人傾向以完成點的WIP值為準,也就是以完成時的半成品數為基準做計算。不論你選擇那一種方式,主重點是不要混用,只採用一種固定的計算方式,數值只是一個参考比較的指標,別忘了相對的意義重於精確的數據,重點是提供持續改善的指標。

another.png

.

 

發表留言