← 所有文章

品質是唯一的變數

專案經理的工作是平衡四個變數:範圍、時間、成本與品質。經典的限制三角形告訴我們,你最多只能同時優化其中兩個。想要又快又便宜?品質就會打折。想要又好又快?成本就會攀升。在資源受限的環境中,這個三角形確實是實用的思維模型。

但我並不在資源受限的環境中運作。我使用的 AI 代理能以推論速度產出程式碼,上下文視窗容納得下整個程式庫,而一次工作階段的成本以美元計,而非薪資。限制三角形就此崩解。

當代理能在數分鐘內實作一項功能,問題不再是「我們負擔得起把事情做對嗎?」而是「我們為什麼要把事情做錯?」

逐一排除

把時間從決策中移除。不問「這要花多久?」而問「完成時它應該是什麼樣子?」前者為交付速度而優化,後者為成品本身而優化。

把成本從決策中移除。一次產出正確、乾淨、經過完整測試的程式碼的工作階段,與一次產出權宜、混亂、未經測試的程式碼的工作階段,花費相同。API按 token 計費,不因品質而異。把事情做對的邊際成本是零。

把心力從決策中移除。代理不會疲倦。第一百個函式與第一個函式以同等能力寫就。不存在人類的疲勞曲線來合理化工作階段後期的偷工減料。產出品質取決於指令品質與上下文品質,而非已經過了多少小時。

排除時間、成本與心力之後,剩下什麼?品質。品質是唯一剩下的變數。

實務上的意義

當品質是唯一的變數,許多常見的工程決策變得不言自明:

寫測試。 「要不要為這個函式寫測試」的辯論消失了。代理幾秒鐘就能寫完。邊際成本為零,邊際效益是永久的驗證。不寫測試,等於在毫無節省的情況下選擇接受較低的品質。

修復鄰近的程式碼。 修一個 bug 時,周圍的程式碼往往有相關問題:命名不一致、缺少錯誤處理、過時的模式。在時間受限的環境中,你修了 bug 就把鄰近的程式碼留給「以後」。當品質是唯一的變數,你應該修好所有碰到的東西。以後永遠不會來,而現在是免費的。

使用正確的抽象。 快速的權宜之計解決眼前的問題,正確的抽象解決的是一整類問題。在時間受限的環境中,權宜之計今天就能上線,而抽象永遠上不了線。當代理在同一個工作階段內就能實作任何一種方案,權宜之計便不再有優勢。選擇抽象。

先讀再寫。 在時間受限的環境中,工程師有時會在尚未完整閱讀程式碼的情況下進行修改,僅依賴局部理解。當代理能讀完整個檔案、理解其中的模式、在完整上下文下進行修改,就沒有理由在只有片面理解的情況下動手。讀完整個檔案,理解模式,然後再寫。

不要延後。 TODO、FIXME、HACK 是品質延後的標記。在時間受限的環境中,延後是合理的:等有空再修。當品質是唯一的變數,延後就失去了道理。代理就在這裡,上下文已經載入,現在修和以後修成本一樣。現在就做。

次郎原則

小野二郎做壽司超過七十年。他的餐廳有米其林三星,只有十個座位。菜單和手法從未改變,但他每天都在精煉這套手法,持續了七十年。

當有人問二郎一貫壽司是否夠好,答案從不取決於餐廳有多忙、有多少客人在等候、魚有多貴。答案只取決於這貫壽司是否達到他的標準。標準是絕對的,外在情境無關緊要。

這就是應用於工程的原則:標準是程式碼本身,不是衝刺週期。一個函式要麼正確、乾淨、經過完整測試,要麼就不是。截止日期不會改變這個判斷。預算不會改變這個判斷。唯一的問題是:成品是否達到標準。

AI 代理讓這個原則首次在軟體工程中變得可行。在代理出現之前,次郎原則只是一種理想。人力追求完美的成本太高,每一次偷工減料都有合理的理由:我們週四要上線、預算用完了、工程師已經精疲力竭。有了代理,做對的成本與做錯的成本相同。那些偷工減料失去了存在的理由。

驕傲檢查

每次非瑣碎的變更之後,我會問五個問題:

  1. 一位資深工程師會尊重這段程式碼嗎?
  2. 程式碼是否不言自明?
  3. 邊界情況是否已處理?
  4. 這是否達到了恰當的簡潔程度?
  5. 我是否讓程式庫比我接手時更好了?

這些問題不是在問正確性——證據關卡負責正確性。驕傲檢查負責的是工藝。正確但沒人願意維護的程式碼,過不了第 1 題。聰明但需要註解才能理解的程式碼,過不了第 2 題。只處理了正常路徑卻忽略錯誤路徑的程式碼,過不了第 3 題。

第 4 題最難。「恰當的簡潔程度」不等於「盡可能簡單」。一行的權宜之計比正式的抽象更簡單,但如果問題會反覆出現,那這種簡單就是錯誤的層次。恰當的簡潔,是用最少的複雜度解決實際問題,同時不去解決假想的未來問題。

第 5 題關乎軌跡。每一次工作階段都應該讓程式庫處於比開始時更好的狀態。不只是被修改的特定檔案,還包括周圍的上下文:更新測試、清理匯入、修正註解、移除無用程式碼。標準不是「我完成任務了嗎?」而是「這個專案因為我的存在而變得更好了嗎?」

反論

顯而易見的反論是:速度很重要,交付很重要。一個完美但永遠無法上線的程式庫,不如一個混亂但解決了真實問題的程式庫。

在品質與速度負相關的世界裡,這個反論是正確的。但在 AI 代理以相同速度產出高品質與低品質成果的世界裡,這種相關性被打破了。品質與速度成為獨立變數,魚與熊掌可以兼得。

剩下的取捨是注意力,而非時間。讀完整個檔案需要注意力,執行證據關卡需要注意力,套用驕傲檢查需要注意力。代理的時間是免費的,但你的注意力是有限的。

品質是唯一的變數,而注意力是品質的限制條件。解決之道不是降低標準,而是建構基礎設施來降低維持標準所需的注意力成本:自動捕捉常見錯誤的 hook、將品質工作流程編碼的 skill,以及跨工作階段攜帶上下文的記憶系統,讓你不必重複推導已做過的決策。

這就是複合上下文為品質服務的方式。每一層基礎設施都降低了下一次工作階段的注意力成本。經過足夠多的工作階段,標準就能自我維持。


常見問題

這適用於所有軟體專案嗎?

這個原則最直接適用於由 AI 代理負責實作的專案。在完全由人力實作的專案中,時間與成本仍然是真實的限制條件。隨著代理能力提升、人力實作時間減少,這個原則的適用範圍也會隨之擴大。

原型開發呢?

原型本質上就是可拋棄的。原型的品質標準是「它是否回答了我們正在探究的問題?」如果答案為是,無論程式碼品質如何,原型都已完成使命。這個原則適用於將會留存的程式碼,而非即將被丟棄的程式碼。

這不就是完美主義嗎?

完美主義是一個無限的標準,沒有任何東西能達到。品質是一個有限的標準,由證據關卡定義:正確、乾淨、經過測試、無回歸、解決了實際問題。達到標準是可實現的,超越標準則不必要。標準很高,但並非無限。

如何處理技術債?

不要製造它。技術債就是延後的品質。當品質是唯一的變數,延後就失去了正當性。代理現在就可以使用,現在修和以後修成本一樣。代理產出的技術債不存在利率問題,因為根本沒有理由去承擔它。


參考資料

此處描述的哲學源自日本職人(Shokunin)工藝傳統,以及 AI 工程系列中記錄的生產實務經驗。具體引用的實作包括:

  • 證據關卡:完成驗證的六項準則
  • 驕傲檢查:工藝評估的五個問題
  • Hook 系統:84 個 hook 作為品質基礎設施(Every Hook Is a Scar
  • 複合上下文:降低品質注意力成本的基礎設施(Compound Context

相關文章

證據關卡

「我相信」和「應該沒問題」不是證據。每份完成報告都需要檔案路徑、測試輸出或具體程式碼。在 AI 輸出看似合理的時代,舉證紀律至關重要。

1 分鐘閱讀

睡前必跑的那道指令

每晚例行:15,000頁全面檢查、TTFB實測、快取驗證、Sitemap爬取。這套睡前儀式,正是營運紀律的根基所在。

1 分鐘閱讀

為什麼我的AI代理擁有品質哲學

我的Claude Code代理以機器速度繼承了人類所有的馬虎習慣。我建立了3套哲學、150多道品質關卡和95個hooks。以下是有效的做法。

4 分鐘閱讀