我在公司帶專案有一條硬規定,講起來很不性感:

新的上線之後,舊的先留著。

不是留一天,是留到你確定不需要它為止——通常是幾週,有時候幾個月。

這條規定讓我被念過。有人覺得留著兩套是浪費,有人覺得那代表對新系統沒信心,有人覺得這樣程式碼庫會很髒。

三個說法都對。我還是留。

一個真實的例子

我們有一個評分系統,本來是用 Google Apps Script 寫的。後來規模長大了,GAS 的執行時間上限開始擋路,我們把它搬到 Cloud Run。

搬完之後,新系統跑得很好。快、穩、可以處理更大的量。

我沒有刪掉 GAS 那一版。

程式碼還在,觸發器關掉但沒有移除,資料的連結也留著。整套東西就那樣安靜地躺在那裡,一行都沒有在跑。

同事問我什麼時候要清掉。我說再等等。

為什麼我這麼堅持

理由有三個,而且它們的重要性是遞增的。

一、失敗的時間點永遠很糟

這是最基本的。

新系統不會在你上線後的第一個小時掛掉。那時候大家都在盯著,任何問題都會馬上被發現、馬上被修。

它會在第三週的某個星期五晚上掛掉。或是季末結算的當天早上。或是你剛好在請假的那一週。

墨菲定律在這件事上準確得令人生氣。而那些時刻的共同點是:你沒有時間慢慢修。

有退路的話,你花三十秒切回舊系統,然後禮拜一再來查原因。

沒有退路的話,你就得在星期五晚上、在所有人都在等的壓力下,除一個你還不熟的新系統的錯。

這兩種情境的差別,不是技術問題,是你會不會做出更糟的決定。

二、你其實不知道舊系統在做什麼

這一條比較深,而且我是吃過虧才懂的。

任何一個跑了幾年的系統,都累積了一堆沒有寫在文件上的行為。

某個欄位為什麼要 trim 空白?因為三年前有一次匯入的資料前面多了一個空格,出過事。

為什麼星期天不寄信?因為以前寄過,被客戶抱怨。

為什麼這裡要判斷金額是不是零?因為有一種特殊的合約狀況會這樣。

這些東西不會出現在需求規格裡,因為它們不是設計出來的,是撞出來的。而知道它們的人可能已經離職了。

當你重寫一個系統,你會把明顯的功能都做進去,然後漏掉這些補丁。而你不會在測試的時候發現,因為測試資料是乾淨的。

你會在正式環境遇到第一筆髒資料的時候發現。

舊系統是一份沒有人寫過的文件。 在你確定看懂它之前,不要把它燒掉。

三、有退路的人比較敢往前

這一條最反直覺,也是我覺得最重要的。

大家會以為留退路是保守的表現。我的經驗剛好相反。

沒有退路的團隊會變得非常保守。

因為他們知道一旦切過去就回不來了,所以每一個決定都要開三次會、每一個功能都要多測兩輪、每一次上線都要挑一個「大家都有空」的時間——而那個時間永遠不會到。

有退路的團隊敢在星期二下午上線。因為最壞的情況就是切回去,損失一個下午。

我在公司推 AI 導入的時候,這件事特別明顯。

我一直在講的一個主題是:「如果我們的 AI 帳號明天被停掉,我要怎麼上班?」

有人覺得這個問題很掃興——你不是在推廣 AI 嗎,怎麼一直講它會失效?

正好相反。我就是因為想清楚了斷線那天怎麼辦,才敢讓四百多個人都用下去。

如果我沒想清楚,我會下意識地限制大家的使用深度,因為我怕依賴。而那個限制會讓整件事沒有效果。

這條原則的另外幾個長相

同一個道理,在不同場合有不同的樣子。我列幾個我自己在用的。

寫自動化腳本的時候: 第一版不要直接改資料,先讓它印出「我打算改什麼」,你看過覺得對了,再讓它真的改。

做資料遷移的時候: 舊資料表不要 drop,改名字加個 `_old` 就好。硬碟很便宜,你的週末很貴。

換工具的時候: 確認新工具可以匯出。任何不能把資料拿回來的工具,都是一張單程票。

推流程改革的時候: 明確講「試三個月,不好就回去」。有這句話,反對的人會少一半——因為他們反對的往往不是新流程,是「回不去」這件事。

什麼時候該把退路收掉

留退路也有代價,我不想假裝沒有。

兩套系統並存的期間,你要維護兩套。資料可能不同步。新人會搞不清楚該看哪一個。而且最麻煩的是——只要退路還在,就永遠有人在用舊的。

所以退路不能永遠留著。我用兩個條件判斷什麼時候可以收:

第一,新系統已經走過一個完整的週期。 如果是月報系統,那要跑過一次月底。如果是季度流程,那要跑過一次季末。因為系統最容易出事的時刻,就是那些一個週期只發生一次的邊界。

第二,這段期間真的沒有人切回去過。 如果中間有人切回去過一次,那計時器要重來。

兩個條件都滿足,我才會刪。

而且刪之前我會再備份一次。(我知道這聽起來有點病態。)

一個更大的版本

寫到這裡我想到,這條原則其實不只用在系統上。

我從人資轉職成工程師的時候,沒有辭職去補習。我是一邊做著人資的工作,一邊在辦公室裡偷偷把自己換掉的。

那時候我不覺得自己在留退路,我只是沒有那個勇氣賭。

現在回頭看,那個「沒勇氣」反而是對的策略。因為有薪水在,我可以慢慢試、可以失敗、可以在某個週末發現自己寫的東西完全跑不動然後不用恐慌。

如果我當初辭職去學,我大概會因為壓力而選一條「最快能找到工作」的路,而不是我真正想走的那條。

退路不是讓你不用往前走。退路是讓你在往前走的時候,可以走得比較大步。

(不過我還是很佩服那些直接跳的人。我只是知道我自己不是那種人。)