規格驅動開發:當規格成為真相來源
規格驅動開發(spec-driven development,SDD)翻轉了一個長久以來的預設立場。它不再把原始碼當成系統的權威描述、把文字說明當成可丟棄的文件,而是讓一份結構化的自然語言規格成為主要產物:程式碼是從規格生成出來的,而且可以反覆重新生成。GitHub 對這個轉變的說法很直白,就是從「code as the source of truth(程式碼是真相來源)」走向「intent as the source of truth(意圖是真相來源)」。這篇文章談的是規格這個產物,以及圍繞它的方法論。至於把規格交給 agent 的工作階段操作細節,請看 Agentic Workflows;想了解把測試當成關卡的機制,請看 驗證與安全。
SDD 為什麼在 2025 年崛起
SDD 很大程度上是對 vibe coding 侷限的一種回應。對話式、即興式的寫程式很適合探索,但拿來做正式產品就不太可靠:那份「規格」只活在一段聊天記錄裡,意圖會慢慢飄移,沒有人能重建出為什麼程式碼長成這個樣子。2025 年有兩項關鍵變化,讓一套更有紀律的做法變得可行:
- 更大的 context window(脈絡視窗),讓一份完整的規格再加上相關程式碼能塞進同一個工作階段。
- 能把規劃和實作分開的 agent,讓計畫可以先被審查、定案,再讓任何修改落地。
把這件事放到 overview 那條光譜上來看:**用 vibe coding 來探索,用 spec-driven 來交付。**這兩者與其說是對手,不如說是「一項任務該有多少結構」這條連續光譜上的不同位置。
什麼時候用 SDD、什麼時候用 vibe coding
這個決定主要看的是壽命與利害關係,而不是難度。
- 選 SDD:當系統要上正式產品、需要長期維護、牽涉到必須對行為達成共識的多個利害關係人,或是受法規約束、需要一份可稽核的意圖記錄時。
- 選 vibe coding:當這個產物本來就是用完即丟的東西,例如原型、探路用的 spike、一次性的腳本,或是你預期之後會刪掉的實驗。
一個好用的判斷法則:如果你會擔心半年後得在沒有原始聊天記錄的情況下,向別人解釋這段程式碼的行為,那你當初大概就需要一份規格。