Google改進(jìn)過程:
本文案例源自:《Measuring Engineering Productivity》
作者:Ciera Jaspen,Google
文章來源:Tech For Fun / 原文鏈接
隨著敏捷開發(fā)、DevOps等方法論在軟件行業(yè)持續(xù)運(yùn)用,各種用來提升組織研發(fā)效率和產(chǎn)品質(zhì)量的實(shí)踐層出不窮,如何有效度量評(píng)估這些實(shí)踐帶來的改進(jìn)和提升則成為一個(gè)重要的課題。建立一套完備的度量指標(biāo)體系看似是解決這個(gè)問題的第一步。當(dāng)然有不少知名企業(yè)已經(jīng)率先完成這一步,比如:阿里研發(fā)效能體系[1]等。研發(fā)效能度量體系發(fā)展到今天看似即將抵達(dá)終點(diǎn)。但是這些指標(biāo)體系有以下兩個(gè)問題:
1、指標(biāo)過于宏觀,影響因素過多。實(shí)踐則相對(duì)比較微觀,直接使用這些宏觀指標(biāo)對(duì)于具體實(shí)踐所單獨(dú)起到的作用說不清,容易出現(xiàn)只要指標(biāo)提升就萬事大吉的現(xiàn)象。2、只描述了What,沒介紹How。這個(gè)是二手知識(shí)的通病,我們需要對(duì)舶來品進(jìn)一步消化和理解,形成原則性指導(dǎo)共識(shí)。
Google作為當(dāng)代最為成功的數(shù)據(jù)驅(qū)動(dòng)公司,我們來看看它的度量指標(biāo)和具體實(shí)踐是如何結(jié)合開展實(shí)施的。
從團(tuán)隊(duì)組成、度量是否必要、如何開展度量三個(gè)部分來介紹Google的度量實(shí)踐。
首先從組織層面說起,Google創(chuàng)建了一個(gè)專門研究工程效率的研究團(tuán)隊(duì),這和大多數(shù)做DevOps的組織類似。但Google的特色在于其團(tuán)隊(duì)的多樣性:不但有軟件工程專家、資深研發(fā)大神,還擁有社會(huì)科學(xué)家,其中包括認(rèn)知心理學(xué)和行為經(jīng)濟(jì)學(xué)。整個(gè)團(tuán)隊(duì)即可研究軟件研發(fā)過程,也研究人性化方面,包括個(gè)人動(dòng)機(jī),激勵(lì)結(jié)構(gòu)和管理復(fù)雜任務(wù)的策略。團(tuán)隊(duì)的目標(biāo)是采用數(shù)據(jù)驅(qū)動(dòng)的方法來衡量和提高工程效率。
不能為了度量而度量
在Google進(jìn)行度量有一個(gè)前提:必須先回答下面的系列問題:期待獲得什么樣改進(jìn)結(jié)果及原因?如果得到預(yù)期或非預(yù)期結(jié)果,將采取什么措施?誰將決定對(duì)結(jié)果采取行動(dòng),什么時(shí)候會(huì)采取行動(dòng)?運(yùn)用這些問題與研發(fā)團(tuán)隊(duì)交流,將會(huì)發(fā)現(xiàn)很多情況下,度量根本是不值得的:僅僅對(duì)度量結(jié)果感興趣,沒有后續(xù)措施的話,改進(jìn)效果會(huì)大打折扣。
另外確保進(jìn)行度量的人有權(quán)采取行動(dòng)也很重要。需要了解決策者是誰,可能需要在有限的時(shí)間內(nèi)為決策者提供他們所需的數(shù)據(jù),在這種情況下,最好迎合決策者偏好。可以考慮以下問題:他們會(huì)認(rèn)同從訪談中獲取的情況來做出決策嗎?他們是否信任訪談中的調(diào)查?他們信任調(diào)查結(jié)果或記錄數(shù)據(jù)嗎?他們對(duì)復(fù)雜的統(tǒng)計(jì)分析感到滿意嗎?如果決策者原則上不相信結(jié)果的形式,那么度量也就失去了意義。
在Google,使用目標(biāo)/信號(hào)/指標(biāo)(GSM)框架來指導(dǎo)目標(biāo)導(dǎo)向型指標(biāo)的創(chuàng)建。(Google UX領(lǐng)域的HEART模型[2]也是基于該框架)
目標(biāo)是期望的最終結(jié)果。 它是根據(jù)從更高層次上理解的內(nèi)容來表達(dá)的,不應(yīng)包含具體的衡量方法的參考。
信號(hào)是目標(biāo)達(dá)成與否的結(jié)果。 信號(hào)本身也可能無法測(cè)量。
指標(biāo)是信號(hào)的代理。 代理的含義是指由于信號(hào)本身可能無法量化,因此需要通過指標(biāo)來代理信號(hào)的量化。指標(biāo)是一定可度量的內(nèi)容。但指標(biāo)可能不是理想的測(cè)量方法,但是已經(jīng)足夠接近了。
創(chuàng)建順序:先創(chuàng)建目標(biāo),然后創(chuàng)建信號(hào),最后創(chuàng)建指標(biāo),可以防止“路燈效應(yīng)”。這說明人們傾向于使用易于獲取和測(cè)量的指標(biāo),無論這些指標(biāo)是否滿足需求。而GSM則迫使思考哪些指標(biāo)將真正對(duì)實(shí)現(xiàn)目標(biāo)有幫助,而不是簡(jiǎn)單地獲取現(xiàn)有指標(biāo)。
路燈效應(yīng):“在路燈下尋找鑰匙”,如果只看可以看到的地方,則可能找不到鑰匙的真正所在。
其次,GSM通過鼓勵(lì)在實(shí)際測(cè)量結(jié)果之前提出一種有原則的方法,一套適當(dāng)?shù)亩攘繕?biāo)準(zhǔn),從而幫助防止指標(biāo)蠕變(注:長(zhǎng)時(shí)間導(dǎo)致的指標(biāo)差異)和指標(biāo)偏差??紤]以下情況:在沒有原則性方法的情況下選擇指標(biāo),然后結(jié)果可能不符合利益相關(guān)者的期望。那時(shí)就會(huì)出現(xiàn)失效風(fēng)險(xiǎn),利益相關(guān)者會(huì)建議使用他們認(rèn)為會(huì)產(chǎn)生預(yù)期結(jié)果的不同指標(biāo)。由于并無原則性方法,因此難以反駁。相反,GSM鼓勵(lì)我們根據(jù)衡量原始目標(biāo)的能力來選擇指標(biāo)。利益相關(guān)者可以輕松地看到這些指標(biāo)如何映射到原始目標(biāo)。
最后,GSM可以展示度量覆蓋了哪些地方,哪些地方未被覆蓋。當(dāng)執(zhí)行GSM流程時(shí),需要列出所有目標(biāo)并為每個(gè)目標(biāo)創(chuàng)建信號(hào)。并非所有信號(hào)都是可測(cè)量的,使用GSM至少確定了不可測(cè)項(xiàng),通過識(shí)別這些缺失的指標(biāo),可對(duì)創(chuàng)建新指標(biāo)或度量?jī)r(jià)值進(jìn)行評(píng)估。
重要的是保證可追溯性。對(duì)于每個(gè)度量指標(biāo),應(yīng)該能夠追溯到它代理的信號(hào)以及試圖度量的目標(biāo)。這樣可以確保知道要度量哪些指標(biāo)以及為什么要度量它們。
下面將對(duì)GSM框架進(jìn)行介紹,并將其套用到Google曾經(jīng)開展過的代碼可讀性提升實(shí)踐。
目標(biāo)應(yīng)該根據(jù)期望來編寫,而不參考任何度量相關(guān)的內(nèi)容。這些目標(biāo)本身是無法度量的,但在進(jìn)一步提出信號(hào)并開始度量之前,每個(gè)人都應(yīng)認(rèn)可目標(biāo)的正確性。
為了使之有效,首先需要確定一組正確的目標(biāo)。這看起來很簡(jiǎn)單:團(tuán)隊(duì)難道會(huì)不知道他們的工作目標(biāo)嗎?但是,Google的研究團(tuán)隊(duì)發(fā)現(xiàn),在許多情況下,由于目標(biāo)設(shè)定問題導(dǎo)致度量的偏差。以可讀性為例,假設(shè)團(tuán)隊(duì)僅專注于使可讀性效率目標(biāo),則會(huì)導(dǎo)致代碼質(zhì)量問題。故團(tuán)隊(duì)會(huì)以此設(shè)定度量并跟蹤,以了解完成評(píng)審過程耗時(shí)以及工程師對(duì)該過程的滿意度。團(tuán)隊(duì)中的一名成員提出以下建議:
我有使代碼評(píng)審更高效的辦法:那就是不做代碼評(píng)審。
盡管這是一個(gè)極端的例子,但團(tuán)隊(duì)在度量時(shí)有時(shí)會(huì)忘記初衷:過于專注于提高效率,以至于忽視了質(zhì)量(反之亦然)。為了解決這個(gè)問題,Google的研究團(tuán)隊(duì)將生產(chǎn)效能分為五個(gè)核心元素。這五個(gè)元素相互制約,團(tuán)隊(duì)需要全面考量這些元素的目標(biāo),以確保不會(huì)顧此失彼。為了幫助人們記住所有五個(gè)組成元素,我們使用助記符“ QUANTS”模型來表達(dá)。
·代碼質(zhì)量(Quality of the code)
產(chǎn)生的代碼質(zhì)量如何?測(cè)試用例是否足以防止回歸?架構(gòu)在降低風(fēng)險(xiǎn)和變更方面的表現(xiàn)如何?
·工程師注意力(Attention from engineers)
工程師多久實(shí)現(xiàn)一次狀態(tài)流動(dòng)?他們被通知分散注意力的頻度?工具是否支持工程師進(jìn)行上下文切換?
·智力復(fù)雜性(Intellectual complexity)
完成一項(xiàng)任務(wù)需要多少認(rèn)知負(fù)擔(dān)?要解決的問題的內(nèi)在復(fù)雜性是什么?工程師需要處理不必要的復(fù)雜性嗎?
·速度與速率(Tempo and velocity)
工程師能多快完成任務(wù)?他們可以多快推送并發(fā)布?在給定的時(shí)間范圍內(nèi)他們完成多少個(gè)任務(wù)?
·滿意度(Satisfaction)
工程師對(duì)工具有多滿意?工具滿足工程師需求的程度如何?他們對(duì)工作和最終產(chǎn)品的滿意度如何?工程師是否感到筋疲力盡?
回到可讀性的例子,效能研究團(tuán)隊(duì)與可讀性推進(jìn)團(tuán)隊(duì)合作,確定了可讀性過程的多個(gè)效能目標(biāo):
·代碼質(zhì)量
由于可讀性的提高,帶來了更高質(zhì)量的代碼、更一致的代碼、并促進(jìn)了代碼健康的文化。
·工程師注意力
對(duì)于可讀性來說,該領(lǐng)域沒有任何目標(biāo)。(并非所有有關(guān)工程效能的問題都涉及這五個(gè)要素的權(quán)衡)
·智力復(fù)雜性
工程師通過可讀性提升過程了解Google代碼庫和最佳編碼實(shí)踐,并獲得指導(dǎo)。
·速度與速率
通過可讀性過程,工程師可以更快,更高效地完成工作任務(wù)。
·滿意度
工程師們看到了可讀性提升的好處,并對(duì)參與其中抱有積極的感覺
信號(hào)是實(shí)現(xiàn)目標(biāo)的方式。信號(hào)對(duì)度量沒有強(qiáng)依賴,也就是說并非所有信號(hào)都可度量。信號(hào)與目標(biāo)之間沒有1:1的關(guān)系,每個(gè)目標(biāo)至少應(yīng)有一個(gè)信號(hào),但也可能會(huì)有多個(gè)信號(hào)。一些目標(biāo)也可能共享信號(hào)。
指標(biāo)最終確定信號(hào)的量化方式。指標(biāo)本身并不是信號(hào),而是信號(hào)的可測(cè)量代理。因?yàn)閮H是代理,所以它們可能并不完美。因此當(dāng)嘗試對(duì)信號(hào)進(jìn)行三角測(cè)量時(shí),某些信號(hào)可能具有多個(gè)指標(biāo)。
拿可讀性改進(jìn)舉例:為了衡量在可讀性提升后是否可以更快地評(píng)審工程師的代碼,可以結(jié)合使用調(diào)查數(shù)據(jù)和代碼提交日志數(shù)據(jù),形成相應(yīng)的指標(biāo)。這些指標(biāo)都沒有真正提供潛在的事實(shí)。(日志指標(biāo)可能無法衡量工程師花費(fèi)在查看一段代碼上的時(shí)間的全部情況,或者可能被當(dāng)時(shí)其他的因素所混淆,例如代碼變更的大小或難度) ,如果這些指標(biāo)顯示相悖的結(jié)果,則表明其中一個(gè)指標(biāo)可能不正確,需要進(jìn)一步探索。如果相同,則會(huì)為事實(shí)真相提供更多的信心。
另外,某些信號(hào)可能沒有任何關(guān)聯(lián)的度量指標(biāo),因此此時(shí)信號(hào)可能根本無法測(cè)量。例如,代碼質(zhì)量的度量。盡管學(xué)術(shù)文獻(xiàn)已經(jīng)提出許多關(guān)于代碼質(zhì)量的度量代理指標(biāo)(圈復(fù)雜度、代碼行數(shù)等等),但沒有一個(gè)指標(biāo)是完備有效的。最終,盡管Google確實(shí)要求工程師對(duì)其代碼質(zhì)量進(jìn)行自我評(píng)估,但最終決定不將其作為量化指標(biāo)。
遵循GSM框架是闡明為什么要測(cè)量軟件過程以及如何對(duì)其進(jìn)行實(shí)際測(cè)量目標(biāo)的好方式。但如果所選擇的指標(biāo)沒有捕獲所需的信號(hào),那仍有可能無法說明全部情況。在Google,通過使用定性數(shù)據(jù)來驗(yàn)證指標(biāo)并確保它們捕獲了預(yù)期的信號(hào)。
定量指標(biāo)非常有用,可以用來衡量全公司工程師在很長(zhǎng)一段時(shí)間內(nèi)的工作情況,并對(duì)結(jié)果充滿信心。但定量指標(biāo)的問題在于不提供任何上下文,無法解釋為什么選擇使用過時(shí)的工具來完成任務(wù),為什么采用特殊工作流,或者為什么繞開標(biāo)準(zhǔn)流程。只有定性研究才能提供這些信息,只有對(duì)定性指標(biāo)的研究才能提供有關(guān)流程改進(jìn)后續(xù)步驟的洞見。根據(jù)Google的經(jīng)驗(yàn),當(dāng)定量指標(biāo)和定性指標(biāo)不一致時(shí),多半是因?yàn)槎恐笜?biāo)沒有捕獲預(yù)期的結(jié)果。
定量指標(biāo):非??陀^、具體,能準(zhǔn)確反映工作成果,評(píng)價(jià)結(jié)果比較直觀,效果好。
定性指標(biāo):是指無法直接通過數(shù)據(jù)計(jì)算分析評(píng)價(jià)內(nèi)容,需對(duì)評(píng)價(jià)對(duì)象進(jìn)行客觀描述和分析來反映評(píng)價(jià)結(jié)果的指標(biāo)。
QUANTS | 目標(biāo) | 信號(hào) | 指標(biāo) |
代碼質(zhì)量 | 由于可讀性的提高,工程師編寫了更高質(zhì)量的代碼 | 被教授可讀性的工程師判斷其代碼的質(zhì)量要高于未被教授可讀性的工程師 | 季度調(diào)查:報(bào)告對(duì)自己的代碼質(zhì)量感到滿意的工程師比例 |
可讀性過程對(duì)代碼質(zhì)量有積極影響 | 可讀性調(diào)查:報(bào)告可讀性評(píng)審對(duì)代碼質(zhì)量沒有影響或負(fù)面影響的工程師比例 | ||
可讀性調(diào)查:報(bào)告參與可讀性過程已改善其團(tuán)隊(duì)的代碼質(zhì)量的工程師比例 | |||
由于可讀性的提高,工程師編寫了更加一致的代碼。 | 作為可讀性過程的一部分,可讀性審查者會(huì)在代碼審查中為工程師提供一致的反饋和指導(dǎo) | 可讀性調(diào)查:報(bào)告可讀性審閱者的評(píng)論和可讀性標(biāo)準(zhǔn)不一致的工程師比例 | |
由于可讀性的提高,工程師為代碼健康文化做出了貢獻(xiàn) | 被授予可讀性的工程師會(huì)在代碼審查中定期評(píng)論樣式及可讀性問題 | 可讀性調(diào)查:報(bào)告定期在代碼審查中評(píng)論樣式及可讀性問題的工程師比例 | |
工程師注意力 | N/A | N/A | N/A |
智力復(fù)雜性 | 由于可讀性的開展結(jié)果,工程師們了解了Google代碼庫和最佳編碼實(shí)踐 | 工程師報(bào)告從可讀性改進(jìn)過程中學(xué)習(xí) | 可讀性調(diào)查:報(bào)告了解四個(gè)相關(guān)主題的工程師比例 |
可讀性調(diào)查:報(bào)告學(xué)習(xí)或獲得專業(yè)知識(shí)是可讀性過程帶來的優(yōu)勢(shì)的工程師比例 | |||
工程師在可讀性過程中接受了指導(dǎo) | 工程師報(bào)告他們與經(jīng)驗(yàn)豐富的Google工程師進(jìn)行了積極互動(dòng),他們?cè)诳勺x性過程中擔(dān)任審閱者 | 可讀性調(diào)查:報(bào)告與可讀性審閱者一起工作是可讀性過程的優(yōu)勢(shì)的工程師比例 | |
速度與速率 | 由于可讀性的提高,工程師的生產(chǎn)率更高 | 被教授可讀性的工程師認(rèn)為自己比未被授予可讀性的工程師更有生產(chǎn)力 | 季度調(diào)查:報(bào)告高效率的工程師比例” |
工程師報(bào)告完成可讀性過程會(huì)對(duì)他們的工程速度產(chǎn)生積極影響 | 可讀性調(diào)查:報(bào)告缺乏可讀性會(huì)降低團(tuán)隊(duì)工程設(shè)計(jì)速度的工程師比例 | ||
由被教授可讀性的工程師編寫的變更列表(CL)比未被教授可讀性的工程師編寫的CL更快 | 日志數(shù)據(jù):具有可讀性和不可讀性的作者對(duì)CL審核的中位時(shí)間 | ||
被教授可讀性的工程師編寫的CL,比未被教授可讀性的工程師編寫的CL,更容易通過代碼審查來進(jìn)行管理 | 日志數(shù)據(jù):具有可讀性和不可讀性的作者編寫CL的中位時(shí)間 | ||
與未被教授可讀性的工程師編寫的CL相比,被教授可讀性的工程師編寫的CL通過代碼審查的速度更快 | 日志數(shù)據(jù):具有可讀性和不可讀性的作者提交CL的中位時(shí)間 | ||
可讀性過程不會(huì)對(duì)工程速度產(chǎn)生負(fù)面影響 | 可讀性調(diào)查:報(bào)告可讀性過程對(duì)其速度產(chǎn)生負(fù)面影響的工程師比例 | ||
可讀性調(diào)查:報(bào)告可讀性審閱者迅速做出響應(yīng)的工程師比例 | |||
可讀性調(diào)查:報(bào)告及時(shí)性是可讀性的優(yōu)勢(shì)的工程師比例 | |||
滿意度 | 工程師們看到了可讀性過程的好處,并對(duì)參與過程抱有積極的感覺 | 工程師將可讀性過程視為總體積極的體驗(yàn) | 可讀性調(diào)查:報(bào)告其在可讀性過程方面的經(jīng)驗(yàn)總體上是積極的工程師比例 |
工程師認(rèn)為可讀性過程值得 | 可讀性調(diào)查:報(bào)告可讀性過程值得進(jìn)行的工程師比例 | ||
可讀性調(diào)查:報(bào)告可讀性審查質(zhì)量是流程優(yōu)勢(shì)的工程師比例 | |||
可讀性調(diào)查:報(bào)告完整性是流程的優(yōu)勢(shì)的工程師比例 | |||
工程師并不認(rèn)為可讀性過程令人沮喪 | 可讀性調(diào)查:報(bào)告可讀性過程不確定,不清楚,緩慢或令人沮喪的工程師比例 | ||
季度調(diào)查:報(bào)告對(duì)自己的工程速度感到滿意的工程師比例 |
現(xiàn)在考慮表中顯示的信號(hào)??梢詣?chuàng)建哪些度量指標(biāo)來衡量每個(gè)指標(biāo)?其中一些信號(hào)可以通過分析工具和代碼提交日志來測(cè)量。其余的只能通過直接詢問工程師來衡量。還有一些可能并非完美的度量:例如我們?nèi)绾握嬲販y(cè)量代碼質(zhì)量?
最終,當(dāng)評(píng)估可讀性對(duì)效能的影響時(shí),我們最終結(jié)合了三個(gè)來源的指標(biāo):
1.首先,來自專門針對(duì)可讀性改進(jìn)過程的調(diào)研。以便立即獲得可讀性改進(jìn)過程的反饋。該調(diào)研希望避免回憶偏差,但會(huì)導(dǎo)致近因偏差和抽樣偏差。2.其次,使用大規(guī)模的季度調(diào)查來跟蹤與可讀性不一定相關(guān)的跟蹤項(xiàng)(純粹關(guān)于期望可讀性會(huì)影響的指標(biāo))3.最后,使用細(xì)粒度代碼日志指標(biāo)來確定工程師完成特定任務(wù)的時(shí)間
回憶偏差:在對(duì)以前發(fā)生的事件或經(jīng)驗(yàn)進(jìn)行回憶時(shí),由于回憶的準(zhǔn)確性和完整性的差異所產(chǎn)生的系統(tǒng)偏差。 近因偏差:人們?cè)谂袛嗍挛锇l(fā)展趨勢(shì)時(shí),會(huì)認(rèn)為未來事件將會(huì)和近期體驗(yàn)高度類似。 抽樣偏差:在抽樣過程由于一系列因素造成不符合隨機(jī)抽樣的原則,導(dǎo)致樣本失去可以估計(jì)總體的能力(失真)。
在對(duì)某個(gè)主題進(jìn)行研究后,Google團(tuán)隊(duì)會(huì)準(zhǔn)備一份建議清單,以說明如何繼續(xù)改進(jìn)??赡馨ǎ簩?duì)工具提出新功能需求,改善工具的等待時(shí)間,改善文檔,刪除過時(shí)的流程,甚至更改工程師的激勵(lì)結(jié)構(gòu)。理想情況下,這些建議是“工具驅(qū)動(dòng)的”,Google始終假設(shè)工程師將在適當(dāng)數(shù)據(jù)和工具的支持下進(jìn)行有效改進(jìn)。
對(duì)于可讀性而言,Google的研究表明總體上是值得的:實(shí)現(xiàn)可讀性的工程師對(duì)該過程感到滿意,并認(rèn)為他們從中吸取了經(jīng)驗(yàn)。采集的日志顯示,工程師對(duì)代碼的審查和提交速度也更快了,甚至不再需要那么多評(píng)審人員了。研究還顯示該過程需要改進(jìn)的地方:工程師反饋了該改進(jìn)過程的一些痛點(diǎn),基于這些痛點(diǎn)研究團(tuán)隊(duì)推動(dòng)了對(duì)工具和流程進(jìn)行改進(jìn),以使流程更快,更透明,從而使工程師擁有更好的體驗(yàn)。
本文重點(diǎn)介紹Google作為一家以數(shù)據(jù)驅(qū)動(dòng)聞名的公司是如何進(jìn)行研發(fā)效能改進(jìn)落地的全流程。其中實(shí)施的關(guān)鍵在于GSM目標(biāo)驅(qū)動(dòng)改進(jìn)框架和QUANTS元素模型的合理運(yùn)用,使得整個(gè)度量改進(jìn)更加聚焦和完備。希望對(duì)你有所幫助:)
[1]
阿里研發(fā)效能體系: https://zhuanlan.zhihu.com/p/57029968[2]
HEART模型: http://www.mysecretrainbow.com/blog/12460.html
聯(lián)系客服