改編自 《三隻小豬》

苫茅跟拉夫從未被告知的事

這項計畫實際資助的東西

韌性計畫同時資助了三套新系統——苫茅、拉夫與磐固——各自朝同一份最終負載邁進。它的規則簡單,表面上也合理:在期限窗口內上線,後續資助就會自動延續。錯過窗口,資助就會回到逐案審核。

計畫公開的條款裡,完全沒有提到結構韌性。它精確衡量的,只有一件事——抵達第一次即時流量所花的時間——其餘的一切,全部留給每套系統自己的團隊,依自己的判斷去建造。

苫茅跟拉夫的選擇,以及為什麼

苫茅最先上線,用的是期限所獎勵的最小可行配置——快速、便宜,除了窗口允許的範圍之外,結構上未經測試。拉夫走了一條中間路線,晚了幾天上線,多了一些強化,仍以微小的餘裕留在獎勵窗口之內。

只有磐固,讓那個窗口關上了。她把多出來的那幾週,花在另外兩套系統從來沒有時間去建造的負載路徑跟故障隔離上,眼看著自己的資助回到逐案審核——這是唯一一項,日後才會重要的選擇,當下唯一看得見、立即付出的代價。

那次激增實際測試的東西

那次激增,真正測試的,正是每一套建置實際投入過什麼。苫茅在幾分鐘內就故障了。拉夫撐得久一些,接著在苫茅從未撐到面對過的同一種持續負載下,也故障了。磐固的結構吸收了這一切,不需要甩掉任何一項依賴它的服務。

計畫的第一份事故報告,把這個結果解讀成三項個別的工程判斷,其中兩項不佳。它沒有問,是什麼形塑了這三項判斷,因為報告自己的範本裡,根本沒有能問這個問題的欄位。

那項誘因實際獎勵的東西

第二輪覆核,由一位願意重新讀一遍計畫自己那份資助公式的人促成,發現苫茅跟拉夫的選擇,根本不是工程不佳——那正是那份公式,白紙黑字,要求每一個團隊去優化的東西。磐固的選擇,才是真正的異數,在同一條規則下,被即時、財務上地懲罰。

計畫裡沒有任何人,對苫茅或拉夫說過謊,關於究竟在衡量什麼。也沒有任何人,用一種他們真的能拿來衡量的說法告訴過他們:要建造一項韌性,得放棄一項當下生效的獎勵——直到一次沒有預告時程的壓力事件,讓這項遺漏,變得無法再被忽視。

苫茅跟拉夫從未被告知的事

資助公式被改寫,把韌性投資,完全從上線期限裡解耦出來——一套系統可以領取速度獎勵,同時另外依自己的時程,申請一項強化延期,兩者互不懲罰。事故報告也重新發布,更正了紀錄:苫茅跟拉夫的建置,是對計畫自己選擇獎勵的東西,做出的理性回應。

磐固的結構,證明的不是她比另外兩位更謹慎。它證明的是,計畫從來沒有用一種真的能被權衡的形式,告訴過他們任何一位:速度將會付出什麼代價——直到某件事發生了,讓這筆帳,再也無法藏在一份計畫之外,沒有人有理由去讀的公式裡。

在一項沒有人需要為它辯護的公式底下做出的選擇,不是判斷不佳;那是那項公式自己的判斷,借用了別人的名字。

平行版本

上方是維持原樣的經典版。下方是平行版本——作者認為某位讀者的反應值得留下時,另外發表的完整替代版本,而不是直接修改原作。

苫茅與拉夫仍然被虧欠的事

重新發布的報告,從未抵達的地方

計畫改寫後的公式,第一次接受測試時,運作得完全如設計所願:卡爾維特,這項計畫下一套獲得資助的系統,領取了速度獎勵,同時依自己的時程,另外申請了一項強化延期——這條路,磐固曾經獨自走過、付出代價,早於這套公式存在、讓它變得免費之前——兩者互不懲罰。沒有人在她提出這項延期申請時,問過她:等到延期到期,她預期哪些事仍然為真。

差不多同一時間,一項針對某份招募參考資料、一項跨計畫風險指數,以及一份用來讓新工程師上手的訓練案例研究,所做的例行稽核,發現這三個地方,全都仍在引用事故報告的第一個版本——兩項工程判斷不佳——因為在源頭重新發布一份更正過的報告,從來不包括告訴任何已經抄錄過舊版本的人:它現在說的是不一樣的事。

三份引用,仍然在教的東西

那份招募參考資料,讓拉夫在另一項計畫裡,失去了一個職位——那裡的審核者,讀到的是「工程判斷不佳」,從未看過第二份報告。那項風險指數,仍然把任何外觀類似苫茅原始建置的團隊,計成高風險分數——一個餵進苫茅從未見過、也無從申訴的決策的數字。那份訓練案例研究,把這兩套建置,教給新工程師當成一則關於個人勤奮的警世故事——正是那份更正過的紀錄,原本存在的目的所要撤回的那一課。

這三處引用,依它們各自的規則,沒有一處做錯任何事;每一處,在抄錄的當下,都準確複製了當時為真的東西。這個落差,不在於這三站有誰心懷惡意。而在於一項更正,不像原始的宣稱那樣,從來沒有被賦予任何一個,可以傳遞過去的地方。

卡爾維特的延期,從未被要求說出的事

卡爾維特的強化延期,對它原本設計要對付的負載模式,確實撐住了,完全如預期。它從未被要求在她提出申請的當下說出來的,是她的時程具體依賴著哪一項外部假設——在她的案例裡,是她自己系統下兩層的一項依賴項,會在延期期間,維持目前的授權條款不變。

那項依賴項,在她的延期窗口之內,用三十天的預告期,變更了條款;而計畫的流程裡,從來沒有任何環節,要求任何人知道,卡爾維特的強化時程,其實悄悄賭上了它會保持不變。這次近乎出事的情況,之所以浮現,純粹因為那一週,剛好有人為了別的原因,在讀延期申請文件——跟當初那次激增,能被注意到,所仰賴的,是同一種運氣。

每一次延期,現在都必須指名的事

兩項修法,在同一天下午一起落地——不是因為其中一項蘊含了另一項,而是因為同一次近乎出事,讓兩個缺口在同一個下午,同時變得可見。此後,每一次延期,都必須在提出申請的當下,記錄下自己的時程,具體依賴著哪一項外部假設,以及如果那項假設失敗,誰會因此暴露——不是事後才重建,而是在任何人知道它是否會成立之前,就先說清楚。

而更正,變成了一項欠向未來、而不只是欠給真相的義務:重新發布一份報告,現在必須主動通知計畫找得到的每一處引用,不能只是更新源頭,就宣告這筆帳已經結清。那份招募參考資料、那項風險指數,以及那份訓練案例研究,都在一週之內獲得更正——不是自動發生的,而是因為現在有人被要求去查核,而且要一直查核到這三處,都說出第二份報告,早已說了好幾個月的那句話。

問題從來不是誰撐得最久。是有沒有人,能在選擇之前,就看見自己被要求付費買下的,是哪一個未來——而現在,紀錄終於說出來了。

平行版本

上方是維持原樣的經典版。下方是平行版本——作者認為某位讀者的反應值得留下時,另外發表的完整替代版本,而不是直接修改原作。

苫茅與拉夫終於問得出口的事

通知寄到的地方

通知義務照字面做了。計畫找得到的每一處引用,都被告知那份事故報告已經重新發布,招募參考資料、風險指數、訓練案例研究,一週之內都改好了。每一份通知,都寄給持有那份引用的人。

沒有任何一份,寄給了被那份引用影響的人。拉夫是從另一個計畫的覆核者那裡,聽說舊報告被更正的,那時它害拉夫失去的職位,已經有別人坐上去好幾個月了。苫茅則始終不知道,原本那套建置的偏高分數,曾經餵進過哪些決策。更正送到了紀錄那裡,卻沒有送到人那裡。

被點名的人,現在可以問的事

計畫加了一項反過來走的權利。任何一位在被更正的報告裡被點名的對象,都可以問一個問題:這份判斷,被用在哪裡了?計畫有三十天,從一本登記冊裡回答——此後,每一次引用計畫的報告,都在引用當天登記進去——並且要善意地去找,登記冊顯示不出來的用處。

舉證責任,放在紀錄所在的地方。若答覆後來被發現不完整,提問的人不必證明有一份遺漏的副本存在、也不必證明它造成了傷害;之後才找到的用處,會重新打開那份答覆,而且那次遲到的發現,算在計畫身上,不算在提問的人身上。

舊的判斷,必須交代的事

找到一處用法,只是前半。凡是依第一份報告做出的決定,現在都要由當初做決定的那一方,在期限內,依更正後的紀錄重做一次。依賴過舊判斷的人,要負責證明它其實沒有影響;證明不了,決定就重新打開。

受影響的人,可以向沒有做出那項決定的人申訴,而且不會因此被處罰。補救依重新打開的決定所發現的而定:職位重新審議、分數重新計算、案例研究被換掉。只有通知,什麼也結不了。帳,要等最後一項決定被重做了,才算結清。

苫茅與拉夫終於問得出口的事

苫茅在這項權利開通的那一天,就遞出了第一個提問。登記冊顯示三處用法,正如預期。計畫自己的搜尋,又找到了第四處——一份供應商檢核表,在某一行裡引用了舊報告,而那一行從來沒有人登記過——計畫在期限之前,自己報告了它。苫茅不必證明第四處造成了什麼損失;是檢核表的持有者,得證明它沒有。

拉夫原來的職位被重新審議,沒有恢復,因為那個位子已經有人坐了,覆核者也這麼說。另一個計畫改為提供它的下一個空缺,排在隊伍前面。裁定寫明了還欠什麼,以及記在哪裡。這項權利,碰不到存放在計畫自己紀錄之外的副本,通知上也這麼寫了。有些傷害,仍會留在它落下的地方。但它不會再沒被檢查地留在那裡。