🎯 什麼情境該想到我

當你「build 已經紅了好幾天,大家還是繼續往上疊新的 commit」的時候。

⚙️ 怎麼用(步驟 / 公式)

意圖:在部署管線斷掉時建立一條虛擬安燈繩(virtual Andon Cord),類比豐田生產系統的實體安燈繩,讓系統快速回到綠燈可部署狀態。

由來(豐田原型):在豐田工廠,每個工作站上方都有一條繩子,每位工人與管理者都受過訓練,在出問題時拉它(零件有瑕疵、需要的零件沒到、甚至工作耗時超過文件所載)。拉下之後組長會被通知並立刻著手解決;若問題無法在特定時間內(例如五十五秒)解決,整條產線就停下來,讓整個組織動員協助,直到發展出有效的對策。

這條的重點:管線早期與後期的處置要分開。

A. 管線「早期」階段壞掉(build、unit tests)→ 全面停線

  • 只要有人引入的變更導致 build 或自動化測試失敗,在問題被修好之前,不允許新工作進入系統
  • 需要協助的人可以把任何需要的援手拉進來。
  • 至少要通知整個團隊發生失敗,讓任何人都能修問題或 roll back 該 commit。
  • 甚至可以設定版控系統,阻擋後續的 code commit,直到管線第一階段(builds 與 unit tests)回到綠燈狀態。
  • 若失敗肇因於自動化測試產生的 false positive,該測試應該被改寫或移除
  • 團隊的每一位成員都應該被賦權(empowered)roll back 那個 commit,讓系統回到綠燈。

B. 管線「後期」階段壞掉(acceptance tests、performance tests)→ 不停下所有新工作

  • 這時不是停掉所有新工作,而是由on-call 的開發者與測試者負責立即修復這些問題。
  • 他們同時應該在管線更早的階段建立新的測試來攔截未來的回歸:在驗收測試中發現的缺陷,就寫一個單元測試來抓它;在探索性測試中發現的缺陷,就寫單元測試或驗收測試。

C. 可見性手段

  • 建立高度可見的指示器,讓整個團隊都看得到 build 或自動化測試正在失敗:掛在牆上的 build 燈熔岩燈(lava lamps)、播放語音片段或歌曲、警笛(klaxons)、**紅綠燈(traffic lights)**等。

書中提醒:這一步在許多方面比架設 build 與測試伺服器更難——那些是純技術活動,而這一步要求改變人的行為與誘因

原文:「Whenever someone introduces a change that causes our build or automated tests to fail, no new work is allowed to enter the system until the problem is fixed.」(L5542–5543)

原文:「When later stages of the deployment pipeline fail, such as acceptance tests or performance tests, instead of stopping all new work, we will have developers and testers on-call who are responsible for fixing these problems immediately.」(L5569–5571)

原文(豐田原型的五十五秒):「If the problem cannot be resolved within a specified time (e.g., fifty-five seconds), the production line is halted so that the entire organization can be mobilized to assist with problem resolution until a successful countermeasure has been developed.」(L1939–1942)

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 不要對「後期階段失敗」也全面停線——書中明確區分兩種處置,全部停線會讓團隊很快放棄這個機制。
  • 若測試本身不可信,安燈繩會被拉爆然後被無視;只自動化可信的測試是它的前提。
  • 這是行為與誘因的改變,不是工具設定。Randy Shoup(前 Google App Engine 工程總監)強調的是「團隊目標優先於個人目標」、「我們的工作不只是寫程式,而是運行一個服務」。

🔗 相關工具