首頁>科技>

導讀:本文從定義、衡量交付價值、研發成本、交付時長以及細化指標四個方面,分享如何量化效能。

作者|泥洹

背景

專案管理的理論有很多,但大多是從理念和方法論的角度出發。當在一個團隊推行專案管理的某種實踐的時候,不免被挑戰的一個問題:“如何衡量技術團隊的效能”。於是不得不試圖去把邏輯題轉成數學題,用數字指標去證明一些“不證自明”的方法論。

但如果我們只是擺出一些指標,不可避免地會陷入“上有政策、下有對策”的迴圈(只要不加其他約束,數字還不是想怎麼最佳化怎麼最佳化)。我們也應該能看到這些數字背後,需要堅持的一些原則,和需要遵守的一些硬性標準。

假設目標是提高技術團隊的效能,會得到如下OKR(Objectives and Key Results,目標與關鍵成果法):

O:

提高技術團隊的效能

KR:

增加總的價值交付率和交付質量增加單位研發成本的平均交付價值降低單位價值的平均交付時長

本篇側重點在如何量化,而不是如何提高。所以接下來繼續分解,我們要做的事情就是:

定義、衡量交付價值定義、衡量研發成本定義、衡量交付時長細化指標

如何定義交付價值?

這裡可能會存在兩個誤區

誤區1:交付的價值就是產出的方案、程式碼的數量和質量

這樣衡量交付價值,就很少有人願意建設公共設施了(因為質量好不好很難量化,建設公共設施初期的耗時往往明顯大於直接完成業務需求),也很少有人願意使用公共設施(因為用別人的,不如自己建,還能拿個結果)。而對於技術團隊,長期創造價值的能力,離不開公共設施的完備和對公共設施的使用。

誤區2:交付的價值就是業務KPI中指標的增量

有很多功能並不帶來直接的增量,或者比較難以衡量,但可能帶來公司的競爭壁壘,如產品的體驗。這樣衡量交付價值,帶來的問題就是,大家都只關注短平快的增量功能(比如營銷),最終產品的競爭力下降。

我目前的答案:交付價值是需求背後的客戶價值

不完全是技術方案、程式碼的數量和質量,也不完全是KPI指標的增量。交付價值就是按照使用者的需要,對使用者提供的整個產品、服務的數量和質量。這個定義幾乎是不證自明的,但是把交付價值定義為客戶價值,會不會讓這件事情更加複雜,變得更加不可能量化?這就需要我們轉變一下思路,透過按照優先順序加權的需求的工作量來衡量。

按照優先順序加權的需求的工作量代表著客戶價值,這裡做一些基本假設(假設不成立的場景可以作為另外的問題解決)。

假設1:技術的上游(一般是業務、產品)對於客戶價值的判斷是基本準確的

我們知道業務是會試錯的,給業務小成本試錯的機會、在業務試錯的過程中沉澱一些通用的產品技術能力,往往不是區域性最優,但是全域性最優。

假設2:技術的上游會按照客戶價值推演出優先順序然後給技術提需求

假設3:技術的上游提給技術的需求是充分的(不存在業務產品人員配置的缺失而導致需求質量數量不足的情況)

基於這幾個假設,上游提出的需求可能就很大程度上代表著客戶價值,研發在非功能性需求方面對上游的需求做補充。

衡量交付價值

交付價值有個非常主觀但有效的衡量方式,是上游(一般是產品業務)的滿意度。背後的邏輯是,交付價值(背後代表的客戶價值)往往很難量化,而產品業務的滿意度,體現了技術與業務是否很好的協同,也反映了技術是否很好的交付價值。

需求的工作量不應該透過人日來評估,因為不同團隊,對於相同功能點的開發時長是不同的。需求的工作量的單位應該是分解到最後的功能點數量。再細化一些,對於服務端是領域模型、領域服務數量,流程分支節點數量,對於前端、互動我不是很瞭解,但偏展示層可能更多的是頁面區塊、互動流程、行動點的數量。這些已經有量化的可能性了。

定義、衡量研發成本

研發成本,在一般的工程效能裡面有時候會被簡單的理解為人日,單純的交付人日的衡量,其實比較簡單,整個團隊的人數×工作天數。但容易被流程設計者忽視的是,站在企業成本的視角,交付人日,可能還要按照開發人員的收入進行加權。從這個角度來看,技術團隊效能裡面的研發成本,準確的來說就是公司對於研發的金錢投入,包括購買伺服器、雲服務、培訓、行政投入。

這部分對於提升效能的啟發是:

哪些功能自研、哪些功能靠購買,有時候真的得算一筆帳。軟體開發是一個邊際成本遞減的行業,如何讓功能更簡單的得到複用,可能是對效能提升最有幫助的部分之一(複用50個人日的功能模組,就幾乎等於省了50人日的研發成本。當然也可能存在複用及後期維護的成本大於新建成本的情況,需要有良好的設計去規避)。

定義交付時長

我自己之前曾經陷入一個誤區,認為交付時長就是從開始開發,到完成上線,這個就是交付時長。但是回到客戶價值這個維度來思考,技術團隊交付時長(這個時候可能說產研團隊更合適一些),應該是從業務的一個想法,到驗證、立項、完成釋出、灰度,到終端使用者可以真正使用的時長。

於是單位價值的平均交付時長,就變成了以下公式:

如何衡量交付時長

衡量交付時長其實也比較簡單,記錄下業務提出該功能的時間以及功能開發的時間。難點可能是整個價值流交付過程中細化的指標,而細化的指標更能幫助我們發現問題。於是我們可以從一般專案的生命週期來看,哪些節點的時長會影響我們的交付:

需求立項到評審的時長需求評審到技術方案評審的時長(如果專案很大可能會有多個層次的設計方案)技術方案評審完成到開發完成自測的時長自測的時長多端聯調的時長測試的時長bug驗證的時長,bug的數量(reopen可以數量+1)環境部署等待的時長程式碼合併的時長(主幹釋出的情況下)迴歸的時長髮布的時長灰度的時長

這部分對於提升效能容易忽視或有啟發的點是:

需求的拆分成基本的功能閉環進行迭代(以不引入或少引入測試的重複迴歸為標準),或許能比較有效的降低需求價值量的平均交付時長。自測充分、減少bug數量,最終減少聯調、測試迴歸的次數和時長,在一定的單測覆蓋率要求以前,是收益大於成本的。程式碼合併有時候衝突解決很麻煩,會導致一次部署的時間很長,且程式碼合併引入了更多次的測試迴歸工作(這可能是某些BU往主幹開發分支釋出走的原因之一)。所以基於業務的理解,進行應用的拆分,減少單個應用的併發數量,也可以提升研發效能。在缺乏有效的專案管理的情況下,資源的相互等待可能是專案延期的一大因素,有時候某端開發完了,另一端資源沒到位,一直不能聯調提測。專案管理的同學對於資源目前的分工和瓶頸應該給上游及時的反饋。

容易陷入誤區的點是:

技術方案(架構、詳細設計)的評審既然是很大的一塊耗時,是不是可以直接寫程式碼,少寫方案。我理解在技術方案寫不熟練的情況下,寫技術方案確實比較耗時。但是技術方案體現的是分析設計的過程和結果,這部分如果不寫出來,增加的是大量的溝通成本。而分析設計就算不寫出來,這部分工作量在編寫程式碼的時候也是沒辦法省略掉的,只是變成了在大腦中進行(也許在大腦中真的不如在紙上寫出來來的快和清晰,真的省略了設計,最終就會成為技術負債)。我個人感覺對於多大的需求需要技術方案評審的比較好的實踐,是以Code Review能否不基於技術方案直接閱讀程式碼為準。

最後

但我仍然認為,好的量化的指標往往是好的結果的必要不充分條件。簡單粗暴的最佳化某項指標往往會因為兩個問題而使得最終的結果背道而馳:

某項指標變好,帶來的是其他指標的降低,區域性最優並非全域性最優(如:取消技術方案的編寫和評審,造成的是編碼時間或者後期維護時間的增加)。效能是多個變數共同作用的結果,缺乏理論基礎和方法論的情況下,很可能在短期最佳化指標的時候,忽略了長期的團隊成長、系統能力沉澱等因素;或是忽視了業務方滿意度等難以量化的因素。

所以,效能的最佳化,不止應該有指標,還應該有路徑,而路徑往往是最難的部分。

7
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 爆款 AR App 推薦,能讓紙片人動起來