不是所有 Bug 都值得修#
大型軟體系統都帶有無數已知和未知的 bug。聰明地決定要專注於哪些 bug、忽略哪些 bug,能大幅提升你的除錯效率。你的目標不是把 open issues 數量降到最低,而是交付可靠、可用、可維護、高效的軟體。
透過 issue-tracking system 設定優先順序,將精力集中在高優先順序的問題上,忽略低優先順序的問題。
高優先順序的問題類型#
- 資料遺失 (Data Loss):使用者將資料託付給你的軟體,一旦失去信任就很難重建
- 安全性 (Security):影響資料的機密性、完整性或服務的可用性。安全問題常被惡意人士利用,可能帶來巨大的金錢和聲譽損失。安全問題絕不能掃到地毯下
- 服務可用性降低 (Reduced Service Availability):停機時間可以直接用金錢衡量(有時是數百萬)。失去的商譽、深夜的電話、塞爆的客服也是要避免的後果
- 安全性 (Safety):可能導致人員傷亡、財產損失或環境危害的問題。如果你的軟體可能以這種方式失敗,需要比本書更嚴格的流程
- 當機或凍結 (Crash or Freeze):可能導致資料遺失或停機,也可能暗示安全漏洞。好消息是可以透過 postmortem debugging 相對容易地排查
- 程式碼衛生 (Code Hygiene):compiler warnings、failed assertions、unhandled exceptions、memory leaks 和低品質程式碼,是嚴重 bug 滋生和隱藏的溫床。不要讓這類問題持續累積
可降低優先順序的問題類型#
這些問題不是不重要,而是可以暫時擱置以處理更緊急的事項:
- Legacy 支援 (Legacy Support):支援過時的硬體、API 和檔案格式值得讚賞,但從商業角度看,你服務的是一個萎縮的市場
- 向後相容性 (Backward Compatibility):是否要維持相容,取決於你的產品策略。有些公司以此建立聲譽(如 Nikon 的鏡頭相容性),有些則選擇果斷淘汰舊版本
- 外觀問題 (Cosmetic Issues):可能極難修好又容易忽略,你不太會因為 bubble help 被截斷而失去客戶
- 有文件化 workaround 的問題 (Documented Workarounds):有時記錄一個 workaround 比正式修復更務實
- 罕用功能的問題 (Rarely Used Features):與其解決問題,移除該功能可能更有效率。收集使用數據有助於做出這類決策
當你決定忽略一個低優先順序的問題時,要明確記錄這個決定。在 issue-tracking system 中以 “won’t solve” 關閉它,這樣可以記錄決策並避免未來重複管理的開銷。
重點回顧#
- 不是所有問題都值得解決
- 修復低優先順序的問題,可能會佔用你處理高優先順序問題所需的時間