為什麼要用指標來驅動進度#
彼得·杜拉克(Peter Drucker)在《有效的管理者》(The Effective Executive)中寫道:「If you can’t measure it, you can’t improve it.」 沒有量測,我們只能依靠直覺前進,也無從知道直覺是否正確。
宏大目標往往需要長時間耕耘才能達成,而維持動力的最佳方法是清楚知道自己「已前進多少」。 作者葉禮華在 Google 搜尋品質團隊時,發現用「點擊率(Click-through Rate)」衡量結果好壞並不夠——使用者可能點開連結後馬上跳回(短點擊)。 Google 改採「長點擊(Long Click)」率作為使用者滿意度指標,從此每次實驗都有可靠標尺。 這個指標也催生了人名搜尋分類器、Universal Search 等重要功能。
好的指標能帶來四種價值#
- 聚焦正確目標:無論是優化前端介面、後端效能或推薦演算法,都能透過指標統一回答「是否提供了更好的體驗?」
- 防止回退:當註冊率突降或延遲飆升時,指標儀表板能立即捕捉異常
- 持續推進進步:Box 採用「效能棘輪(Performance Ratcheting)」機制,任何新功能若使延遲超過閾值就不能上線;每次優化又把閾值再壓低,迫使團隊持續進步
- 衡量槓桿:你過去能做到「每週改善 1%」的指標,就能用來判斷新任務是否值得做——是否高於這個歷史槓桿率?
自問三個問題:
- 我能否用某種方式衡量正在做的事的進度?
- 如果這個任務不會改變核心指標,那它還值得做嗎?
- 或者,是否缺了一個關鍵指標?
慎選指標:刺激正確的行為#
指標具強大引導作用,「些微差異的指標會導致巨大行為差異」。 錯誤指標可能誘發錯誤動機,導致團隊背離真正想要的結果。
常見指標陷阱與修正建議
| 領域 | 虛榮指標(Vanity) | 真實指標(Value) | 關鍵行為轉向 |
|---|---|---|---|
| 人力管理 | 工時(Hours) | 每週產出與影響力 | 從「演戲加班」轉向「解決問題」 |
| 內容點擊 | 單純點擊數 | 長點擊(Long Click) | 從「標題黨」轉向「深度內容」 |
| 系統效能 | 平均回應時間 | P95 / P99 Percentile | 從「優化平均」轉向「消滅長尾延遲」 |
| 品質控管 | 修復 Bug 數量 | 未解決 Bug 數量 | 從「刷量」轉向「源頭把關」 |
| 用戶成長 | 累計註冊數 | 週成長率 | 從「短期拉新」轉向「長期留存」 |
| 用戶活躍 | 每週活躍 (WAU) | 依註冊週期分群活躍率 | 看不見「長期流失」轉向看到真相 |
| 客服效率 | 平均通話時長 | 是否真心解決問題 | Zappos 故意「不量測」通話時間,造就客服文化 |
選指標的三個原則#
挑選指標時,要找能同時滿足以下三點的:
- 最大化影響力(Maximize Impact):Jim Collins 在《從 A 到 A+》中稱之為「經濟分母(Economic Denominator)」——若只能挑一個指標長期最大化,最能驅動整體成功的是什麼?
- 可採取行動(Actionable):指標的變化能被團隊的努力因果性地解釋。Eric Ries 在《精實創業》中把總註冊數、總頁面瀏覽稱作「虛榮指標」,因為它們的變化未必反映團隊真實表現
- 既要敏感、也要穩健(Responsive yet Robust):要能快速反映變化(避免月度才看得到結果),但也要排除外部波動造成的雜訊(如用每分鐘平均響應時間會太雜訊,改用每小時或每日就穩定許多)
視覺化儀表板(Instrumentation)#
Twitter 共同創辦人 Jack Dorsey:「Twitter 前兩年我們完全是『盲飛』。我們不知道網路、系統、用戶都怎麼運作的,所以一直當機——因為我們看不見。」
直到工程師開始量測與監控,Twitter 才從常見「失敗鯨魚(Fail Whale)」圖樣的網站,蛻變為 2.4 億用戶可靠服務。
像飛行員一樣,工程師也需要儀表板:
- 高度計告訴你海拔(核心指標)
- 姿態指示器告訴你飛機是否水平(系統健康)
- 垂直速度計告訴你升降率(趨勢方向)
從反例學教訓#
2013 年 HealthCare.gov(歐記健保網站)上線後,前一週只有 1% 的 370 萬註冊者真的成功註冊——其餘人遇到錯誤、逾時、登入問題。 矽谷工程師團隊抵達後,第一件事就是建立儀表板,看清楚使用人數、回應時間、流量分布。 有了能見度後,他們才能加快取得 8 秒降到 2 秒、錯誤率從 6% 壓到 0.5%,最終讓 800 萬美國人成功投保。
Etsy 的「Measure Anything」哲學#
Etsy 每天部署 25 次以上,並奉行「Measure Anything, Measure Everything」原則:
- 用 Graphite 提供彈性、即時的繪圖
- 用 StatsD 在程式碼中以一行就定義新的計數器或計時器
只要把指標與部署時間疊在同一張圖上,就能即刻發現是哪次部署造成異常。
監測工具地圖#
| 監測類別 | 代表工具 | 核心定位 | 適用場景 |
|---|---|---|---|
| 指標蒐集與彙整 | StatsD | 高效聚合器,接收計數器與計時器,減少後端負擔 | 高併發環境下的指標初步處理 |
| 時序資料庫 | Graphite、InfluxDB | 為時間序列數據設計,支持快速查詢歷史趨勢 | 追蹤 CPU、記憶體、QPS 等指標隨時間變化 |
| 集群與基礎設施 | Ganglia、Nagios、Munin | 分散式或主機級監控與告警 | 監控大規模集群或主機健康 |
| 程式碼效能 (APM) | New Relic、AppDynamics | 從資料庫查詢到每一行程式碼執行耗時的深度可視化 | 診斷「為什麼這支 API 這麼慢?」 |
內化有用的數字(Internalize Useful Numbers)#
Google 院士 Jeff Dean 整理了一份「每個工程師都該記住的延遲數字」,能讓我們不必實際建出系統,就能用「信封背面計算」估出設計的效能特性。
常見延遲數字#
| 操作 | 延遲 |
|---|---|
| L1 cache 引用 | 0.5 ns |
| 分支預測失敗 | 5 ns |
| L2 cache 引用 | 7 ns |
| Mutex lock/unlock | 100 ns |
| 主記憶體存取 | 100 ns |
| 用 Snappy 壓縮 1 KB | 10 μs |
| 透過 1 Gbps 網路傳送 2 KB | 20 μs |
| 從記憶體循序讀 1 MB | 250 μs |
| 同資料中心 RTT | 500 μs |
| 磁碟 seek | 10 ms |
| 從網路循序讀 1 MB | 10 ms |
| 從磁碟循序讀 1 MB | 30 ms |
| 加州 → 荷蘭 → 加州封包來回 | 150 ms |
估算範例#
若你要建立一個讀多寫少、寫入需落地、讀取走記憶體快取的系統:
- 寫入磁碟:seek 10 ms ⇒ 每秒最多 100 次寫入
- 從記憶體讀 1 MB:250 μs ⇒ 每秒可讀 4 GB
- 假設物件 ≤ 1 MB:每秒可讀 4,000 個物件
結論:讀比寫快約 40 倍,寫入是瓶頸;若要擴展寫入吞吐,應考慮分散到多機器或批次寫入。
除了延遲外,建議手邊隨時備有:日/週/月活躍數、QPS、儲存量、不同服務的吞吐、流量成長率、頁面平均載入時間、流量在裝置/瀏覽器上的分布等。 這些「常駐數字」能讓你迅速判斷某個量測結果是否合理。
對資料完整性保持懷疑#
Google Apps 工程主管 Sam Schillace 從 Google 學到的反直覺教訓:「所有資料都可能被濫用。 人們會用自己想要的方式解讀資料。」
常見誤判:
- 以相關性當因果性:新介面停留時間變長,是更投入還是看不懂?
- 共生指標飆升:廣告點擊率上升,是因為搜尋品質下降?
- 流量爆衝:是真實使用者還是爬蟲機器人?
防禦資料失真的策略#
- 大量記錄日誌:Netflix 把半結構化日誌丟進 Cassandra,日後再決定哪些有用
- 及早建立「即時觀察日誌」工具:作者在 Quora 為實驗框架建構即時檢查介面,回收極高
- 撰寫端對端整合測試:覆蓋整個分析管線,保護日後變更不誤傷
- 及早檢查資料:別等到分析時才發現幾週的紀錄是錯的
- 用多種方法計算同一指標交叉驗證:能快速察覺異常
- 看到不對勁的數字就立刻調查:是 Bug、解讀錯誤,還是真實異常?
有錯誤資料比沒有資料更糟糕——你會自信滿滿地做出錯的決策。
重點摘要(Key Takeaways)#
- 量測你的進度:沒辦法改進不可量測的事
- 慎選頂層指標:不同指標會引導出非常不同的行為
- 儀器化你的系統:複雜度越高,越需要儀表板防止盲飛
- 記住有用的數字:能快速做信封背面估算,並察覺異常
- 優先確保資料品質:先建立信任,才能用資料說話