iT邦幫忙

2026 iThome 鐵人賽

DAY 22
0

https://ithelp.ithome.com.tw/upload/images/20260807/20183265q5DpCWmzWI.jpg

昨天你建立了「失敗是資產」的文化理念。今天,你要面對整個組織最不習慣、也是難度最高的一項儀式:召開一場沒有任何人被指責的事故檢討會。


此刻:會議室裡的沉重死寂

早上十點,會議室裡坐滿了人。然而所有人的眼神都在刻意迴避——看著桌面、盯著筆電、假裝刷著手機。只有一個人孤零零地坐在角落,臉色發白、雙手微微發抖。

他是 David,昨晚親手按下那個生產環境部署按鈕的後端工程師。

你心知肚明,這間會議室裡的所有人,此刻都在等待你做一件事:點名指責他

昨晚的生產環境事故極為嚴重:一個微小的配置錯誤,導致整個支付服務癱瘓宕機了整整 47 分鐘,給公司帶來預估高達 230 萬美元的營業額損失。CEO Steve 剛才在走廊上特別壓低聲音對你說:「Bill,這次事故性質太惡劣,必須要有人出面負責。」

你深吸一口氣,走進會議室,緩緩說出接下來的話:

「這次會議的唯一目的,不是為了找出是誰犯了錯。我們要共同找出:我們的系統在哪裡設計得不夠好,才會讓這個錯誤如此輕易地發生?」

會議室裡的空氣瞬間凝固了三秒。

你點開投影片:

無指責事後檢討(Blameless Postmortem)


48 小時前:一個看起來極其正常的變更

讓時間倒回去。

週四下午,David 收到了一個緊急 Ticket:「支付服務響應超時太長,客戶反應卡頓」,產品經理催促:「立刻把 timeout 改成 10 秒」。

他迅速查了代碼,將 api_timeout 參數由原先的 30 秒改成了 10 秒。在本地與測試環境運行均順利通過,PR 也得到了 Tech Lead 的核准(Approve)。下午六點,正式部署生產環境。


38 小時前:第一個警報響起

晚上七點半,系統監控警報突然亮起:支付超時率(Timeout Rate)達到了 23%。當晚值班的 On-call 工程師 Lisa 認為此時剛好是流量高峰,決定「再觀察十分鐘看看」。

然而僅僅十分鐘後,超時率狂飆到了 61%,支付服務全面卡死。

團隊隨後手忙腳亂地花了整整三十分鐘,才驚恐地發現:那個 api_timeout 配置參數,不僅控制了對外的 API 請求,還底層控制了內部資料庫的複雜查詢。 將其改成 10 秒後,所有查詢歷史訂單的大型請求(通常需要 15 到 20 秒)全部被系統判定超時,進而觸發了系統的自動重試機制,瞬間雪崩式地拖垮了整台資料庫。

晚上八點十七分,手動回滾(Rollback)完畢,服務逐步恢復。但無可挽回的損失已經造成。


此刻:你排開的不是名字,而是一條系統鏈

你站在投影幕前問:

「David,在修改參數前,我們有任何架構文件能查到『這個 timeout 還會影響哪些內部查詢』嗎?」David 搖了搖頭。

「Tech Lead,我們的 PR 審查機制中,有任何檢查清單(Checklist)能提醒你『修改此類 timeout 屬於高風險變更』嗎?」Tech Lead 愣在原地。

「Lisa,當超時率(Timeout Rate)大於 20% 時,我們有標準的 Runbook 指南要求你必須立刻回滾,而不是『憑經驗觀察』嗎?」Lisa 低下頭,小聲說:「沒有。」

你環顧會議室:

🚨 本次事故暴露的五大系統性漏洞:

  1. 配置參數缺乏相依性與影響範圍文件
  2. PR 審查流程流於形式,缺乏高風險變更檢查清單
  3. 測試環境資料量過小,根本無法模擬真實生產環境的負載
  4. 系統監控警報缺乏標準 Runbook 處置指南,完全依賴值班人員主觀判斷
  5. 缺乏自動化回滾(Rollback)機制,修復完全依賴繁瑣的人工操作

「這五個系統性漏洞,是我們整套研發架構一直以來默許存在的。David 只是昨晚剛好踩到地雷的那個倒楣鬼。」

CTO 有些猶豫地問:「但……發生了這麼大的損失,難道就這樣放過他,不對外做任何懲處交代嗎?」

你平靜地看著他:「如果我們的結論是『David 以後工作要更小心』,那麼下禮拜同樣的事故,一定會換一個名字在別的工程師身上重演。但如果我們的結論是『合力修補好這五個系統性漏洞』,未來就不會再有任何人掉進同一個坑裡。你覺得哪一個才是真正的對公司負責?」


兩難:揪出戰犯?還是學習改善?

這毫無疑問是組織在進行變革時,最難轉變的文化死角。

🔴 選項 A:揪出事故戰犯,公開點名進行嚴厲懲處 🔵 選項 B:召開無指責檢討會,專注於系統漏洞的修補
短期效益:✓ 快速平息眾怒與高層壓力,看似「有人扛起責任了」✓ 展現出雷厲風行的「強硬管理能力」長期代價:✗ 團隊噤若寒蟬,沒人再敢誠實回報潛在的系統漏洞✗ 真相被隱蔽,成員習慣推諉卸責以求自保✗ 系統架構的漏洞依然存在,下次換下一個倒楣鬼踩雷結果:✗ 治標不治本,團隊陷入互相推諉的惡性循環 短期代價:✗ 短期內會遭受質疑「難道犯錯的人完全不需要負責?」✗ 必須對抗人性中「想尋求懲罰以示警告」的直覺反應長期效益:✓ 建立「安全說真話」的心理安全感,問題能被提早暴露✓ 從失敗中獲取知識,徹底根治漏洞以防同類事故重演結果:✓ 系統代價轉化為組織資產,整體抗風險能力提升

這就是持續學習(Continuous Learning)落地最核心的基石:

無指責事後檢討(Blameless Postmortem)的根本假設是:在事情發生當下,每個人都在他所掌握的上下文資訊中,做出了他認為最合理的決定。要修正的是「讓錯誤極易發生的脆弱系統」,而不是去責怪「被系統引導犯錯的個人」。


翻牌:五項具體行動,零個個人懲罰

你在白板上寫下了五個具體的行動項目(Action Items),分別指派給不同的團隊負責人。在這份改善清單中,沒有任何一項惩罰是針對 David 個人。

你轉身向 David 說:「David,這份配置參數相依性指南,我需要由你配合 Tech Lead 團隊一起建立。因為你親自踩過這個坑,你現在最清楚它的超時邏輯,這個寶貴的經驗對團隊非常重要。」

David 雙眼通紅,難以置信地看著你,隨後用力點了點頭。

會後 CTO 依然有些疑慮:「Bill,你真的確定要開這個先例嗎?」

你拍了拍他的肩膀:「如果我們昨晚懲處了 David,那麼以後其他工程師在修改配置或代碼時,心裡想的就只會是『千萬別被抓到』。他們會開始隱瞞所有不確定的架構細節、選擇性不上報異常。等到下次系統再次崩潰時,我們可能連救火的線索都找不到。但如果我們今天修補了這五個漏洞,系統就會在下一次自動幫大家把危險擋下來,這才是真正對組織負責。」

CTO 沉思了片刻,終於點了點頭。


AI Agent:事後檢討不靠模糊記憶,靠中立事實

無指責檢討會最大的阻礙,往往在於人性的記憶偏差與情緒防衛。

在巨大的事故壓力下,人很容易記錯、選擇性遺忘,或是為了自保而美化某些決策細節。一旦會議演變成「你記得什麼」、「我當時以為」的口水戰,真正的系統缺陷就會被永遠掩蓋。

在 2026 年的 AI 時代,AI Agent 可以直接扮演中立且客觀的「事故現場還原者」:

graph TD
    A[事故發生] --> B[AI 自動收集資料]
    B --> C[Log / 部署記錄]
    B --> D[監控數據]
    B --> E[Slack / Chat 對話]
    B --> F[Git commit / PR]
    C --> G[重建時間軸]
    D --> G
    E --> G
    F --> G
    G --> H[標出系統缺口]
    H --> I[生成 Action Items]
    I --> J[追蹤直到關閉]

AI Postmortem Assistant 自動事故分析:

  1. 秒級事件時間線還原
    AI 自動抓取日誌、Git 提交歷史、CI/CD 部署紀錄以及 Slack 的聊天時間,拼湊出客觀的真實時間線:
[AI 自動還原事件真實時間線]
├─ 16:32 ── 建立 Ticket #4728:"支付響應過慢,請求調整超時設定"
├─ 16:45 ── 提交 Commit a3f892b:修改 payment_service.yaml 配置檔
├─ 17:18 ── PR #892 由 @tech_lead_sam 審核通過 (審查耗時:僅 2 分鐘)
├─ 18:02 ── 完成生產環境(Production)部署上線
├─ 19:31 ── 系統觸發告警:支付超時率達 23% (Lisa 判定為高峰期流量,決定暫時觀察)
├─ 19:42 ── 系統告警升級:支付超時率飆升至 61% (On-call 工程師緊急聯繫 David 介入)
└─ 20:17 ── 執行回滾(Rollback)部署,生產環境恢復正常
  1. 系統缺陷自動診斷
    AI 自動對比歷史事故,產出客觀診斷:
    • 「該 timeout 參數在過去 6 個月內被修改過 4 次,其中有 3 次引發了不同程度的系統異常。」
    • 「PR 審核耗時僅 2 分鐘,遠低於團隊平均審查耗時 18 分鐘。」
    • 「測試環境資料庫資料量僅為生產環境的 8%,完全不具備負載模擬價值。」

現場推演:那場差點演變成批鬥大會的檢討會

我們來看一個業界常見的轉型縮影:

🏢 資料庫遷移事故無指責檢討成果:

  • 問題核心:遷移文件為三個月前撰寫已然過期;測試計畫未涵蓋複雜邊緣時區;測試資料採手動生成,無法反映真實負載;且缺乏回滾預案。
  • 改善行動
    1. 強制要求所有架構變更文件皆標註「驗證有效日期」。
    2. 測試案例必須包含邊緣時區極限值測試。
    3. 測試環境全面導入去敏感化的生產環境真實資料。
    4. 所有的資料庫變更(Migration)必須預先編寫回滾腳本並進行演練。
  • 後續效益:三個月後再次進行大規模遷移,實現 0 故障順暢上線

但如果當時會議的焦點依然是「究竟是哪位 DBA 貼錯了步驟、哪位工程師沒有仔細對齊」,這四項從根本上加固系統的改善措施就永遠不會誕生。


今日金句

「當你本能地去問『是誰犯的錯』時,你就已經主動放棄了『為什麼系統會允許錯誤如此輕易發生』這個更重要的改善機會。」


留給你的問題

在你們團隊上一次遭遇線上重大事故後的檢討報告中,最終的結論是指向了一個具體員工的名字,還是指向了一組系統性機制的修補?

如果是前者,那麼下一次相同的事故,一定會像幽靈一樣,只是換了一個不同工程師的名字出現在新的事故報告裡。

無指責並非「不需負責」,而是由「整個系統」代替脆弱的個人去承擔責任。

明天,我們將聊聊第三航道的另一個管理難題:當多個團隊都在快速進步,但方向卻開始各奔東西時,你敢不敢當那個打破砂鍋問到底、逼大家撕開假设、對齊目標的人?

Day 23 見。


上一篇
Day 21: 你敢不敢把「失敗」變成公司資產?
下一篇
Day 23: 你敢不敢當那個逼大家對齊的人?
系列文
Phoenix 2026:當《鳳凰專案》遇上 AI Agent —— 30 天 DevOps 職場 RPG 冒險27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言