l

2014年8月11日 星期一

看板方法介紹(2):Push 和 Pull

August 06 20:47~22:22

image

 

看板方法稱為一種「pull system」(拉式系統),而傳統的大量生產方式稱為「push system」(推式系統)。到底兩者有何分別,請繼續看下去。

***

Push和Pull是兩種在軟體開發中經常被用來「索取資料」的方法。從「索取資料」的角度來看,push model(又稱為notification)似乎比pull(或稱為polling,每隔一段時間去問一下)要來的有效率,因為只有客戶端所需要的資料完備的時候,擁有資料的人才會主動把資料傳遞給客戶端,不需要驚動客戶三不五時主動的詢問。Push model的例子有電子報寄送、產品價價通知、Observer設計模式。Pull model則有警察簽到、網頁手動reload、polling(輪詢)。

有別於傳統waterfall專案採用push model來分派工作,Scrum與Kanban則是採用pull model。一般而言現在的看法,採用Scrum、Kanban應該比傳統的waterfall要來的好。因此,這樣講起來好像從開發流程的角度來看,用pull比用push還要好,這是為什麼呢?

***

有過Scrum或Kanban經驗的鄉民們,不知道會不會有過這樣的問題:「Scrum和Kanban都說是pull model,由後端向前端發出工作訊號,但是實際運作的時候,工作(task或work item)還是從工作看板上由左向右走,這樣看起來應該是push model才對啊?」

請看下圖(可參考維基百科),紅色箭頭代表資訊流,綠色箭頭代表原物料(工作)流。

螢幕截圖 2014-08-06 21.15.07

 

  • Push model:由決策者預測市場的需要,來決定生產那些產品以及多少數量,工作是由生產線以外的人push(推)進來的。Push model的工作是「到期日驅動」,也就是傳統上老闆或PM(專案經理)最喜歡的「 押到期日」,因為老闆或PM(決策者)認為只要押了每件工作的到期日,工程師自然要想辦法在到期日之前完成。這種不花腦筋的 控制進度方法,非加班這種武器不能對付。
  • Pull model:由生產部門依據客戶訂單來決定生產那些產品以及多少數量,工作是由生產線透過後製程(由客戶需求驅動)往前製程pull(拉)進來的,前製程只生產後製程所領取之相對數量的組件(半成品),不會自顧自地盲目大量生產並向後製程堆積組件。Pull model會限定每一個工作階段的WIP(work in progress,在途工作),藉此來觀察整個生產線的產出。知道生產線的產出速率之後,可以統計與預估不同工作的lead time(前置時間)。當客戶下訂單的時候,就可以告訴客戶,多久(前置時間)之後可以拿到產品。換個角度來看,如果一件產品的前置時間是10天,客戶最晚要在使用到這個產品的10天前就下訂單。

日常生活中有沒有哪些是屬於pull model的?有啊,訂披薩就是啊。製作完成一個披薩的時間約30分鐘,如果鄉民們想在周末晚上6點的時候在家裡邊吃披薩邊看電影,大概就要在5點20的時候訂好披薩,然後5點50到門市拿到披薩,10分鐘之內回到家剛好趕上看電影。

由於披薩是採用「下訂單才生產」,因此不會產生生產過量賣不出去的問題。相較於披薩,麵包店的麵包製作就屬於push model。由於push model是「預測生產」,所以可能會產生許多庫存或是缺貨(有些麵包賣不出去,有些則是銷售一空,想買只能等明天請早)。

***

螢幕截圖 2014-08-06 21.52.34

鄉民甲:聽你講一堆,Scrum或Kanban的需求還是從左邊推到右邊,怎麼看還是push model啊?

Teddy:需求是由左往右流動沒錯,但是要挑選哪一個需求的決策過程,「理論上」(理想上)是依據客戶的實際需求來決定(價值驅動,value-driven)。所以工作並非PM推給開發團隊,而是當開發團隊有空的時間,將下一個客戶最可能需要的需求,拉入生產線中。

鄉民甲:這樣解釋我可以接受。不過,軟體開發很多時候都不是客戶下訂單才生產,而是老闆或主管自己想像需求存在就生產挑眉質疑

Teddy:就算需求是「老闆自己想像出來的」,也要有輕重緩急之分,也就是「最有可能被客戶使用的需求」優先拉入開發。

Teddy:其實有些專案的性質,具有比較強烈的pull特性,例如維護專案,使用者回報bug或是要求增加報表、修改畫面的欄位等等。這樣的專案,就非常符合採用pull model的工作流程。有些專案性質,例如產品開發或是遊戲開發,使用者真正會「買單」的功能是哪些,其實團隊並不是那麼清楚。這時候採用pull model感覺好像就是單純的幫需求排定優先權(要遵守價值驅動原則,優先權還是要以對使用者最有價值的需求先做)。另外,不要忘了pull model還有一樣特性,就是限定WIP,所以可以保證開發團隊的成員不會超量工作(未達WIP上限才可以拉入工作)。這也是pull model和傳統push model很大的差別。

***

如果鄉民們採用Scrum或Kanban,但卻覺得工作不斷地被push進來,那就要注意,是否違反了原本pull model的運作模式,走火入魔變成了push model了。

***

友藏內心獨白:Push,pull,傻傻分不清楚。

沒有留言:

張貼留言