為什么需要技術KPI?
將就的代價
這種技術味道的缺失對技術團隊來說是非??上У?,也不利于技術人員的成長和發(fā)展。因為很難想象一個沒有技術追求的團隊能開發(fā)出一個健壯的、可維護性好、可擴展性好的系統(tǒng)。相反,這種業(yè)務代碼的堆砌,從短期看也許是“較快”實現(xiàn)了業(yè)務需求,但是從長遠來看,這種爛系統(tǒng)的增加會極大的阻礙業(yè)務的發(fā)展,形成一個個的黑洞應用,而工程師被裹挾在業(yè)務需求和爛系統(tǒng)之間,疲于應對,心力交瘁。
這種將就將導致系統(tǒng)腐化,技術債越壘越高,像腫瘤一樣消耗你所有的能量。
我不是藥神,只能嘗試開出一方——那就是在不影響業(yè)務的情況下(特別是相對穩(wěn)定的業(yè)務,請拒絕業(yè)務方的時間倒排),Tech Story應該和User Story有同等的重要性,要把重構優(yōu)化提到和業(yè)務需求相等的優(yōu)先級去處理。我們不僅要對業(yè)務需求負責,我們更要對應用的質量,系統(tǒng)的可維護性負責。
因為我們技術人員是應用的父母(有些是親生父母,有些是養(yǎng)父母),你不照顧它們,不治理它們,它們就會生病,你忍心看到這樣的局面嗎?
技術管理者者(TL)的失職
造成這種局面,我們的技術管理者,我們的TL要負有主要責任。如果一個TL從來不關注系統(tǒng)架構和設計,從來不寫code,對技術沒有熱情也不學習,甚至其本身技術就很爛,那么在這個TL領導下的技術團隊,又怎么會有技術味道,團隊成員又怎么能進步和成長?
現(xiàn)在很多的TL每天都混跡在各種會議上,很忙,做著各種溝通協(xié)調的事情,可是我們真的需要這么多的會議、這么多的溝通嗎?
如果溝通的結果只是做業(yè)務和PD對團隊的傳話筒,沒有業(yè)務創(chuàng)新,沒有用技術和數(shù)據(jù)系統(tǒng)化的解決業(yè)務問題,沒有在技術方向和架構上給團隊指引,沒能切實的幫助系統(tǒng)優(yōu)化、團隊提效,請問這樣的溝通給業(yè)務帶來了什么價值,給團隊帶來了什么價值?還是沉下心來,多看看書,哪怕非技術的書也好。多寫寫代碼,哪怕跟業(yè)務無關的代碼也好。
所以,我們要回歸技術本身。我們不需要這么多“高高在上”、“指點江山”的技術Manager,而是需要能真正深入到系統(tǒng)里面,深入到代碼細節(jié),給團隊帶來實實在在改變的技術Leader。
技術KPI的量化
提升技術氛圍,打造工程師文化不能僅停留在口頭上,可搭配一定的強制手段,比如和技術人員的利益綁定。這種綁定就需要我們能對技術貢獻進行一個相對公平的分解和量化。
技術KPI
基于此,我將技術人員的KPI分解為業(yè)務貢獻、技術貢獻和團隊貢獻三個大的部分,其詳細內容如下。
業(yè)務貢獻:包括需求把控,業(yè)務項目和業(yè)務創(chuàng)新。
技術貢獻:包括設計重構、技術影響力、Code Review、創(chuàng)新提效和代碼質量。
團隊貢獻:包括招聘、新人培養(yǎng)和團隊氛圍。
那么技術貢獻中的這幾個維度要怎么理解呢,解釋的話我就不多說了,用我們工作中的一些案例來描述一下吧。
應用質量:
你負責或者共同負責的應用質量分(可以從代碼重復率,圈復雜度,分層合理性等維度考察)。
你做了哪些提升應用質量分的工作。
設計重構:
我在客戶通項目中,對CRM銷售域進行了領域建模和設計,并且抽象合理。
我發(fā)現(xiàn)Infrastructure中package分類不合理,進行了重新設計并重構完成。
我發(fā)現(xiàn)現(xiàn)在系統(tǒng)中錯誤碼比較混亂,我梳理制定了新的錯誤碼規(guī)范,并完成了代碼重構。
技術影響力:
在團隊內分享10篇干貨,點贊數(shù)1000。
團隊分享策略模式,得到同學好評 。
我接受邀請,在行業(yè)會議上分享了SOFA架構。
Code Review:
我在review某某代碼的時候發(fā)現(xiàn),可能存在線程不安全的隱患。
我在review某某代碼的時候發(fā)現(xiàn),存在設計不合理的現(xiàn)象,此處使用責任鏈可以很優(yōu)雅的解決問題,并具備一定的擴展性。
創(chuàng)新提效:
我發(fā)現(xiàn)本地測試啟動PandoraBoot比較浪費時間,所以寫了一個TestContainer大大提升了自測效率。
我發(fā)現(xiàn)有一些boilerplate代碼不需要寫,所以對樂觀鎖、分頁進行了annotation支持,簡化了代碼。
在某個項目或者技術點上面,我產(chǎn)出了一篇專利:基于領域模型的業(yè)務配置化。
代碼質量:
提測后的Bug數(shù),線上故障數(shù)(系統(tǒng)可以提取,不用自己填寫)?
我完善了某某模塊的單元測試,并多次在自動化回歸中發(fā)現(xiàn)問題。
KPI答疑
對于上面的KPI大部分的技術同學是表示認可的,當然質疑的聲音也很多,我這里挑一些典型的回答一下。
Q:技術KPI的提出,會不會導致技術同學只關注技術不做業(yè)務項目了??
A:關于績效,肯定是綜合看業(yè)務貢獻,技術貢獻和團隊貢獻。但是作為一個重要參考和風向標,技術KPI是有積極意義的。
Q:?你這個設計重構怎么量化?
A:?這個很難用系統(tǒng)標準化,更多的還是要依賴TL的專業(yè)能力進行評分,但即使是這樣,也比以前什么都沒有完全黑盒要強。至少在傳達一個信息,我們鼓勵好的設計,鼓勵不斷地重構優(yōu)化。
Q:我們現(xiàn)在的業(yè)務需求已經(jīng)在堆積,一線同學根本沒有時間去做重構優(yōu)化。
A:這個問題開篇其實已經(jīng)說過了,你是要不斷地裹挾在業(yè)務需求和爛代碼里面呢,還是花時間improve,然后更快地支持業(yè)務。這個權衡應該不難做,關鍵是要看決心和能力。對于很多業(yè)務,我沒有看到推遲幾天上線就會影響業(yè)務格局的業(yè)務場景,所以作為技術團隊,我們就應該在User Story之外,加上我們的Technical Story,把完成業(yè)務需求和系統(tǒng)重構都當成我們的核心任務。
關于技術童鞋的量化考核,你有哪些好的建議或想法,也可以在留言區(qū)交流,一起探討。