研發效能度量核心方法與實踐:難點和反模式

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"研發效能度量的出發點雖然很好,但是如何正確、有效的度量卻是一個頗有難度的技術活兒。近期圍繞如何進行效能度量的討論不絕於耳,但如何構建度量的體系化框架、如何進行度量指標的選取、如何進行度量分析、如何進行落地運營,卻鮮有文章具體闡述。在這一背景下,張樂老師撰寫了《研發效能度量核心方法與實踐》系列文章,對以往經驗進行了總結和提煉,包括以下內容:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1. 效能度量的難點和反模式"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2. 效能度量的行業案例和關鍵原則"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"3. 效能度量的實踐框架和指標體系設計"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"4. 效能度量的常用分析方法"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"5. 效能度量的落地實施建議"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以上內容將以五篇連載文章的形式發佈,共計超過3萬字,本文是第一篇。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在數字化的時代,研發效能已經成爲一家科技公司的核心競爭力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在軟件研發領域,能夠有助於效能提升的方法論和實踐一直在快速發展。比如,我們熟知的敏捷開發方法已經誕生了二十年,DevOps也已經發展了十多年,相信很多朋友都已經對這些方法有了比較深刻的理解,在行業中也已經有很多企業對其進行了引入、落地和實踐。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"但是,我們經常遇到的一種現象是,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"當一個組織或者團隊在消耗了大量的\"變革\"時間、花費了大量的人力資源和成本後,卻無法有效回答一些看似非常基本的問題"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":",比如:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你們的研發效能到底怎麼樣?可否量化?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你們比所在行業平均水平、比別的公司、比別的團隊更好還是更差?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"研發效能的瓶頸點和問題是什麼?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在採納了敏捷或DevOps實踐之後,有沒有效果?有沒有實質上的提升?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你們下一步應該採取什麼樣的行動以繼續優化效能?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這就是爲什麼我們希望進行研發效能度量。我認爲"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"研發效能度量的目標就是讓效能可量化、可分析、可提升,通過數據驅動的方式更加理性地評估和改善效能"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":",而不要總是憑直覺感性地說出“我覺得...\"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"研發效能度量的出發點雖然很好,但是如何正確度量卻是一個挺有難度的技術活兒。尤其是這幾年,在研發效能實踐被普遍採納、研發效能平臺逐步被構建起來,很多企業已經擁有了一些研發基礎數據的基礎之上,如何有效地度量,卻成爲了困擾着很多企業和管理者的一大難題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"根據我的經驗,度量這件事情不僅困難,而且稍不留神就可能會跑偏,結果經常是非但沒有帶來所預期的、對效能提升的正面引導作用,反而帶來了很多嚴重的副作用,讓企業在消耗了很多時間和資源的情況下,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"進行了一場看似轟轟烈烈但卻沒有什麼價值的數字遊戲"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":","},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"或是一場看似政治正確但卻讓員工變得更加“內卷”的無效運動"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"那麼我們下面就來看一看,研發效能度量的難點和常見的反模式。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"研發效能度量的難點"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"相信每一個從事研發效能度量的實踐者或專家都聽說過管理大師彼得·德魯克的名言“沒有度量就無法管理”,這句話出自《管理的實踐》,在被引用了60多年後的今天依然適用。德魯克強調了度量對於管理的價值和作用,如果沒有度量,就會缺乏對某個事物的客觀認知,就不知道組織或團隊所處的位置和問題在哪裏,那麼就不知道應該如何進行決策,當然也就不知道應該如何進行改進。所以我們需要基於事實的度量指標,爲管理提供可靠的效能分析和決策支持。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"但是,在軟件研發領域,爲什麼說效能度量這件事情比較困難呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/71\/715d8d63eb96db2359fb7f5e1e9285d4.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在2003年,軟件開發領域的大師馬丁·福勒就寫過一篇名爲“無法度量生產力”的博客,他認爲當時的軟件工業缺乏一些度量軟件開發有效性的基本元素的能力。仔細思考下,軟件研發過程跟生產製造行業實體產品的製造過程的確有着很大的區別,那麼在度量的問題上就會充斥着一些比較困難的因素。雖然本質上都是通過一定的工作來生產(研發)出所需的產品,但不同於生產製造行業,軟件研發過程有其特殊性:"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"1. 軟件研發過程中的可視性差"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"軟件研發過程是靠業務、產品和工程師的數字化協作來推進的,涉及到業務、產品、研發、運維等不同職能,多個團隊多種角色協作時,任務處理的進度、隊列、依賴、瓶頸可能很難清晰觀察到,其中的風險也容易被各個環節掩蓋,以至於很多項目管理軟件中填寫的任務進度百分比只是簡單的粗略估算,可能只有部分參考意義,實際上根本無法保證準確。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"2. 軟件研發過程中工作切分的隨意性"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"有時管理者會制定一些KPI來度量團隊績效,但"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"就像那句名言所說:你度量什麼,就會得到什麼。其實這句話只說了上半句,而下半句是:只是不一定是用你所期待的方式得到。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"所謂上有政策、下有對策,由於軟件工作切分的隨意性,也許把一個需求拆成多個小需求,一行代碼拆成多行來寫,那些度量產能或者吞吐量的KPI指標也許就被用非預期的方式達成了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"3. 敏捷研發過程中工作是並行開展的"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"隨着企業中敏捷研發模式的持續推進,我們很難再像傳統項目管理模式一樣清晰界定軟件研發的各個階段,很多情況下不同需求所對應的開發\/測試\/部署工作都是並行的,產品也是不斷迭代、持續演進的,這也對準確度量造成了一定困難。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"另外,現代信息工作的特點就是經常容易被各種不斷到來的干擾打斷。這些干擾可能來自外部事件(例如,一個同事問你一個問題、來自微信上的消息通知),也可能是自我的打斷(例如,在兩個不同的系統之間來回切換才能完成一項任務)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"最近,一項針對IT專業人士的觀察研究發現,有些人在專注工作幾分鐘後就會被打斷。這種高度並行、頻繁被打斷的場景往往無法被度量出來,我們也許看到每個人都在很飽滿地忙於各種任務,但其實這種工作流的中斷對於效能的影響是非常巨大的。這就是所謂的“忙忙碌碌一整天,好像啥也沒做成”,相信很多人都有這種經歷。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"以上描述了一些研發效能度量的難點,但是“"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"難不難”和“做不做”是兩回事情"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。正是因爲我們迫切地需要效能度量,需要對於研發過程進行客觀、量化的分析和認知,所以我們仍然要迎難而上,找到解決這一難題的法門。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"很多企業都已經在效能度量的方向上進行了諸多嘗試,那麼我們在介紹成功經驗之前,先來看看一些失敗的案例,這樣才能對這個領域有更加深刻的認知。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"研發效能度量的反模式"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"正所謂“成功大都相似,失敗各有不同\"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"研發效能的度量其實也不算是個新鮮的話題了,隨着業界各大公司日益發展壯大,很多都已經擁有幾百、幾千甚至上萬人的研發隊伍,研發效能的基礎數據都積累了很多。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"但我們經常看到一些所謂的“反模式”在不斷上演,雖然從公司角度花了很大的力氣去做度量,但從其理念、出發點到具體實踐、指標選擇、推廣運營上似乎都存在一些問題、限制和弊端,以至於獲得的成效不大甚至是造成負面影響,最終連累公司整體業績。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"下面我們就一起來看看這些反模式:"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"1. 使用簡單的、易於獲取的指標"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在有些企業,管理者的初心的確是想有效提升組織的研發效能,但是其管理理念還停留在往前推數十年的兩場技術革命之前,那種適合於管理重複的體力勞動工作者的模式上。當時的生產環境是重複的、可知的、確定性的,通常是物理活動,這與當前軟件開發這種創造性的、未知的、不確定性很高的知識工作完全不同。那麼,度量的方式肯定也截然不同。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果按照傳統的、針對體力勞動者的度量思路,會通過考察單位時間內的工作產出來衡量生產率。那麼對於軟件開發人員來說,是不是就可以通過度量每天編寫的代碼行數來實現呢?代碼行這是一種簡單的、易於獲取的指標,而且符合傳統的度量思路,在實際工作中我們經常看到有管理者會使用。比如度量單位時間內不同工程師的新增代碼行,以此來衡量每個人工作是否努力、工作是否飽滿、產出是否合理,更有甚者,還會進行團隊內代碼行倒排名來作爲獎懲措施。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"但是我認爲,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"無論如何,代碼行都不會是一個好的度量指標。比爾·蓋茨曾經說:“用代碼行數來衡量軟件的生產力,就像用飛機的重量來衡量飛機的生產進度一樣。”"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"雖然代碼行很容易度量,但卻有很大的問題,因爲代碼越多不一定就越好。在這個度量的導向下,工程師可能傾向於提交大量重複、冗餘的代碼來“湊指標”,讓數據變得很好看,但這對企業沒有任何價值。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在許多情況下,只要能滿足客戶的需求,實際上代碼越少越好。但我們同樣不能度量實現同一個業務邏輯,誰的代碼寫的最少,因爲這樣的代碼可能大量使用複雜語法和表達式來精簡行數,只有作者一個人能看得懂,不利於代碼傳承和經驗共享。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"當然,這裏只是舉了一個例子,還有很多看起來很簡單、容易度量的指標,比如下面即將講到的工時和資源利用率等,這些指標都很容易會讓度量跑偏。我們應該做的是提供給管理者更多的管理抓手,從正確的度量理念和方向上入手,選取符合數字化時代特徵的度量指標集,這在後文中會展開描述。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"2. 過度關注資源效率類指標"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"互聯網大廠一直自帶上熱搜的體質,而互聯網圈流行已久的“996\"向來是內卷的代名詞。大家肯定還記得,2020年網絡上對於“996\"有着深度的討論,“996\"話題似乎與互聯網大廠有着某種深度綁定,某些話題確實也是從大廠內部發源的。比如:阿里的馬雲老師說,能996是一種巨大的福氣,很多公司、很多人想996都沒有機會;京東的東哥說,混日子的不是我兄弟;字節跳動、快手一段時間以來都在採用“大小周\"的工作制度。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"隨着內卷的不斷加劇,很多人學會了“表演型”加班。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"當加班文化盛行,身處其中的每個員工都容易被裹挾其中,即便沒有工作安排,也寧願下班後留在公司繼續“磨洋工”。而過度加班會降低工作效率,讓員工患上嚴重的“拖延症”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"也有理性聲音指出,把提高員工效率寄託在延長工作時間上,本就是管理上的“懶政”。阿里某P8同學曾經發帖說,“當一個管理者的智慧無法衡量一支團隊的產出的時候,他就會把‘工時’當做最後的救命稻草,死死抱住——這是他唯一聽得懂的東西了。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"以上這些討論其實都在圍繞一個主題,就是工程師的資源利用率。比如上下班打卡、填寫工時(有的公司稱爲報工)等,都是非常典型和常見的管理手段。所謂的“996\"更多強調的是工作時長,但在內卷和“表演型”加班的氛圍裏,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"這種工作時間的延長其實根本無法轉化爲實際有效的產能"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。我們經常看到的情況是,研發似乎忙得熱火朝天,但是業務仍然抱怨做得太慢,根本不買賬。即使大家真的都在忙,也會導致更多的衍生問題。比如資源利用率的飽和會導致上下游協作時的大量排隊和等待,這種局部的過度優化會導致全局的效率劣化,對企業來講得不償失。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"另外,長期強調超高的資源利用率,有把員工當成“資源”而不是“工程師”的傾向,員工長期在這種壓力下會產生疲憊、幸福感下降。有研究表明,這不僅會影響代碼編寫過程的生產力,還會影響結果代碼的質量。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"所以,我們不要過度關注資源效率類指標,還需要考慮流動效率類指標,比如從產品或團隊視角下的需求交付週期、流動速率、流動效率等,後文會展開說明。順便說一句,在我寫下本文時(即2021年8月),許多互聯網大廠都紛紛取消了“大小周”的工作制度,也許行業已經更深刻認識到,追求資源效率有其弊端,效能的全面提升纔是解決效率問題的良藥。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"3. 使用成熟度評級等基於活動的度量"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"成熟度模型在軟件行業的發展中由來已久,很多企業都通過了CMMi成熟度評估,甚至在敏捷、DevOps領域也有人照方抓藥,試圖通過這種模式來評估和衡量軟件過程,通過研發活動的標準化和一致性來提升軟件研發的效率和質量。我在這裏先講一個案例。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"有一家大型跨國公司,曾經是某領域絕對的市場領導者,市值一度達到2500億美元。這家公司的高管們非常開明,意識到敏捷軟件開發對於他們適應快速變化的市場極爲重要。於是,高層對大規模敏捷轉型給予了極大的支持,從上而下,投入巨大。難得的是,基層開發人員對任何敏捷實踐也都沒有異議,而且自我感覺良好。他們定義了公司級別期望發生的敏捷活動和行爲,並與當時的最佳Scrum實踐進行對比,以成熟度的形式進行度量評估。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在具體操作過程中,他們把期望發生的敏捷活動分成9個維度,分別是迭代、迭代中的測試、用戶故事、產品負責人、產品待辦列表、估算、燃盡圖、中斷和打擾、團隊。然後對每個維度給出一系列評估細則。比如,對於迭代維度,他們的評估內容是:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"當團隊對迭代進行承諾時,需要知道迭代的長度,以便按更好的節奏交付價值。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"評估方式(不加總):"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"迭代長度4~6周,得2分"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"迭代長度4周之內,得4分"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"過去三個迭代,迭代長度穩定在1個月,得5分"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"過去三個迭代,迭代長度穩定在4周,得6分"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"過去三個迭代,迭代長度穩定在3周,得8分"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"過去三個迭代,迭代長度穩定在2周之內,得10分"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"以此類推,每個維度都有詳細的評估內容,最終可以得到一張敏捷成熟度的雷達圖,如下圖所示。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/35\/35f5d847a33ac9218d7f3001ad0ff7bc.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" 這個模型一度被行業廣泛引用,並且作爲敏捷開發方法可以在大規模企業落地的證據之一。也許你已經猜到了,這個模型就叫做Nokia Scrum Test。我們當然不能簡單粗暴地把這家公司手機業務的衰落直接歸結爲敏捷度量方式的無效,但從客觀的角度來看,我們依然能發現其中隱含的問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"按照這個模型,管理層看到這些團隊的敏捷成熟度一直在提升,已經實現了理論上的敏捷性。但是實際上敏捷轉型並未成功,業務結果也證明了這一點。在《Transforming Nokia》一書中,描述了一些當時的實際情況:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"企業級的敏捷工具沒有被開發人員真正接受,他們更喜歡簡單的以開發爲中心的工具"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"很多開發人員在迭代末尾,工作已經完成後,後補一個用戶故事"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"把敏捷工具變成了文檔記錄工具,而不是流動和反饋機制"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"看起來所有正確的敏捷活動都在發生,但開發者飽受構建和部署的折磨"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"由於Symbian60操作系統的規模和架構,增加新功能很困難"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在構建和部署軟件時,下游的分離和低效意味着進展非常緩慢"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"技術債務積重難返, 2010年Symbian60系統構建異常緩慢,要花整整48小時"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"反思這個案例,我們可以總結爲:"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"這種狹隘的、以活動爲導向的敏捷觀是其轉型失敗的根本原因之一。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"研發效能應該度量結果而不僅是過程,端到端價值流的局部優化對結果的改進效果很小,因爲可能根本就沒有解決效能瓶頸。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"4. 把度量指標設置爲KPI進行績效考覈"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"效能度量顯然很重要,企業迫切希望效能提升的願望也可以理解,但千萬不要把指標設置爲KPI用於績效考覈,因爲"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"把度量與績效掛鉤就一定會產生“造數據”的數字遊戲"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。這時,使用效能度量非但起不到正面效果,還會對公司和團隊造成傷害。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"有個著名的定律稱爲古德哈特定律,其內容是:當某個度量變成了目標,它便不再是一個好的度量。有朋友也將其戲稱爲“好心人”定律,效能度量的出發點是好的,但當它演變成了與績效考覈掛鉤的KPI,大家都有追求自己切身利益的動機,那麼各種有創造性的、爲了提升指標而進行的不優雅的短視行爲就會紛紛上演,度量走偏就在所難免了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"其實從理論上講,所有的度量都可以被操縱,而數字遊戲式的度量會分散員工的注意力並耗費大量時間。把度量指標設置爲KPI進行考覈,只是激勵員工針對度量指標本身進行優化,這通常比他們在度量之前所做的工作效率要更低。因此,試圖把度量武器化爲績效考覈,不僅是一種浪費,而且往往適得其反,特別是當薪資與度量的KPI掛鉤的時候。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"那麼,如果不把效能度量與績效考覈掛鉤,那怎樣才能使用度量提高研發效能呢?答案是:"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"把度量作爲一種目標管理方法、一種效能提升的參考工具,促進團隊明確效能目標、分析效能問題,指導團隊針對性優化,從而最終獲得效能提升。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"比如,對線上缺陷密度的度量和分析,可以讓團隊瞭解產品的質量走向和問題的根因,有助於持續優化交付質量;對需求交付週期的度量和分析,可以讓團隊瞭解產品端到端交付效率和細化每個階段的耗時佔比,可以針對性的採取干預措施,讓團隊獲得有效的提升。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"5. 片面地使用局部過程性指標"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我們對於度量指標的理解,有時存在一定的片面性,比如認爲某個效率類指標的提升就代表了研發效能的提升。需求交付週期是常見的效能度量北極星指標,在行業實踐中引用的比較多。但是,如果一個組織或團隊僅僅認爲交付快了、週期短了就代表效能提升了,其實這就是一種片面的追求了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"記得之前也有專家說過:如果你不能度量一個事物的所有方面,就無法管理或者發展它。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"研發效能的提升不僅是有“效率”這一個方面,還有很關鍵的另外一個部分是“有效性”。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"軟件研發過程中最大的浪費,是構建沒有人在乎的東西。我們所謂的效能提升,一定是要從業務目標出發的,構建的功能、質量是需要達到期望要求的,在此基礎之上當然效率越高越好、成本越低越好,所以我們說的效能實際上綜合考慮了關於產出和投入的多個要素。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"回到需求交付週期這個指標的例子,追求這個指標的優化當然很重要,但是需要在功能有效,吞吐量和質量穩定、安全合規的基礎之上纔有價值,片面地使用局部過程性指標對於研發效能提升的效果有限,而跳出來看到全局的研發體系和結構纔是關鍵。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"6. 手工採集,人爲加工和粉飾指標數據"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"研發效能度量的過程實際上是要把數據轉化爲信息,然後將信息轉化爲知識,這樣就可以讓用戶自主消費數據,進行分析和洞察。在企業進行研發效能度量的初始階段,可能會存在各種各樣的研發工具產生出來的原始效能數據,但缺少對其進行分析和加工成信息的自動化工具。所以很常見的是,用戶從系統中導出數據到Excel表格,然後進行各種篩選、關聯、透視和加工,最終形成度量報表。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在這個過程中,經常存在大量的人工干預行爲。那麼,在數據分析和加工過程中,就很容易有意或無意地引入一些數據集合的篩選或“異常數據”排除的行爲。有時甚至是僅僅爲了讓數據變得好看、達標而做出一些看似合理但頗有欺騙性的報表來。我曾經接觸過一家通過了CMMi四級的企業,會週期性統計研發效能報表。有一次,在查看報表中的數據時,我發現某個團隊的單元測試覆蓋率一直在83%~85%之間浮動,非常地規律。當我仔細詢問這個數據的時候,相關人員相互對視一笑,跟我說:“這些數據其實都是手工採集、人工上報的,其實很難保證準確性。”如果效能數據都是這種方式被手工統計出來、一層層地上報上去,對企業來講其實是非常有害的,不但無法發現現存的實際問題,還會把管理和技術決策引導到錯誤的方向上去。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我在建設服務於全集團數萬研發的研發效能度量平臺時,其中一個"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"最基本的要求就是度量數據的公信力。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"也就是說,只有在我們這個平臺上自動採集、匯聚、計算出來的數據,纔是被集團官方認可的,這些數據纔可以被用來進行管理和技術決策。我認爲這纔是一個研發效能度量產品或平臺的立足之本。有了這樣一個有公信力的平臺之後,那些手工處理的Excel表格、人工做圖的PPT膠片,就會慢慢淡出大家的視野。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"7. 不顧成本,堆砌大量非關鍵指標"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"研發效能的度量不是免費的,爲了做到準確、有效的度量,各種成本加在一起是很高的。比如我們經常會去度量團隊的需求交付週期及其在設計、開發、測試、部署等每個階段的時間消耗和佔比。這樣一個看似簡單的度量需求,其實背後要做很多事情。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"比如團隊的研發流程要定義清晰、每個階段的完成的定義(DoD)要足夠明確、研發管理工具的配置要合理,以及最重要的是,團隊中每個人的操作過程要規範並及時。比如某個需求其實已經部署到預發環境了,但在看板系統中的狀態還停留在“開發中”,原因可能是開發人員提交代碼、測試人員進行驗證後,並沒有及時同步看板工具中的需求狀態。在實際研發過程中,這是很常見的現象,以至於統計發現很多需求的交付週期都是0天,因爲這些需求都是在開發完成之後,開發人員補錄的需求,然後從看板第一個階段列直接拖動到最後一列,這樣統計出來的數據就會有極大地失真。當然,我們應該更多使用自動化的手段來同步狀態,比如開發提交、提測、部署等行爲會自動觸發對應需求狀態的流轉,但這也需要工具平臺開發出對應的能力,實際上也需要成本的投入。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"既然度量有這麼高的成本,那我們還需要做麼?我的答案是,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"當收益大於成本的情況下,度量就是值得做的"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。度量指標應該少而精,每個指標都要追求其投資回報比。但是一些企業仍然傾向於定義大量的度量指標以彰顯其專業性,有的甚至達到了成百上千個指標。這樣的做法除了給企業帶來巨大的成本,好像很難體現出應有的價值。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在度量指標的選擇上,我們經常提到一個詞叫做“北極星指標”,也被稱爲是首要關鍵指標(One Metric That Matters)。北極星是天空北部的一顆亮星,離北天極很近,幾乎正對着地軸,從地球北半球上看,它的位置幾乎不變,所以古代人們經常依靠它來辨別方向。在度量領域,我們可以根據當前企業的上下文,在不同領域選取少量的北極星指標來指導我們改進的方向,從目標出發驅動改進,從宏觀下鑽、定位到微觀問題後再引入更多的過程性指標進行輔助分析。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"8. 貨物崇拜,照搬業界對標的指標"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"貨物崇拜(Cargo Cults)是一種宗教形式,尤其會出現在一些與世隔絕的落後土著部落之中。當貨物崇拜者看見外來的先進科技物品,便會將之當作神祇般崇拜。第二次世界大戰期間,盟軍爲了對戰事提供支援,在太平洋的多個島嶼上設立了空軍基地,以空投的方式向部隊及支援部隊的島民投送了大量的生活用品及軍事設備,從而極大的改善了部隊以及島民的生活,島民也因此看到了人工生產的衣物、罐頭食品以及其他物品。戰爭結束後,這個軍事基地便被廢棄,貨物空投也就自然停止了。此時,島上的居民做了一件非常有意思的事情——他們把自己打扮成空管員、士兵以及水手,使用機場上的指揮棒揮舞着着陸信號,進行地面閱兵演習,試圖讓飛機繼續投放貨物,貨物崇拜因此而誕生。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這種現象在研發效能領域時有發生,儘管貨物崇拜的度量指標制定者們並沒有像島民一樣揮舞着指揮棒,但他們卻大量的複製和粘貼着從網上的各類文章中找來的度量指標,這些指標的定義有其場景和上下文,但他們對這些背景和工作原理並不是很瞭解。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Google可以說是國內公司膜拜和學習的典範,其在度量工程生產力方面也有明確的“QUANTS”模型,分別是:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"代碼質量(Quality of the code)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"工程師注意力(Attention from engineers)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"智力複雜性(Intellectual complexity)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"速度與速率(Tempo and velocity)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"滿意度(Satisfaction)"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這個指標體系看起來很不錯,但是如果一個組織或團隊的成熟度還比較低,連最基本的需求流轉、敏捷協作都沒有做好,上來就引入和對標這些對工程能力和工程師文化有一定要求的指標,很可能適得其反,落入貨物崇拜的誤區。另外,前兩年在網上也有關於高效的工程師每天能寫多少行代碼的討論,據說Google的工程師平均每天能編寫100-150 行代碼。但如果不管其上下文(技術架構、平臺能力、工程師級別、協作模式、質量標準、統計口徑等),直接使用這個指標來進行對標,一定會搞得工程師苦不堪言。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"9. 捨本逐末,爲了度量而度量"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我們經常說:不要因爲走得太遠,而忘記了爲什麼出發。官僚主義的一個問題是,一旦制定了一項政策,遵循該政策就成了官僚主義的目標,而不管該政策所支持的組織目標是什麼。研發效能度量是爲目標服務的,如果一種度量真的很重要,那是因爲它必須對決策和行爲產生一些可以想象的影響。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"比如軟件開發團隊的經理希望通過引入新的持續集成系統來提高生產力,這就是一個明確的目標,在初期落地執行時,可能會採用持續集成系統註冊用戶數這個指標來進行度量。但是系統的使用不是目的,而是提升生產力的手段,我們更應該度量的是應用系統後,是否解決了開發人員對測試快速反饋的需求,質量和效率是否得到了有效提升。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在Google,使用GSM(目標\/信號\/指標)框架來指導目標導向型指標的創建:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"目標是期望的最終結果。 它是根據從更高層次上理解的內容來表達的,不應包含具體的度量方法的參考。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"信號是目標達成與否的結果。 信號本身也可能無法度量。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"指標是信號的代理。 代理的含義是指由於信號本身可能無法量化,因此需要通過指標來代理信號的量化。指標是一定可度量的內容。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"舉個例子,比如企業希望代碼的可讀性提高,這樣可以得到更高質量、更一致的代碼,也能促進健康的代碼文化,那麼按照GSM框架:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"目標:由於可讀性的提高,工程師編寫了更高質量的代碼"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"信號:可讀性過程對代碼質量有積極的影響"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"指標:可讀性評審對代碼質量沒有影響或負面影響的工程師比例、參與可讀性過程並改善了其團隊的代碼質量的工程師比例"}]}]}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"10. 僅從管理角度出發,忽略了爲工程師服務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在與國內一些企業的交流中我發現,很多公司的研發效能度量都是主要從管理者的視角出發的,無論是工時、人員飽和度等衡量資源利用率的指標,還是需求交付週期、吞吐量等衡量流動效率的指標,本質上都是從管理維度看待研發效能這件事情。但是在前文中我也提過,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"我們不應該把員工當成一種”資源”,而是要作爲”工程師”來看待。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"員工幸福感的下降不僅會影響代碼編寫過程的生產力,還會影響結果代碼的質量。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"所以我們做研發效能提升,本質上還是要多關注工程師的感受,他們對工作環境、工作模式、工作負載、研發基礎設施、項目協作、團隊發展、個人提升是否感到滿意,是否有阻礙工程師發揮更大創造性和產生更大生產力的因素存在。工程師個人效能的有效提升是組織效能提升非常關鍵的組成部分。就像Facebook會把“不要阻塞開發人員”作爲貫穿公司研發和管理實踐中的核心原則之一,就是強調公司流程和實踐也要從工程師視角來考慮問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"那麼,我們如何度量工程師的滿意度呢?我們可以選擇eNPS(Employee Net Promoter Score)來衡量員工的忠誠度,更高的員工忠誠度可以讓工程師提供更卓越的服務,讓客戶滿意,最終助力企業業務的成功。當然,我們不僅關注eNPS指標的數值本身,還可以將其與其他人力資源指標結合起來,這樣就可以知道爲什麼員工會給出負面反饋,這將揭示表象背後的原因,並幫助管理者尋找改進的方法。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"小結"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"“成功大都相似,失敗各有不同\"。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"本文分析了研發效能度量的難點和常見的“反模式\",希望大家能夠在開啓效能度量之旅之前,先辨別清楚方向,避免一開始就陷入到沼澤泥潭之中。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"研發效能度量“難不難”和“做不做”是兩回事情,正因爲其蘊含的巨大價值,我們還是要想辦法去探索和實踐。在下一篇文章中,我會具體介紹BAT等多個“互聯網大廠”和業界標杆企業的效能度量案例,並總結和提煉出其中隱含的度量設計思路和關鍵原則。敬請期待!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"作者介紹:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#333333","name":"user"}}],"text":"張樂,DevOps與研發效能資深實踐者,長期工作於擁有數萬研發的互聯網大廠(百度、京東等),主攻敏捷與DevOps實踐、DevOps平臺建設、研發效能度量體系設計等方向,歷任資深敏捷教練、DevOps平臺產品總監、研發效能度量標準化聯盟負責人等崗位。長期活躍於技術社區,目前是DevOps起源國際組織DevOpsDays中國區核心組織者,同時也是國內多個技術峯會的聯席主席、DevOps\/研發效能專題出品人、特邀演講嘉賓。EXIN DevOps全系列國際認證授權講師、鳳凰項目DevOps沙盤國際授權教練。歷任埃森哲、惠普等全球五百強企業資深諮詢顧問、技術專家,多年敏捷與DevOps轉型、工程效率提升和大型項目實踐經驗。暢銷書《獨角獸項目:數字化時代的開發傳奇》譯者。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"系列文章推薦閱讀:"},{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/theme\/107","title":null,"type":null},"content":[{"type":"text","text":"研發效能啓示錄"}],"marks":[{"type":"underline"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章