明白了價值和浪費(fèi)的概念,但改進(jìn)應(yīng)從何處入手?畢竟一個工廠里有太多的事情。父親的辦法是先從成品處開始觀察,因?yàn)槌善犯嬖V了我們有多少產(chǎn)品流出這個車間,然后沿價值流逆向回溯,以發(fā)現(xiàn)瓶頸所在。這里的價值流指一個產(chǎn)品從概念到實(shí)際生產(chǎn)、從訂單到交付的過程中所需要的全部活動,包括了增加價值的活動,也包括不增加價值的活動。沿價值流回溯時,經(jīng)常能觀察到瓶頸,瓶頸是整個加工過程中一個緩慢的步驟,因?yàn)樗荒軌驖M足下游工位的需要,所以在制品會在那里堆積,瓶頸是不能增加價值的一個標(biāo)志。注意,這里父親的操作與日常思維習(xí)慣相反,我們一般是習(xí)慣順價值流從上往下去考慮問題,先進(jìn)行需求分析、然后是設(shè)計(jì)編碼、再是測試、最后是版本構(gòu)建發(fā)布,而精益分析則先從版本構(gòu)建發(fā)布開始觀察問題,因?yàn)橹挥袠?gòu)建完交付給用戶的軟件功能塊才真正是產(chǎn)生價值的地方。
逆價值流觀察完整個工廠后,父親請菲爾做出選擇,請他決定改進(jìn)從何處開始。菲爾的痛點(diǎn)在于"最主要的問題就是及時把STR型號的訂單生產(chǎn)出來,為此我們需要把每周50件的產(chǎn)量擴(kuò)充到100件”,由于一套STR設(shè)備需要四件斷路器,也就是說他現(xiàn)在最希望的是工廠的斷路器生產(chǎn)能力能由每天40個擴(kuò)大到每天80個。雖然父親已經(jīng)看到工廠中需要改變的東西很多,但他認(rèn)同改變一定要從某個點(diǎn)開始,所以,他必須在菲爾下定決心,選擇這個切入點(diǎn)后,再從此處開啟改進(jìn)之旅。這個問題,在我們今年的敏捷推進(jìn)過程中也遇到了,任何改進(jìn)最怕的是一把抓,如果能集中力量從一個點(diǎn)出發(fā),效果要好很多。但是現(xiàn)實(shí)中我們總是遇到想改進(jìn)的東西太多,但資源又極為有限,不同人理解的敏捷及目標(biāo)也不一致,結(jié)果稍不注意就發(fā)現(xiàn)實(shí)際操作中坑挖了不少,但離真正達(dá)成突破還有很遠(yuǎn)距離,這是值得我們深刻反思的。
菲爾選中改進(jìn)點(diǎn)后,父親告訴他,如果想賣更多的STR型產(chǎn)品又不增加固定成本的話, 需要通過提高質(zhì)量、降低庫存、縮短生產(chǎn)周期來提高生產(chǎn)率,也就是說,重點(diǎn)是三個目標(biāo)數(shù)字:質(zhì)量目標(biāo)、庫存目標(biāo)(先考慮在制品庫存)、生產(chǎn)率目標(biāo)(斷路器個數(shù)/人/天):
質(zhì)量目標(biāo)關(guān)注生產(chǎn)線上的廢品率,比起在客戶那里發(fā)現(xiàn)的不合格產(chǎn)品數(shù),生產(chǎn)過程中出現(xiàn)多少不合格品的數(shù)量更有價值,畢竟越靠近成品的下游工位發(fā)現(xiàn)不合格品,付出的代價越大。在這個問題上,追求的目標(biāo)是零缺陷。這要求生產(chǎn)線上的每一個工人都先被訓(xùn)練能識別上一個工位傳下來的不合格品,如果發(fā)現(xiàn)了就拒絕接受。為此,需要有將質(zhì)量建立在系統(tǒng)內(nèi)部的思想,保證當(dāng)一個不合格品被發(fā)現(xiàn)的時候,不管是什么原因,流水線一定要盡早停下來調(diào)查。這個目標(biāo)如果映射到軟件企業(yè)中,那就是,比起泄露故障,我們更要關(guān)注軟件開發(fā)過程中內(nèi)部發(fā)現(xiàn)的故障,而且要把質(zhì)量意識建立在整個開發(fā)過程中,而不僅僅是測試處。為了提早發(fā)現(xiàn)故障,我們需要有持續(xù)集成(CI)系統(tǒng),并且把該系統(tǒng)和代碼審查、各級自動化測試工具連起來,并且要有嚴(yán)格的CI紀(jì)律,一旦CI失敗,要禁止所有人再簽入代碼,直到問題解決(此規(guī)定是為了避免一些深層次問題被掩蓋,后面章節(jié)會提到)。
生產(chǎn)率目標(biāo)關(guān)注每個工人每天能生產(chǎn)多少件成品。為提高這個值,需要盡量降低生產(chǎn)周期。這里的生產(chǎn)周期指一件產(chǎn)品從生產(chǎn)開始到生產(chǎn)結(jié)束(交付出去)所需要花的時間,計(jì)算公式為“周期 = 全部在制品庫存 / 生產(chǎn)率”.比如,菲爾的工廠中發(fā)現(xiàn)生產(chǎn)線上有147個完成的和未完成的斷路器庫存,而工廠每天大約生產(chǎn)40個斷路器,那么裝配每一個斷路器大概需要的3.7天,也即大約30個工作小時。這和單個斷路器的裝配時間(約45分鐘)相比,價值增加比率極為低下。最理想的情況下,整個生產(chǎn)以單件流方式進(jìn)行,才可能得到最短的生產(chǎn)周期。比如:一個完整的斷路器裝配需要45分鐘,現(xiàn)在把裝配工作分給生產(chǎn)線上的6個工人依序完成,假如每個人工作的任務(wù)劃分比較均衡,則每個工人的加工時間為8分鐘。在按單件流方式生產(chǎn)時,每個工人一次只處理一個零件,那么單個斷路器的裝配周期就是45分鐘;但如果每個工人都是成組的干手上的活,每組包括5個零件,那么在一個工人每次加工1個零件時,其余4個零件會處于等待狀態(tài),也即每個工人需要花5*8=40分鐘才會把這批零件交到下一個人手上,這樣最終下來,每個斷路器的實(shí)際裝配周期將變成40*6=240分鐘。這點(diǎn)在軟件開發(fā)上的意義和制造業(yè)是一樣的,理想情況下,最好也是單件流,同一時候,每個人手里只做一件事,但軟件開發(fā)中單件流的威力要發(fā)揮,需要解決版本發(fā)布問題(版本發(fā)布類似于一次交付一組貨物),只有做到持續(xù)交付,才能形成最短的生產(chǎn)周期(后文章節(jié)還會提到)。曾經(jīng)我統(tǒng)計(jì)過一段時間團(tuán)隊(duì)需求的生產(chǎn)周期,結(jié)果發(fā)現(xiàn),如果以需求規(guī)劃開始算,到新功能版本發(fā)布為生產(chǎn)周期,開發(fā)人員投入時間是以3至5天算,而開發(fā)周期則是以1至2月算;如果以用戶需求提交開始算起點(diǎn),到新功能版本正式發(fā)布為生產(chǎn)周期,則周期更是長達(dá)1至6月。這正是為什么開發(fā)團(tuán)隊(duì)覺得自己已經(jīng)很賣力,而外面總覺得這邊交付速度太慢,兩種感覺差異的由來。這個現(xiàn)象在大衛(wèi)安德森《看板方法》一書開頭舉的那個微軟案例中也有提及。對此問題的解決,目前我們更多是采用特殊補(bǔ)丁方式,即對于外面很緊急的功能,特別安排臨時補(bǔ)丁,開發(fā)一完成后,就立即通過補(bǔ)丁方式外發(fā),以縮短周期,但是,補(bǔ)丁安排畢竟只是應(yīng)急流程,當(dāng)應(yīng)急流程成為常態(tài),也會對正常的開發(fā)流程產(chǎn)生沖擊,所以,如何探尋更好的解決辦法,很值得我們研究。
庫存目標(biāo)雖然從長遠(yuǎn)看,是是要降低所有庫存,但前期來說,更關(guān)注在制品庫存的降低。在制品庫存多,至少暗示了如下幾個問題。一者,在制品多意味著更長的周期時間,這點(diǎn)前文已通過周期公式和單件流案例加以說明,不再贅敘。二者,在制品多,說明作業(yè)流程不平衡,我們需要做的是盡量消除這種不平衡,而不是認(rèn)可這種不平衡,而任由庫存增加。比如,A和B兩個工位,A在B的上游,A每小時生產(chǎn)10個零件,B每小時使用5個零件,則A和B的工作之間存在不平衡,如果我們不去設(shè)法消除這個不平衡,當(dāng)A和B都全力工作時,在制品庫存就會在A處堆積起來。這點(diǎn)在軟件開發(fā)中的常見案例為,比如A是開發(fā),B是測試,由于軟件團(tuán)隊(duì)中往往是開發(fā)人數(shù)遠(yuǎn)大于測試人數(shù),于是測試經(jīng)常來不及測試開發(fā)完成的功能,這時候如果置之不理,則導(dǎo)致大量開發(fā)完畢的功能無法對外發(fā)布;如果放任未測試過的功能對外發(fā)布,就是降低了質(zhì)量目標(biāo),將來會付出更大的代價。所以,這時候合理的做法就是讓開發(fā)介入測試工作,以消除不平衡,而不能放任開發(fā)對測試不管不顧,又去忙著領(lǐng)新需求。三者,在制品庫存多,還意味著存在質(zhì)量風(fēng)險,因?yàn)樘鄮齑娲嬖?,?dāng)后面工位工人發(fā)現(xiàn)問題時,很難判斷是什么原因?qū)е逻@個問題。這就好比開發(fā)一個功能馬上測試一個功能(或者CI系統(tǒng)在開發(fā)人員小步提交代碼后立即觸發(fā)檢查),這時候發(fā)現(xiàn)的問題就很好定位,因?yàn)榇嬖趩栴}風(fēng)險的代碼量很少,定位原因也快。如果等到開發(fā)都做了十幾個功能后再進(jìn)行測試(或者CI兩次檢查間已經(jīng)有成百上千行代碼提交—對應(yīng)CI運(yùn)行速度太低或者開發(fā)不習(xí)慣原子提交,而是累積大量代碼后再一次提交),問題的定位和原因檢查代價就大多了。
目標(biāo)方向制定后,就要考慮具體的細(xì)化,后面,父親將從節(jié)拍時間入手引導(dǎo)菲爾的工廠進(jìn)行深入改善探索,這些將在下一篇讀書筆記中繼續(xù)探討。
大家可能會問,成本為什么不是目標(biāo)?父親的回答是,在憂慮成本之前,應(yīng)先找到賺錢的方式。首先需要控制交貨期(因?yàn)榭蛻魸M意永遠(yuǎn)是第一位要求),在保證交貨的前提下再開始減少庫存。在庫存能控制時才開始處理成本問題。處理成本時一定要搞清楚哪些成本可以節(jié)約,哪些不能碰。畢竟我們要做的是節(jié)約成本,而不是削減成本。這一點(diǎn)在制約法理論(TOC)經(jīng)典的《目標(biāo)》一書中也有過類似提法,在成本的世界和有效產(chǎn)出的世界中,改善所追求的應(yīng)該是有效產(chǎn)出上升,而不是單純的降低成本。這個話題說來話長,這里就不繼續(xù)分析了。