1. 衡量的陷阱:Campbell’s Law#

Joel 以 Campbell’s Law 作為這篇文章的核心警告:

「任何量化社會指標越是被用於社會決策,就越會受到腐蝕壓力,也越容易扭曲和破壞它原本要衡量的社會過程。」

翻譯成軟體開發的語境:當你開始用某個指標來評估或獎懲工程師時,那個指標就會立刻失去它的意義。因為人們會開始針對指標本身進行最佳化,而非最佳化指標所代表的目標。

衡量不是壞事。用衡量結果來做自動化決策才是壞事。數字是用來輔助人類判斷的,不是用來取代人類判斷的。

2. 軟體開發中常見的錯誤指標#

2.1 程式碼行數(Lines of Code)#

這可能是最廣為人知的錯誤指標:

  • 如果用程式碼行數衡量生產力,工程師會寫出冗長的程式碼
  • 實際上,最好的工程師往往是「刪除」程式碼最多的人——用更少的程式碼完成同樣的功能,才是真正的功力
  • 一位工程師花一天重構,把 500 行程式碼精簡成 50 行,這在「程式碼行數」指標上會被記錄為「產出 -450 行」

2.2 修復 Bug 的數量#

用修復 bug 的數量來衡量工程師的貢獻,會導致:

  • 工程師搶著修復簡單的 bug,迴避困難的 bug
  • 極端情況下,工程師可能故意引入 bug 再「修復」
  • 真正有價值的工作——預防 bug、改善架構、寫防禦性程式碼——反而得不到認可
  • 幫助其他人避免寫出 bug 的 code review 和 mentoring,在這個指標下完全不可見

2.3 功能完成數量#

按功能數量計績效:

  • 鼓勵做大量小功能,迴避大型但重要的改進
  • 品質讓步於數量——「完成」的定義被降低到「能跑就好」
  • 非功能性的改善(效能最佳化、安全加固、技術債清理)無人問津

2.4 其他危險指標#

  • 提交次數(Commit Count):鼓勵拆分成大量無意義的小提交
  • 覆蓋率(Code Coverage):鼓勵寫無意義的測試來衝數字,而非真正測試關鍵路徑
  • 回應時間(Response Time to Tickets):鼓勵快速回應但不深入解決問題

3. 為什麼軟體開發特別難衡量#

軟體開發之所以特別抗拒簡單的量化衡量,是因為它的本質特性:

  • 產出是知識密集型的:程式碼的價值不在於它的數量,而在於它解決的問題與做出的設計決策
  • 品質是多維度的:效能、可維護性、可讀性、安全性、可擴展性——這些維度之間經常存在取捨,無法用單一指標概括
  • 影響是長期的:今天寫的一段看似簡單的程式碼,可能在三年後因為架構設計良好而為公司節省了數個月的開發時間——但這個貢獻在短期指標中完全不可見
  • 最重要的貢獻往往不可見:mentoring 新人、提出關鍵的設計建議、在 code review 中阻止了一個嚴重的設計錯誤——這些都是極有價值但難以量化的貢獻

這不是說軟體開發完全無法衡量。而是說,對軟體開發的衡量需要更多的人類判斷,而非更多的自動化指標。

4. 更好的方法:專注於結果而非產出#

4.1 區分 Output 與 Outcome#

  • Output(產出):程式碼行數、功能數量、bug 修復數——這些是活動的度量
  • Outcome(結果):使用者滿意度、產品營收、系統穩定性、團隊成長——這些是影響的度量

Joel 的建議是:衡量結果,而非產出。你不需要知道工程師寫了多少行程式碼,你需要知道產品是否變得更好、使用者是否更滿意、系統是否更穩定。

4.2 信賴管理者的判斷#

好的管理不是設計出一套完美的指標系統然後自動運行。好的管理需要:

  • 深入理解每位團隊成員的工作內容與貢獻
  • 能判斷哪些看似「低產出」的工作其實有極高的價值
  • 能辨識哪些「高數字」背後是真正的貢獻,哪些只是對指標的博弈
一個思想實驗

想像兩位工程師:

  • 工程師 A:本季修了 200 個 bug,寫了 15,000 行程式碼,完成了 8 個功能
  • 工程師 B:本季修了 15 個 bug,刪了 3,000 行程式碼,完成了 2 個功能

如果只看數字,工程師 A 完勝。但如果深入了解:

  • 工程師 A 修的都是自己製造的簡單 bug,寫的程式碼冗長且難維護,完成的功能都是低優先級的小改動
  • 工程師 B 修的 15 個 bug 是困擾使用者數月的核心問題,刪的 3,000 行是嚴重的技術債,完成的 2 個功能是公司最重要的戰略功能

這就是為什麼數字不能取代判斷。

5. 數字的正確用途#

Joel 並非反對所有形式的衡量。數字在以下場景中仍然有用:

  • 發現趨勢:bug 數量是在增加還是減少?系統穩定性是在改善還是惡化?趨勢比絕對數字更有意義
  • 觸發調查:如果某個指標突然出現異常變化,這是一個信號,提示你需要去了解發生了什麼——但它本身不是答案
  • 團隊層級的參考:個人指標容易被博弈,但團隊層級的指標(如整體交付速度、客戶滿意度)更難操縱,也更有參考價值
  • 輔助溝通:向非技術利害關係人說明進度與品質時,適當的數字比純文字描述更有說服力

一個好的經驗法則:如果一個指標會被用來決定某人的獎金或晉升,那它幾乎一定會被博弈。把指標當作「觀察窗」而非「裁判」——用它來發現需要關注的領域,然後用人類的判斷來做決策。

6. 總結#

Joel 對衡量的忠告可以濃縮成一句話:好的管理需要判斷力,而判斷力不能被公式取代

數字可以告訴你「發生了什麼」,但不能告訴你「為什麼」和「該怎麼辦」。當管理者試圖用指標來取代深入了解團隊的工作時,他們不是在提升效率——他們是在破壞團隊中最寶貴的東西:信任、自主性與內在動機。