問題

在一輪工作裡加了六條標準條文與兩支檢查腳本,全部標成「觀察」、預設值全是 0, 文件裡誠實地寫著「目前還沒有人填」。四天後回頭盤點,發現九個地方寫著同一類會過期的結論: README、容量規劃文件裡的三處、兩支腳本的提示訊息、計畫文件裡的四項狀態、標準條文的觀察級別、兩個 repo 的進度紀錄。

真正的問題不是有九個地方要改,是沒有任何機制會在狀態改變時提醒任何人。 這九處的命運,跟我四月寫下的另一條待辦一樣——「CI 加檢查擋 :latest」列了五個月沒做, 最後是被一次 build 失敗推著做的,不是因為有人回頭翻那條待辦。 那件事的經過寫在 自架觀測棧掛在 :latest 的後續段落。

為什麼這比「憑證到期」更難處理

TLS 憑證、token、EOL 版本、log 保留期這類東西會無聲過期,但它們至少有明確的到期日, 可以設告警、可以交給 secrets 管理服務。

團隊自己寫下的「暫時狀態」沒有到期日:

憑證到期文件裡的「暫時」
何時失效有明確日期某個人某天填了數字的那一刻
誰會知道監控系統只有填數字的那個人,而且他不知道自己該去改
怎麼盯設 30 天告警沒有辦法設告警,因為不知道哪天會變

所以處理方式不能是「記得回來看」,必須是把提醒綁在會使狀態改變的那個動作上。

解法:提醒放在動作發生的當下

兩支預算檢查在「數字填好且通過」時,多印一段(下面是示意,項目換成你自己的文件):

── 數字填好了,下面這些結論現在過期了 ──
1. README 裡「預設全是 0(還沒有人想過)」那段
2. 容量規劃文件的開頭與「目前狀態」
3. 計畫文件裡對應項目的狀態
4. 規範文件的對應條文:有兩個樣本的真實數字就能提升級案
5. 該 repo 的進度紀錄:把量測條件一起記下來
(這份清單由檢查腳本印出,改動它請一起改)

為什麼是這個位置:填數字的人一定會跑這支檢查——不跑就不知道數字對不對。 而沒有人會回頭翻文件。把清單放在文件裡等人來看,等於沒放。

三條路徑都要分開驗:

  • 沒填時不印(那是提示路徑,還沒到談後續的時候)
  • 填了且通過時印(這才是狀態改變的那一刻)
  • 違規時不印(那是失敗路徑,該先修再談後續)

第三條容易漏。如果違規時也印,使用者會在一堆錯誤訊息裡看到「恭喜,接下來要改這些」,訊號會互相稀釋。

另一半:讓「暫時」有明確的畢業條件

光有提醒還不夠。那六條標準條文原本寫「等第二個樣本」,但沒寫樣本是誰、什麼算通過。 這種寫法下,「觀察」會永遠是觀察——而全是觀察的標準擋不住任何東西。

補上逐條的升級條件之後,浮現一個原本看不見的區別:

  • 有些條文的缺口是**「還沒填」**——填了就能升,只是還沒人去做
  • 有些是**「現在的環境驗不出來」**——例如「副本分散」在單節點的本機叢集上, 填再多數字也驗不出分散有沒有生效,得等多節點環境
  • 有些是**「決定不做」**的結果——依佇列深度擴容需要額外元件,而引入元件的條件不成立

這三種缺口的處理方式完全不同,但在「等第二個樣本」這句話底下長得一模一樣。 寫升級條件的真正價值不是列出條件,是逼自己分辨這三種。

順帶修正的一個門檻

那六條原本要套用共通標準的「四家已實作」門檻。但這組專案裡,扣掉範本本身、CI 平台、 兩個實驗性專案,實際可用的樣本只有兩個。拿四當門檻等於宣告它永遠達不到。

這個門檻原本是在有足夠多獨立實作可以歸納的地方訂的。 搬到樣本數只有個位數的地方,同一個數字會從「防止標準膨脹」變成「保證標準癱瘓」。 所以在該章明確寫下調整與理由,限定範圍,不動其他章。

怎麼預防再次發生

  • 寫下任何「暫時」「目前」「還沒」之前,先回答:狀態改變時,誰會看到提醒
  • 答案是「文件裡寫了」的話,那就等於沒有
  • 找出會使狀態改變的那個動作(跑某個檢查、填某個欄位、換某個版本),把清單印在那裡
  • 清單要自己標明出處(「這份清單由 xxx 印出,改動它請一起改」),否則清單自己也會過期
  • 「暫時」要有畢業條件,而且條件要分辨「還沒做」「驗不出來」「決定不做」三種
  • 成功路徑與失敗路徑要分開:後續清單只在成功時印

相關