如何度量研发效能?
沒有可靠的度量就無法有效的改進(jìn),高度數(shù)字化的軟件研發(fā)領(lǐng)域一直是進(jìn)行各類效能度量嘗試的創(chuàng)新重地。
阿里云·云效服務(wù)的內(nèi)部版本“Aone”承載著阿里集團(tuán)數(shù)百個(gè)BU協(xié)同研發(fā)和持續(xù)交付的職責(zé),筆者在數(shù)月前短暫的參與了該平臺(tái)的效能透視鏡板塊建設(shè),因而得以從平臺(tái)的“上帝視角”重新審視效能度量這件事,隨著項(xiàng)目開展,略微摸索了些門道。此文中觀點(diǎn)源于這段時(shí)間里筆者在團(tuán)隊(duì)內(nèi)以及與周邊相關(guān)團(tuán)隊(duì)的討論和個(gè)人思考,且作拋磚引玉之用。
度量的分類
度量的分類方式有很多,其中比較有意思的一種角度,是根據(jù)目標(biāo)意圖將度量劃分為“針對(duì)人的度量”和“針對(duì)事的度量”。
任何協(xié)作系統(tǒng)都離不開人的參與,加之可與績效、考核等事情牽上關(guān)系,即使相關(guān)指標(biāo)的分析往往伴隨著爭議,針對(duì)人的度量在企業(yè)里有時(shí)依然被視為一種“剛需”。譬如“代碼量”、“代碼質(zhì)量”、“工作時(shí)長”等數(shù)據(jù)評(píng)判都是常見的依據(jù)指標(biāo)。從產(chǎn)品實(shí)現(xiàn)而言,由于對(duì)結(jié)果可解釋性要求高,這類度量的單因素指標(biāo)居多,計(jì)算方案通常不會(huì)太復(fù)雜,宜采用小范圍同維度橫向比較,防止過度泛化。
相比之下,針對(duì)事度量的范疇和方法更加靈活。既包括簡單的數(shù)值指標(biāo),譬如產(chǎn)研中的發(fā)布頻率、需求交付時(shí)長;也包括需要對(duì)比分析的多元指標(biāo),譬如需求在各階段的停留時(shí)長、缺陷在各環(huán)境的漏測率等。在就事論事的基礎(chǔ)上,為了更全面的理解事實(shí)的客觀規(guī)律,還經(jīng)常需要將一組數(shù)據(jù)向上聚合(譬如整個(gè)部門、整個(gè)項(xiàng)目的情況)或者跨領(lǐng)域關(guān)聯(lián)(譬如業(yè)務(wù)領(lǐng)域需求關(guān)聯(lián)到相關(guān)代碼提交情況),從而獲得更寬的觀察視角。由于涉及的度量主體更多,有時(shí)為了確定哪個(gè)主體是主要的影響因素,還需要進(jìn)行額外的歸因判定。相較于以人為目標(biāo)的度量,對(duì)事進(jìn)行度量時(shí),可以包含更多的經(jīng)驗(yàn)和推理因素。
對(duì)人或?qū)κ轮饕轻槍?duì)度量目的而言,在實(shí)際運(yùn)用時(shí),兩者采用的具體指標(biāo)會(huì)有許多共同之處,并不能一概而論。根據(jù)管理學(xué)中的“平衡計(jì)分卡(The Balanced ScoreCard)”理論,度量活動(dòng)要遵循“目標(biāo)-度量-指標(biāo)-行動(dòng)”的規(guī)則,指標(biāo)最終服務(wù)于目標(biāo)的達(dá)成,好的度量產(chǎn)品不僅應(yīng)當(dāng)反映“發(fā)生了什么”,還應(yīng)當(dāng)能根據(jù)目標(biāo)提供“該怎么做”的輔助建議。因此度量類產(chǎn)品的成敗,不僅是對(duì)指標(biāo)設(shè)計(jì)者的領(lǐng)域理解、抽象能力的挑戰(zhàn),而且對(duì)產(chǎn)品自身的業(yè)務(wù)目標(biāo)清晰度也會(huì)提出很高的要求。
效能的本質(zhì)
歸根究底而言,效能的本質(zhì)是對(duì)價(jià)值流動(dòng)速度和質(zhì)量的評(píng)價(jià)。
“價(jià)值流”的概念伴隨著精益思想的傳播,被越來越多行業(yè)所接納。不過很少有其他哪個(gè)行業(yè)能夠像軟件研發(fā)行業(yè)這樣,能夠讓價(jià)值交付的各個(gè)環(huán)節(jié)幾乎完全在線數(shù)字化,從而提供大量可分析的過程數(shù)據(jù)樣本。
所謂價(jià)值流動(dòng)過程可以表示為,“價(jià)值原料”在可被度量的價(jià)值加工活動(dòng)之間有序傳遞,不斷疊加價(jià)值增量,最終形成可被消費(fèi)的“價(jià)值產(chǎn)物”。下圖將這一過程的度量抽象為一種非常簡潔的表示結(jié)構(gòu),可稱為效能度量的“元模型”。
度量中所用的各類“領(lǐng)域特征”則是由在此元模型之上的領(lǐng)域?qū)ο?#xff0c;以及基于這些對(duì)象的“領(lǐng)域指標(biāo)”來定義的。
譬如在研發(fā)領(lǐng)域,“價(jià)值原料”可以是一個(gè)業(yè)務(wù)方的需求,或是一個(gè)開發(fā)者突發(fā)奇想的創(chuàng)意。可被度量的活動(dòng)包括需求拆解、任務(wù)指派、代碼編寫、測試、部署、驗(yàn)證、發(fā)布等等。每個(gè)活動(dòng)本身都具有可被觀測的屬性,實(shí)體之間也具有可被量化的關(guān)系。這些實(shí)體、屬性、關(guān)系就組成了特定領(lǐng)域的模型,下圖展示了一種簡化的研發(fā)度量領(lǐng)域模型(為了美觀省略掉很多實(shí)體關(guān)系連接,僅作示意)。
有了領(lǐng)域模型,就可以基于規(guī)則制定指標(biāo)。指標(biāo)通常被描述為各種量化特征和實(shí)體屬性的數(shù)值計(jì)算。有些指標(biāo)是領(lǐng)域無關(guān)的,譬如端到端流通時(shí)長;有些指標(biāo)是多個(gè)領(lǐng)域之間可以復(fù)用的,譬如許多行業(yè)都會(huì)有單位時(shí)間任務(wù)吞吐量、任務(wù)按時(shí)完成率這樣的指標(biāo);有些指標(biāo)是領(lǐng)域特有的,譬如研發(fā)領(lǐng)域的千行代碼缺陷率等等。
在指標(biāo)之上,還需要有與具體運(yùn)用場景相匹配的工具或平臺(tái)來將度量結(jié)果轉(zhuǎn)換為便于觀察分析的表現(xiàn)形式。譬如各種圖表、報(bào)表,以及事件通知。
元模型和領(lǐng)域?qū)ο蟮姆蛛x,似乎能夠形成一種足夠抽象的通用度量產(chǎn)品,通過領(lǐng)域相關(guān)的指標(biāo)規(guī)則、展示規(guī)則、通知告警規(guī)則,快速適配不同目標(biāo)和場景,然而現(xiàn)實(shí)情況其實(shí)更復(fù)雜。一方面受制于計(jì)算能力,有些指標(biāo)實(shí)際無法根據(jù)模型+規(guī)則實(shí)時(shí)計(jì)算出來,必須單獨(dú)預(yù)先算好,以空間換時(shí)間。另一方面受限于價(jià)值增值過程的可觀測性,并非所有行為的結(jié)果都能立即被簡單量化(否則說服人們堅(jiān)持鍛煉身體就容易多了),即使在高度數(shù)字化的軟件研發(fā)領(lǐng)域,依然存在數(shù)據(jù)質(zhì)量和時(shí)效性問題,在使用數(shù)據(jù)時(shí)需要加以考慮。因此各種效能的場景雖然具有十分相似的流動(dòng)特征,實(shí)際產(chǎn)品依然會(huì)不可避免的根據(jù)業(yè)務(wù)定制化,萬能的度量工具或公式是不存在的。
模型的存儲(chǔ)
對(duì)于度量模型的存儲(chǔ),圖數(shù)據(jù)庫可能是最好的選擇,沒有之一。
相比結(jié)構(gòu)化的SQL數(shù)據(jù)庫和文檔型的NoSQL數(shù)據(jù)庫,圖數(shù)據(jù)庫屬于比較小眾的一種偏門奇術(shù),主要用在知識(shí)圖譜和基于關(guān)系的信息搜索領(lǐng)域。從基本特征而言,圖數(shù)據(jù)庫通常具備NoSQL的非結(jié)構(gòu)化KV存儲(chǔ)能力,允許同一類實(shí)體具有不同屬性項(xiàng)的實(shí)例,這對(duì)于處理來自多種數(shù)據(jù)源或多個(gè)子類型的實(shí)體信息帶來很大便利。同時(shí),圖數(shù)據(jù)庫通常能像SQL數(shù)據(jù)庫那樣支持事務(wù)和多實(shí)體關(guān)聯(lián)查詢。不僅如此,圖數(shù)據(jù)庫對(duì)復(fù)雜關(guān)系的檢索性能遠(yuǎn)高于SQL數(shù)據(jù)庫,對(duì)于判斷、循環(huán)查詢的支持也比SQL存儲(chǔ)過程更加優(yōu)雅。
然而這些基礎(chǔ)能力上的差異,并非我推薦將圖數(shù)據(jù)庫用于效能度量的主要原因。
好的技術(shù)選型應(yīng)該能夠充分適應(yīng)潛在的業(yè)務(wù)需求變動(dòng),避免過早將技術(shù)實(shí)現(xiàn)耦合到局部的應(yīng)用場景。在基于SQL表的開發(fā)模式里,“表結(jié)構(gòu)設(shè)計(jì)”是在軟件詳細(xì)設(shè)計(jì)階段里非常重要的一個(gè)環(huán)節(jié),因?yàn)樗粌H是對(duì)整體業(yè)務(wù)領(lǐng)域的建模,還關(guān)系著未來數(shù)據(jù)查詢的效率和便利性。熟悉SQL表設(shè)計(jì)的同學(xué)應(yīng)該知道,1對(duì)1、1對(duì)N、N對(duì)N關(guān)系,數(shù)據(jù)表的處理方法是完全不同的:N對(duì)N關(guān)系需要額外設(shè)計(jì)關(guān)聯(lián)表,1對(duì)N關(guān)系通常是在后者的實(shí)體上設(shè)計(jì)外鍵,而1對(duì)1關(guān)系的外鍵設(shè)計(jì)就更有講究了,要根據(jù)實(shí)際場景來決定該在哪個(gè)實(shí)體上放另一者的外鍵,然后在使用的時(shí)候順著這個(gè)關(guān)聯(lián)方向來查詢。對(duì)于聚合的設(shè)計(jì)也是如此,需要事先在被聚合表上提前設(shè)計(jì)好用于聚合的外鍵,因此會(huì)有“事實(shí)表”、“維度表”的區(qū)分。數(shù)據(jù)的查詢規(guī)則,在數(shù)據(jù)庫表結(jié)構(gòu)設(shè)定的時(shí)候就被確定下來了。
對(duì)業(yè)務(wù)模式比較固定的場景而言,提前考慮好數(shù)據(jù)的使用方法并做針對(duì)性優(yōu)化顯得合情合理,然而效能度量業(yè)務(wù)并不屬于此類。在度量領(lǐng)域里,關(guān)聯(lián)、級(jí)聯(lián)、聚合都是十分常見的指標(biāo)計(jì)算操作,由于指標(biāo)的作用在于發(fā)現(xiàn)潛藏于表面之下的問題,事先不應(yīng)當(dāng)提前規(guī)定只能從哪一類實(shí)體作為關(guān)聯(lián)查詢的起點(diǎn),或者必須以哪些維度做聚合觀察。
就圖數(shù)據(jù)庫的存儲(chǔ)模型來說,所有業(yè)務(wù)實(shí)體都是平等的,任何類型的關(guān)系都由實(shí)體間的關(guān)聯(lián)來表示。這就像是在SQL表設(shè)計(jì)時(shí),不論是1對(duì)1還是N對(duì)N關(guān)系,總是額外增加一張關(guān)聯(lián)表,卻無需顧慮多表JOIN帶來的性能影響。這樣一來,相當(dāng)于將查詢和聚合方式的決策推遲到實(shí)際使用的時(shí)候再做,從而有效解耦建模和查詢時(shí)的相互制約,不再需要為優(yōu)化查詢而返工改表。
此外,由于關(guān)聯(lián)直接建立于實(shí)體之間,當(dāng)刪除實(shí)體的時(shí)候,實(shí)體間的關(guān)聯(lián)也將自動(dòng)斷開。這就像有垃圾回收機(jī)制的Java語言不用自己管理內(nèi)存指針一樣。圖數(shù)據(jù)庫絕不會(huì)產(chǎn)生由于關(guān)系修改時(shí)的不對(duì)稱清除而導(dǎo)致的數(shù)據(jù)不一致情況。
那圖數(shù)據(jù)庫會(huì)不會(huì)有坑?肯定有。不過在我們目前有限的探索里,遇到比較大的麻煩主要來自它不夠完善的周邊工具配套、阿里云圖數(shù)據(jù)庫服務(wù)的某些配置限制,以及市場上稀缺具備相關(guān)技能的專業(yè)工程師。
專家經(jīng)驗(yàn)
在研發(fā)效能領(lǐng)域,度量的終極目標(biāo)是DevOps文化所提倡的識(shí)別和消除系統(tǒng)性瓶頸。
通過各式各樣的過程數(shù)據(jù),經(jīng)驗(yàn)豐富的項(xiàng)目經(jīng)理和管理教練往往能夠準(zhǔn)確判斷出項(xiàng)目的潛在問題和交付風(fēng)險(xiǎn)。
在經(jīng)濟(jì)學(xué)領(lǐng)域有個(gè)十分有趣的“古德哈特定律”,即“當(dāng)決策者試圖以一個(gè)事物的客觀測度指標(biāo)作為指針來施行政策時(shí),這一指標(biāo)就再也不能有效測度事物了”。
然而效能度量并不是玄學(xué),價(jià)值生產(chǎn)活動(dòng)中的風(fēng)險(xiǎn)應(yīng)當(dāng)是有章可循的。古德哈特式的此消彼長現(xiàn)象其實(shí)來源于經(jīng)濟(jì)領(lǐng)域的范圍太過寬廣,任何實(shí)用指標(biāo)往往只能是局部度量的結(jié)果。效能透視鏡產(chǎn)品的提出者嵩華老師曾經(jīng)分享過一種識(shí)別研發(fā)項(xiàng)目系統(tǒng)性風(fēng)險(xiǎn)的思路,即有的放矢的關(guān)注四種典型的全局現(xiàn)象:
- 流動(dòng)阻滯
- 返工
- 落后的工程能力
- 技術(shù)債務(wù)
這幾種現(xiàn)象不太容易在局部進(jìn)行遮掩,且在一定條件下能夠相互疊加,成為“爛項(xiàng)目”的標(biāo)配。
透過整個(gè)研發(fā)過程中的種種現(xiàn)象,找到反映這些全局性問題的蛛絲馬跡,不僅能在一定程度上讓“專家經(jīng)驗(yàn)”產(chǎn)品化、標(biāo)準(zhǔn)化,也有助于將效能數(shù)據(jù)的使用方法從當(dāng)前普遍的“事后復(fù)盤”式向以全局流動(dòng)速率和質(zhì)量作為關(guān)注點(diǎn)的“風(fēng)險(xiǎn)管控”式發(fā)展,從而在可靠性和時(shí)效性兩個(gè)方面都得到提升。
總結(jié)
數(shù)據(jù)不會(huì)騙人,但數(shù)據(jù)的呈現(xiàn)和解讀依然有很大的空間值得探索。現(xiàn)實(shí)事物復(fù)雜而多面,度量正是為描述和對(duì)比這些具象事實(shí)而采取的抽象和量化措施,從某種意義上來說,度量的結(jié)果一定是片面的,反映部分事實(shí)。沒有銀彈,也沒有完美的效能度量。
對(duì)于企業(yè)研發(fā)效能的提升,開發(fā)者工具、效能方法理論、效能度量指標(biāo)都是缺一不可、環(huán)環(huán)相扣的幾個(gè)重要板塊,相信隨著數(shù)據(jù)價(jià)值被越來越多的挖掘,我們終將實(shí)現(xiàn)更有效的反饋和更精確的賦能,讓研發(fā)協(xié)作真正變得透明、簡單、高效。
最后
分享十條前人總結(jié)的經(jīng)驗(yàn)觀點(diǎn)。
- 任何指標(biāo)一旦用于管控,就不再可靠(古德哈特定律)。
- 測量的對(duì)象與人越近,越不可靠。
- “凡可度量,皆可改造”是錯(cuò)的。
- 變化趨勢的價(jià)值高于指標(biāo)絕對(duì)值。
- 選擇適當(dāng)?shù)亩恰皹?biāo)準(zhǔn)的”指標(biāo),若發(fā)現(xiàn)指標(biāo)沒用,果斷舍棄。
- 務(wù)必了解指標(biāo)的獲取成本,明確指標(biāo)意圖和針對(duì)的企業(yè)目標(biāo)。
- 設(shè)計(jì)“北極星指標(biāo)”,指標(biāo)數(shù)量越多,邊際收益遞減。
- 不要將指標(biāo)對(duì)所有人透明。
- 讓一線人員參與指標(biāo)制定。
- 如果可能,合理縮短度量周期。
原文鏈接:https://developer.aliyun.com/article/773021?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
- 上一篇: 深耕边缘计算 揭秘阿里云边缘云网一体化
- 下一篇: 不四:产品工程师的修炼之路