跳至主要內容

敏捷贏瀑布只靠一條理由,AI 把它抽掉了——而接手的不是瀑布

兩雙手從畫面左右兩側各自拉住一條銀色鏈條,鏈條在藍色背景前被拉成一直線

敏捷贏瀑布,靠的其實只有一條理由。而 AI 剛好把那條理由抽掉了——但接手的不是瀑布。

先講清楚我不主張什麼。我不是要在這裡宣布瀑布平反,也不是要說「spec-driven development」是我發明的詞——業界討論它很久了。我要主張的只有一件事:敏捷與瀑布的取捨,從頭到尾建立在一個成本假設上;那個假設正在我手上失效,而失效的方式跟大多數人以為的相反。

還有一件事要先標好:這篇是論證文,不是實測報告。上一篇我給你的是一組讀數,這篇沒有。它的力氣全部花在拆一條推理鏈上——如果那條鏈斷在哪裡,你不需要任何數據就可以推翻我。文末我會把證據等級一條一條標清楚。

一、敏捷贏瀑布,其實只靠一條理由

我們把敏捷勝出的理由講得很多——擁抱變更、持續交付、快速回饋、以人為本。但真正在承重的,其實只有一條:需求會變,而改的成本很高。

順著這條理由往下推,整套邏輯是這樣長出來的:

前期大設計(Big Design Up Front)=在你對問題理解最淺的那一刻,一次把方向賭死。一旦賭錯,代價不是「改個文件」,是大量已經寫好的 code 白寫。推倒重來很貴,貴到你賭不起。

所以「改的成本高」是瀑布的原罪。而敏捷的整套機制——短迭代、持續交付、擁抱變更——本質上是一種避險工程:既然你賭不起大的,那就把賭注切小,讓每一次「賭錯」的下注額都在你賠得起的範圍內。

這裡值得停一下:

敏捷贏,不是因為它天生更對,而是因為在「改很貴」這個前提下,把賭注切小是理性的。

換句話說,這條贏的邏輯,地基是一個成本假設,不是一條真理。而成本假設這種東西,是會被技術換掉的。

二、AI 從兩個相反的方向抽掉那塊地基

AI 沒有選邊站。它做的事更狠——它把上面那塊地基抽掉了,而且是從兩個相反的方向同時抽

一個方向讓瀑布的原罪失效,另一個方向把整個瓶頸搬家。這兩件事必須一起看,只看其中一個都會得出錯誤的結論。

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#293038','primaryBorderColor':'#00F7DA','primaryTextColor':'#E8F6F3','secondaryColor':'#1B2026','tertiaryColor':'#1B2026','lineColor':'#00F7DA','textColor':'#E8F6F3','fontSize':'15px','clusterBkg':'#1B2026','clusterBorder':'#3A434D'}}}%% flowchart TD OLD["舊世界的地基「改的成本高」=瀑布的原罪"] --> WHY["∴ 敏捷贏瀑布用短迭代把賭注切小"] OLD -.->|"AI 抽掉地基"| B1 OLD -.->|"AI 抽掉地基"| B2 B1["斷點① 寫 code 崩價「做錯了重做」變便宜→ 白寫不再那麼痛"] B2["斷點② 瓶頸整個搬家「寫得出來嗎」→「你要什麼/你驗得出嗎」"] B1 ==> NEW["新形狀明確的意圖 × 緊的回饋迴路"] B2 ==> NEW NEW --> D1["純瀑布死在回饋太晚"] NEW --> D2["純敏捷(cowboy 版)死在意圖從沒被寫下"] classDef highlight fill:#00F7DA,stroke:#00F7DA,color:#0E1116 classDef warn fill:#3A2028,stroke:#FF6B6B,color:#FFD9D9 class NEW highlight class D1,D2 warn

斷點①:寫 code 的成本崩塌,於是「白寫」不再那麼痛

寫 code 的成本崩塌,直接後果只有一個:「做錯了重做」變便宜了。

瀑布最怕的那件事——賭錯方向、大量 code 白寫——威力因此大幅下降。既然重寫幾乎免費,那句對瀑布最核心的指控「一次寫太多會浪費」,就鬆動了。

這是個反直覺的結果,而我認為它值得被講白:AI 反而讓瀑布的一部分反對意見失效了。 敏捷當年那些「別做大設計、免得白寫」的告誡,前提正在蒸發。

但請注意分寸,我在這裡不打算多送你一寸:失效的是「白寫成本高」這一支反對意見,不是瀑布整體翻案。 瀑布還有另一個真問題——回饋太晚——那個問題 AI 一點都沒有解決,而且待會你會看到,它反而變得更致命。

斷點②:瓶頸整個搬家,從「做得出來」到「要什麼、驗得出嗎」

這是更關鍵、也更容易被忽略的一處。AI 不只是讓某個環節變便宜,它把整個瓶頸搬了家

  • 舊瓶頸:「這東西寫得出來嗎?」——實作能力是稀缺資源。
  • 新瓶頸:你知道你要什麼嗎?」+「你驗得出它對不對嗎?」——意圖的清晰度與驗證能力,成了新的稀缺資源。

為什麼會這樣?因為 AI 產出快。你餵它一個模糊的意圖,它不會停下來問你到底要什麼——它會照著它猜的方向,快速產出一座自信但錯的山。

產能不再是限制。於是天花板換人當:你有沒有能力指定正確的方向、有沒有能力判斷它交回來的東西對不對,直接變成整件事的上限。

而這裡有一個惡性的乘數:產出越快、越廉價,模糊意圖的代價就被放得越大——因為錯誤也被同樣廉價、同樣快速地大量生產。

瓶頸從「手」,移到了「腦」與「眼」:定義(你要什麼)與驗證(它做對了沒)。

三、新形狀:明確意圖 × 緊回饋迴路

把兩個斷點合起來看,AI 協作真正獎勵的形狀就浮出來了。它同時要兩種美德——而這兩種美德,剛好分別來自瀑布與敏捷:

美德 出身 在 AI 協作裡對應什麼
明確的意圖 瀑布 先把「要什麼」想清楚、寫下來,AI 才有方向可以跟
緊的回饋迴路 敏捷 短週期驗證產出對不對,別讓錯誤的山越堆越高

而兩種純粹版,各自會死在自己缺的那一半:

純瀑布 → 死在「回饋太晚」。 就算意圖寫得再清楚,等到最後才驗,一座自信但錯的山已經堆完了。而且 AI 堆山的速度比人快得多——這意味著「回饋太晚」這個瀑布的老毛病,在 AI 協作裡不是變輕,是變重

純敏捷(cowboy 版)→ 死在「意圖從沒被寫下來」。 只顧快速迭代、擁抱變更,卻從沒把「到底要什麼」固定成一份可對照的東西。AI 拿著模糊指令,會一路自信地跑偏,而每一輪迭代都在把偏差當成既成事實往下疊。

所以正解不是二選一,而是取兩者的美德、去兩者的死穴:用瀑布式的明確意圖給方向,用敏捷式的緊回饋迴路防跑偏。

這裡要接上我上一篇的結論,因為它們其實是同一件事的兩個切面。上一篇我講的是:投資輸入(把 context 給對)跟驗證輸出,是對稱互補、不是兩條可以各自採納的建議——因為輸入端的失敗長相是「不在場」,而不在場不會報錯,你只能從輸出端測到它。

換到方法論這一層,同一組關係換了名字:

明確的意圖,就是投資輸入。緊的回饋迴路,就是驗證輸出。它們不是兩個可以各挑一個的選項,是同一個迴路的兩端。

少了任何一端,你拿到的都不是「半套的好」,而是一個你以為在運轉、其實沒有讀數的系統

四、對 Agile Manifesto 的重讀:一句在今天變危險的建議

順著上面這條線走下去,會撞到一句大家都會背的話。

Agile Manifesto 那句名言——"working software over comprehensive documentation"(可運作的軟體,重於詳盡的文件)——對 AI 協作來說,我認為已經變成一句危險建議

當年這句話是對的。它針對的痛點很具體,有兩個:

  1. 文件寫了沒人看;
  2. 維護文件太貴——人力手動維護,需求一改就過時。

在那個成本結構下,「別花力氣在文件上,把力氣放在能跑的軟體上」是理性的資源配置。

但 AI 把這兩個前提拆了:

第一,AI 恰恰需要那份文件才有方向。 這裡指的不是操作手冊式的 documentation,而是 documentation-of-intent(意圖的文件)——你要什麼、為什麼要、什麼算對。這正是第二節那個新瓶頸要的東西。對人類團隊來說,文件是溝通的輔助;對 AI 協作來說,這份文件不是可省的成本,它是方向盤本身

第二,「維護文件太貴」這個當年的反對理由,被 AI 自己消掉了。 過去文件會過時,是因為維護靠人、很貴;現在 AI 自己就能廉價地維護這份意圖文件。那條「別寫文件、反正會過時」的理由,地基跟第一節那條一樣,蒸發了。

於是同一句 Manifesto,換到新的成本結構下,就從智慧變成了陷阱:它叫你別做的那件事(把意圖詳盡寫下並維護),正好是 AI 協作最需要、而且現在最便宜的一件事。

這裡我要替 Manifesto 說一句公道話,不然我就是在稻草人。原文寫的是 over,不是 instead of——它自己在下面明講了:右邊那些項目仍然有價值。真正被誤讀成「不用寫文件」的,是後來的實踐者,不是那份宣言。而順帶一提,瀑布模型也有同樣的命運——Royce 1970 年那篇被當成瀑布起源的論文,本身就在警告單次通過、不迭代的做法會出事。兩邊的原典都比它們的信徒溫和。

所以我不是在叫你回去寫百頁 SRS。我要的是意圖文件,不是規格官僚。這兩者的差別不在厚度,在於它回答的是「要什麼、為什麼、什麼算對」,還是「按鈕放左邊還右邊」。

就地交代我自己怎麼做的,並標好證據等級:我自己的 AI 協作系統走的是規格驅動——先有條文化的規格當權威,再有可執行的操作去落地,每個階段設一道 Gate,過了才放行。這條紀律在我的系統裡跑了幾個月,它確實把「AI 自信地跑偏」擋掉了不少。但這是自證:我自己的系統、我自己的判斷,沒有對照組,也沒有公開發表。你可以不信——這篇的論證不靠它成立,它只是一個實例。

五、代價

我不打算給你一份沒有帳單的建議。上面每一條主張都要付錢,以下是六筆。

主張 它會怎麼壞
重寫變便宜了 便宜的是打字,不是理解。 重寫的真成本已經移到了 review、遷移、以及「你根本沒發現它重寫錯了」。把「產出便宜」直接當成「改變便宜」,是這整條推論裡最容易犯的錯
先把意圖寫清楚 對探索性任務,過早精確化會扼殺發散——在你還不知道要找什麼的時候先鎖死範圍。這時候模糊是功能,不是缺陷
意圖文件由 AI 廉價維護 廉價維護出來的文件,也可能廉價地錯。而且一份沒有人真的拿去對照的意圖文件,就是新的裝飾——寫下了 ≠ 被讀了 ≠ 起了作用
緊的回饋迴路 迴路要有人點火,而人會累。防線真正的死法不是被推翻,是被略過;一個從來只吐「通過」的驗證,跟沒有驗證不可分
documentation-of-intent 最容易長成規格官僚。 你會先加一份意圖模板,再加一道意圖審查,再加一個意圖版本規範——然後你就重新發明了 1998 年
這篇文章本身 如果你讀完決定導入一套「意圖文件治理制度」,你就親手示範了它要防的病。修過度工程的藥,不得變成新的過度工程。 本文所有建議的力度上限是「一句自問,追不到就停」

最後一列不是自謙,是必要條件。一篇說「別把方法論當信仰」的文章,如果它自己催生了一套新儀式,那它就推翻了自己。

六、所以什麼時候偏瀑布側、什麼時候偏敏捷側

到這裡該給的不是答案,是切換的判準。這兩側都不是永遠該開滿的。

情境 該偏哪一側 為什麼
目標本身就是發散、你還在找問題 意圖側關小 過早精確化會殺掉探索。此時把方向寫死,你只是把猜測升格成規格
一次性、風險低、可逆的小事 兩邊都免 花力氣準備的收穫小於成本。硬上全套只會變成儀式,還把人搞累
多階段、跨 session、要交給 AI 自己跑一段 意圖側開滿 這是 AI 唯一能拿到的方向盤。這裡省下的每一分鐘,都會在下游變成一座自信但錯的山
產出會進到別人手上,或會被拿去做決定 回饋側必開 這裡的錯誤不由你承擔,你沒有資格用「我看起來沒問題」結案
不可逆、碰錢、對外發布 回饋側必開,而且最後一關要是人 換一個 AI 來審,消不掉它們天生一樣的盲點。這種事情上多一層不叫過度工程
你發現自己連續三輪驗證都判「通過」 停下來檢查迴路本身 一個從來沒說過一次「這個方向錯了」的回饋迴路,跟沒有迴路一樣。此刻該懷疑的是機制,不是產出
你發現自己在為「文件格式」開會 兩側都關,先停 意圖文件的價值在於被對照,不在於被規範。開始管格式,就是官僚化的第一個症狀

結論:問題換了一題

舊問題是這樣問的:

我該選敏捷還是瀑布?

這題現在問錯了。錯在它預設了兩者的取捨是永恆的——但那個取捨從來只是一個成本結構的投影,而成本結構已經被換掉了。

該問的是這兩題,順序不能倒:

我要什麼,寫下來了嗎?
如果我要錯了,我會在哪裡、隔多久發現?

第一題是瀑布留給我們的美德,第二題是敏捷留給我們的。AI 沒有讓我們在兩者之間選邊——它讓我們必須同時要兩邊,因為它同時放大了兩邊的死穴。

立即可做的 3 件事

每一件都要在今天做完,而且必須產出一個讀數。沒有讀數的不算。

  1. 翻出你手上正在跑的那個任務,找出「意圖」寫在哪裡。 不是找需求單,是找「什麼算對」。找不到,讀數就是零——那你這幾天餵給 AI 的,全部是你腦子裡的東西,而它讀不到你的腦子。

  2. 量一次你的回饋間隔。 從「AI 產出」到「有人真的判斷它對不對」,中間隔了多久、隔了幾輪?讀數=那個間隔。 如果答案是「等它全部做完再看」,那你正在跑純瀑布,只是跑得比較快。

  3. 找一份你最近讓 AI 維護過的文件,跟現況對一次。 廉價維護是這篇的核心前提之一,讀數=對不上的地方有幾處。對不上,代表你的方向盤是鬆的,而你一直以為它是緊的。

長期培養的習慣

  1. 把「什麼算對」寫在動工之前。 不用長,一句也行——但它必須在你開始產出之前就存在,不然它只會變成事後追認。

  2. 每寫下一條意圖,順手登記一句「它若被違反,我會在哪裡發現?」 答不出來的那一條,此刻就是裝飾。這句話比任何治理制度都短。

  3. 每半年回頭問一次:我現在守的這條方法論紀律,它的成本假設還成立嗎? 敏捷贏瀑布的那條理由撐了二十年才失效。你手上一定還有別的紀律,正靠著一個已經消失的前提在運轉。


查證與證據等級

本文的主張分三類,這裡分開交代。

外部事實(可公開查核)

論證(不靠數據,靠推理鏈)

第一節到第四節的主體是一條推論鏈:敏捷的優勢建立在「改的成本高」→ AI 從兩處抽掉這個前提 → 因此獎勵的形狀改變。這條鏈可以被純邏輯推翻,不需要任何實測。 最脆弱的一環是「重寫變便宜」——如果你認為重寫的成本從來就不在打字上,那第一個斷點的力道會大幅減弱(我在代價表第一列自己標了這一點)。

自證主張(n=1,不可復現)

第四節提到的「規格驅動 + 階段 Gate」是我自有系統的實踐,有版本紀錄可回溯,但未公開發表、無獨立驗證、無對照組。它的作用是提供一個實例,不是提供證據。

明示不主張

本文不主張瀑布回歸,不主張「規格驅動開發」是我提出的概念,也不主張本文提出的形狀適用於沒有 AI 參與的團隊協作。


如果這篇讓你想去翻一次「我到底把意圖寫在哪裡」,歡迎訂閱我的 Newsletter。每週一篇,我會把自己系統裡量到的東西——包含那些量出來很難看的——寫給你看。

特色圖片:Photo by cottonbro studio on Pexels