實(shí)踐敏捷、精益或DevOps的團(tuán)隊(duì),都在對(duì)工作中的痛點(diǎn)進(jìn)行“持續(xù)改進(jìn)”起宽。但在持續(xù)改進(jìn)中洲胖,會(huì)面臨兩個(gè)問題:
1)找不到起始點(diǎn)。放眼望去看到的全是問題坯沪,感覺沒有方向绿映;
2)啃不下硬骨頭:優(yōu)先選的點(diǎn)改進(jìn)成本太高,讓人望而卻步腐晾。
如果發(fā)現(xiàn)改進(jìn)起始點(diǎn)這塊“骨頭”太硬叉弦,你是不是想換一個(gè)“軟一點(diǎn)的柿子”,作為改進(jìn)的第一步藻糖?
如果按這個(gè)思路進(jìn)行改進(jìn)卸奉,那么成本高的改進(jìn)點(diǎn)是不是就一直沒有機(jī)會(huì)被改進(jìn)?這就解釋了為什么很多團(tuán)隊(duì)只做低成本的代碼層面的重構(gòu)颖御,但很少進(jìn)行軟件系統(tǒng)架構(gòu)和基礎(chǔ)設(shè)施這些成本高的改進(jìn)榄棵。
如果能發(fā)現(xiàn)“要害點(diǎn)”,作為優(yōu)先改進(jìn)的點(diǎn)潘拱,且有方法來“啃硬骨頭”疹鳄,那么就能讓持續(xù)改進(jìn)切中要害,成效更大芦岂。
要想達(dá)到這個(gè)目的瘪弓,首先要解決“找不到起始點(diǎn),啃不下硬骨頭”這兩個(gè)問題禽最。
先說解決方案腺怯,可以用“優(yōu)先改進(jìn)象限”來識(shí)別改進(jìn)的起始點(diǎn),用“敏捷階梯模型”來啃下硬骨頭川无。
優(yōu)先改進(jìn)象限呛占,有兩個(gè)坐標(biāo)軸,橫軸越往右懦趋,表示質(zhì)量越差晾虑;縱軸越往上,表示價(jià)值越大仅叫。改進(jìn)的起始點(diǎn)帜篇,應(yīng)該是價(jià)值最大,質(zhì)量最差的那個(gè)待改進(jìn)點(diǎn)诫咱。
敏捷階梯模型笙隙,表示團(tuán)隊(duì)在互信的基礎(chǔ)上,以消除“價(jià)值最大坎缭、質(zhì)量最差”這個(gè)最大瓶頸為愿景竟痰,“盡早签钩、頻繁、小批”地進(jìn)行PDCA(Plan/Do/Check/Adjust)迭代凯亮,一個(gè)迭代進(jìn)步一點(diǎn)地進(jìn)行改進(jìn)。
我創(chuàng)造“優(yōu)先改進(jìn)象限”哄尔,受了技術(shù)債墻的啟發(fā)假消。償還技術(shù)債也是在做持續(xù)改進(jìn),所以道理是相通的岭接。但技術(shù)債墻富拗,很容易被團(tuán)隊(duì)誤用。
在這個(gè)技術(shù)債墻四象限中鸣戴,右下角“投入少啃沪、見效多(止痛多)”的技術(shù)債優(yōu)先償還,而左上角“投入多窄锅、見效少(止痛少)“的技術(shù)債就不值得償還创千。
人人都愿意做“投入少,見效多”的事情入偷。但就如同繪制該圖的博客作者所說追驴,在他們回顧技術(shù)債時(shí),發(fā)現(xiàn)“投入少疏之、見效多(止痛多)”的技術(shù)債很少殿雪。作者的解釋是他們?cè)谌粘9ぷ髦校呀?jīng)順手把這類技術(shù)債給償還了锋爪,所以這是個(gè)好現(xiàn)象丙曙。
但好現(xiàn)象后面隱藏著危機(jī):對(duì)于右上角“投入多、見效多(止痛多)”的技術(shù)債其骄,該如何處理亏镰?那篇博客沒有提及。
這就是技術(shù)債墻四象限容易被誤用的地方:團(tuán)隊(duì)往往只關(guān)注“投入少拯爽、見效多”的技術(shù)債拆挥,而對(duì)“投入多、見效多”的則視而不見某抓。
那該如何償還“投入多纸兔、見效多”的債呢?比較好的做法否副,是將右上角“投入多汉矿、見效多”的大技術(shù)債,拆分成“投入少备禀,見效多”的小技術(shù)債洲拇,并移至右下角的象限奈揍,參考“敏捷階梯模型“,盡早赋续、頻繁男翰、小批地償還。
比如纽乱,一個(gè)團(tuán)隊(duì)在維護(hù)一個(gè)有10余年歷史的遺留系統(tǒng)蛾绎。該系統(tǒng)80%的業(yè)務(wù)邏輯都寫在了難以維護(hù)的PL/SQL里面,不僅很難閱讀鸦列、重構(gòu)和編寫單元測(cè)試租冠,其中還有大量的重復(fù)代碼。將PL/SQL中的業(yè)務(wù)邏輯薯嗤,改造成易于閱讀顽爹、重構(gòu)和編寫單元測(cè)試,就應(yīng)該屬于償還“投入多骆姐,見效多”的技術(shù)債镜粤。
由于該遺留系統(tǒng)80%的業(yè)務(wù)邏輯,都寫在PL/SQL里面了玻褪。要想在短期內(nèi)治理全部PL/SQL的業(yè)務(wù)邏輯難以維護(hù)的問題繁仁,是不可能的。但可以使用“優(yōu)先改進(jìn)象限”归园,先識(shí)別出價(jià)值最大的幾個(gè)業(yè)務(wù)邏輯黄虱,再從中識(shí)別出質(zhì)量最差(多次出現(xiàn)生產(chǎn)事故)的一個(gè)業(yè)務(wù)邏輯,做為改進(jìn)的第一步庸诱。然后就可以集中優(yōu)勢(shì)資源捻浦,集中治理這一個(gè)業(yè)務(wù)邏輯的維護(hù)性差的問題。比如可以考慮使用PL/SQL轉(zhuǎn)Java的工具桥爽,將業(yè)務(wù)邏輯轉(zhuǎn)移Java中朱灿,并編寫單元測(cè)試并重構(gòu)。如果能解決這個(gè)PL/SQL的業(yè)務(wù)邏輯難以維護(hù)的問題钠四,那么就能讓這個(gè)曾經(jīng)多次出現(xiàn)生產(chǎn)事故的“臟亂差”盗扒,變成易于維護(hù)且高價(jià)值的“首善之區(qū)”。這樣還能增強(qiáng)團(tuán)隊(duì)士氣缀去,促使大家識(shí)別下一個(gè)“價(jià)值最大侣灶、質(zhì)量最差”的改進(jìn)點(diǎn),從而形成正反饋循環(huán)缕碎。
除了技術(shù)債墻的啟發(fā)褥影,Jim Highsmith的敏捷三角,也啟發(fā)了我創(chuàng)造出“優(yōu)先改進(jìn)象限”咏雌。
既然敏捷三角告訴我們凡怎,敏捷團(tuán)隊(duì)工作的主要目標(biāo)校焦,應(yīng)該是價(jià)值和質(zhì)量,而不僅僅是“范圍统倒、時(shí)間寨典、成本”,那么當(dāng)進(jìn)行持續(xù)改進(jìn)時(shí)房匆,首先要改進(jìn)的點(diǎn)耸成,也自然是價(jià)值最大,且質(zhì)量最差的坛缕。因?yàn)橹挥羞@樣墓猎,才能更有效地達(dá)成追求”價(jià)值和質(zhì)量“的目標(biāo)捆昏。
除技術(shù)債墻之外赚楚,另一個(gè)常用的識(shí)別優(yōu)先改進(jìn)點(diǎn)的思路,是使用約束理論骗卜。即先繪制價(jià)值流圖宠页,標(biāo)上各道工序的增值時(shí)間、等待時(shí)間和返工時(shí)間寇仓,并據(jù)此識(shí)別系統(tǒng)中最大的瓶頸举户。之后優(yōu)先將這個(gè)最大的瓶頸“擴(kuò)容”。等“擴(kuò)容”后遍烦,再識(shí)別下一個(gè)最大的瓶頸俭嘁,循環(huán)往復(fù)。但在軟件開發(fā)相關(guān)的持續(xù)改進(jìn)中服猪,尤其是當(dāng)要治理一個(gè)大泥球系統(tǒng)時(shí)供填,經(jīng)常會(huì)面臨深陷“泥潭”的局面,哪里都有問題罢猪,難以找到最大的瓶頸近她。另外,如果團(tuán)隊(duì)使用大批量交付的瀑布式開發(fā)方式膳帕,那么就難以搜集和度量增值時(shí)間粘捎、等待時(shí)間和返工時(shí)間這些識(shí)別瓶頸的數(shù)據(jù),讓瓶頸識(shí)別難上加難危彩。
此時(shí)如果使用”優(yōu)先改進(jìn)象限“攒磨,那么識(shí)別出來的”價(jià)值最大、質(zhì)量最差“的改進(jìn)點(diǎn)汤徽,在大概率上是系統(tǒng)的最大瓶頸咧纠。這是因?yàn)椋眱r(jià)值最大“泻骤,意味著改進(jìn)點(diǎn)位于價(jià)值流的主干上漆羔;”質(zhì)量最差“梧奢,意味著返工最多(價(jià)值往回流,浪費(fèi)很驚人)演痒,可以視作價(jià)值流動(dòng)最大的瓶頸亲轨。所以,使用”優(yōu)先改進(jìn)象限“鸟顺,可以快速地找到系統(tǒng)的返工的巨大瓶頸惦蚊,有”投資少、見效快“的好處讯嫂。
“優(yōu)先改進(jìn)象限”該如何落地呢蹦锋?
可以召集團(tuán)隊(duì)所有成員,召開“優(yōu)先改進(jìn)工作坊“欧芽,一起繪制“優(yōu)先改進(jìn)象限”莉掂。
團(tuán)隊(duì)成員全員參與“優(yōu)先改進(jìn)工作坊“,一方面能提高優(yōu)先改進(jìn)點(diǎn)的識(shí)別準(zhǔn)確率千扔,另一方面能增強(qiáng)團(tuán)隊(duì)成員改進(jìn)的主動(dòng)性憎妙,有助于改進(jìn)的落地。
工作坊主持人可以參照下面的方法曲楚,來主持“優(yōu)先改進(jìn)工作坊”:
1)召集團(tuán)隊(duì)所有成員厘唾;
2)每人把痛點(diǎn)寫在便利貼上,每個(gè)便利貼只寫一個(gè)痛點(diǎn)龙誊,貼到白板上抚垃,合并相同的點(diǎn),然后分類趟大;
3)先按價(jià)值大小鹤树,上下排序(可以眾人排隊(duì),每人一次只能移動(dòng)一個(gè)改進(jìn)點(diǎn)的上下順序护昧,輪流進(jìn)行魂迄,直到不再有改進(jìn)點(diǎn)的移動(dòng));
3)再按質(zhì)量?jī)?yōu)劣惋耙,左右排序(可以眾人排隊(duì)捣炬,每人一次只能移動(dòng)一個(gè)改進(jìn)點(diǎn)的左右順序,輪流進(jìn)行绽榛,直到不再有改進(jìn)點(diǎn)的移動(dòng))湿酸;
4)右上角的痛點(diǎn),就是優(yōu)先改進(jìn)點(diǎn)灭美;
5)大家討論推溃,如何用敏捷階梯模型,盡早届腐、頻繁铁坎、小批地改進(jìn)剛剛識(shí)別出的“優(yōu)先改進(jìn)點(diǎn)”蜂奸;
6)定期舉辦優(yōu)先改進(jìn)工作坊,重復(fù)上述過程
總結(jié)一下硬萍,團(tuán)隊(duì)在進(jìn)行持續(xù)改進(jìn)時(shí)扩所,往往有兩個(gè)痛點(diǎn):找不到起始點(diǎn),啃不下硬骨頭朴乖。約束理論在團(tuán)隊(duì)進(jìn)行瀑布式大批量交付的情況下祖屏,難以識(shí)別最大的瓶頸,這樣就難以找到最佳的優(yōu)先改進(jìn)點(diǎn)买羞。技術(shù)債墻雖然能識(shí)別“投入少袁勺、見效多”的優(yōu)先改進(jìn)點(diǎn),但很容易被誤用畜普,因?yàn)榇蠹彝弧蹦筌浭磷印捌诜幔弧笨杏补穷^“。此時(shí)漠嵌,團(tuán)隊(duì)可以在”優(yōu)先改進(jìn)工作坊“中咐汞,一起繪制”優(yōu)先改進(jìn)象限“盖呼,識(shí)別”價(jià)值最大儒鹿、質(zhì)量最差“的改進(jìn)點(diǎn)作為起始點(diǎn),然后參考敏捷階梯模型几晤,“盡早约炎、頻繁、小批”地”啃下這塊硬骨頭”蟹瘾,并循環(huán)往復(fù)圾浅,形成正反饋循環(huán),最終讓每個(gè)迭代的持續(xù)改進(jìn)憾朴,都切中要害狸捕,并收獲更大成效。