iT邦幫忙

2026 iThome 鐵人賽

DAY 1
0

回想 2025 年初到年中,我大多還是搭配 ChatGPT 和 GitHub Copilot 的自動補全來輔助開發。AI 會幫我想解法、補程式碼,但真正要改哪些檔案、下一步怎麼做,主要還是由我自己決定。那時候 AI 比較像是在旁邊協助,真正動手寫 code 的人仍然是我。

第一次訂閱 Claude Code,就被它的能力嚇到

Claude Code 在 2025 年 2 月 24 日先以 limited research preview 推出,到了 5 月 22 日才進入 GA(Generally Available,正式可用)階段。我則是在 6 月 27 日第一次訂閱 Anthropic 的每月 20 美元方案,算起來,那時候 Claude Code 才正式推出一個多月。

不訂閱還好,一訂閱就嚇死人!當時 Claude 模型的 coding 能力,再加上 Claude Code 可以直接搜尋 codebase、修改檔案、執行測試與操作 command line tools,真的彷彿看到漫威電影鋼鐵人中有賈維斯的世界一樣!

2025 年 6 月與 7 月的 Anthropic 訂閱扣款紀錄

才過半個多月,我就因為額度不夠,被迫從 20 美元升級到 100 美元的 Max 方案,正式入坑XD。

當 AI 真的可以動手之後

開始使用 Claude Code 後,我可以做的事情突然變多了。以前覺得很麻煩、一直放著沒做的想法,好像都可以拿出來試試看。更大的差別是,我不再只是讓 AI 補幾段 code,而是逐漸連 code 都不自己寫了。

這段時間也差不多是 Vibe Coding 一詞開始受到關注的時候。我當時和 AI 協作的方式,其實也很接近「說一個、做一個」。用久之後,我甚至覺得自己好像成了慣老闆:想到一件事就丟給 AI 去做,做完再繼續交代下一件。尤其只是想試一個 idea,或是做個小功能時,常常講幾句話就能看到成果。做完一個,就會忍不住再丟下一個需求給它!

當每個想法都可以先丟給 AI 試試看,我想做的東西也跟著越來越多,AI 產出的 code 自然一起往上增加。有時候甚至一天就會新增、修改好幾萬行 code。這樣的變動速度,早已不是我原本熟悉的開發節奏。

不過,當修改範圍越來越大、對話越來越長,問題也開始慢慢浮現了。我明明說要做 A 功能,做著做著,AI 卻忘記前面談過的方向;有時候我想改的是 A 功能,最後做出來的卻是看起來很像、實際上是不同的 B 功能;也發生過 A 功能改好了,原本正常的其他功能卻跟著壞掉。

這些情況陸陸續續發生後,我才慢慢開始對這種工作方式感到不安。我真的可以只用一句話交代需求,就期待 AI 做出我要的東西嗎?它寫的內容符合團隊規範嗎?一次修改這麼多檔案,我又怎麼知道它沒有順手弄壞其他功能?開發速度確實變快了,但我也開始對眼前的結果感到茫然。

現在回頭看,Leslie Lamport 在〈Why We Should Build Software Like We Build Houses〉中寫過的一句話,剛好說中了我當時缺少的東西:

“Thinking doesn’t guarantee that we won’t make mistakes. But not thinking guarantees that we will.”

思考不能保證我們不會犯錯,但不思考則保證我們一定會犯錯。

Lamport 當時想談的,不只是「寫程式之前記得多想一下」。他希望軟體工程師在開始 coding 前,先理解這個程式到底要做什麼,再透過架構與 specification(規格)把它說清楚。至於規格要寫多細,還是得看功能的大小;小功能可能一兩句 spec 就夠了。真正需要避免的,是還沒有想清楚,就直接開始寫 code,再一路靠著試錯與修 Bug 猜出系統應該長什麼樣子。

以前自己動手寫 code 時,打字、設計與修改本身多少會逼著我停下來思考。AI Agent 把速度加快後,這段停下來確認的過程反而逐漸被我忽略了。問題並不是使用 AI Agent,而是我不應該只丟下一句話,就期待它替我完成後面所有的需求判斷、設計、實作與測試。

而且,就算我在對話裡補了更多需求與背景,這些資訊也不會一直完整留著。如果拿現在許多 Claude 模型都已經來到 1M tokens 的 context window 來看,當時的 200K tokens 好像不算特別大;但放回 2025 年,其實已經很可觀了。只是 Claude Code 在工作時,不只會保留我們的對話,讀進來的檔案、tool call、command 輸出和每一輪回應也會一起占用 context。我又常讓它在同一個需求裡反覆讀取檔案、修改檔案和執行測試,所以 200K 看起來很多,實際跑起來卻消耗得很快,沒多久就會進入 auto compact(自動壓縮)。

壓縮過後,前面談過的細節可能就被簡化;如果再換一個 session,又得重新把需要的資訊帶進去。如果需求只留在對話裡,我和 AI 之間也就少了一個可以共同回頭確認的東西。

而且,後來我才發現,需要共同回頭確認的不只有我和 AI 的對話。隨著開發繼續往前走,團隊原本留下的規格文件,也可能慢慢和最後做出來的 code 對不上。

文件明明寫了很多,為什麼還是接不起來?

當時我們團隊在維護專案時,其實也寫了不少規格文件(雖然那些文件不一定是大家熟悉的 PRD 格式XD)。但規格文件寫完後,後面的開發常常沒有繼續和它同步。很多時候都是開始改 code 之後,才發現原本沒有想到的實際問題,當大家討論完,也做了新的決策後,這些新的決策往往只停在當下的討論裡,最後也沒有真的回到規格文件中。

如果開發週期中突然冒出 Bug,情況就更直接了。大家手上都有事情要忙,通常就是先把程式碼打開、直接修正,讓功能恢復正常再說。至於原本的規格要不要一起調整?老實說,多數時候並沒有人回去補這些規格。久而久之,規格記錄的是一開始想做什麼,code 則記錄了最後實際做成什麼,至於中間討論過哪些問題、為什麼改變方向,反而很容易散落在不同地方,甚至只存在某個團隊成員的記憶裡,完全無法追蹤。

那麼,有沒有可能讓規格不要只停在開發開始前,而是跟著整個開發週期一起往前走呢?

這個問題,其實就是 Spec-Driven Development(SDD,規格驅動開發)想處理的事情。在這套方法裡,規格不只是一份開發前的文件,還會繼續參與後面的討論、實作、驗證與修改。

SDD 當然不是 2025 年才出現的,不過到了這一年,已經開始有工具把它直接接進 AI 開發流程。Kiro 在 7 月公開時,已經把 SDD 放進 AI IDE 的核心 workflow;到了 9 月,GitHub 也發表了 Spec Kit。這些工具出現後,SDD 的相關討論也離我的開發工作越來越近。

我自己則是在 2025 年 10 月左右開始接觸 SDD。那時候,要怎麼把 SDD 跟 AI 接在一起,對我來說真的好抽象啊!不過,我也想看看它能不能改善我們團隊當時遇到的問題,所以就這樣踏入了 SDD 的世界。

當時我在 Threads 上看過不少 Spec Kit 跟 OpenSpec 的討論,也沒有先研究每個環節背後的設計。喔~反正都叫做 SDD,那就二選一,先用 Spec Kit 吧!

結果安裝完成後,Claude Code 裡突然多出一整排 commands,也就是用來呼叫不同流程的指令。以前和 AI 協作,通常就是直接說要做什麼;現在卻得先知道要從哪個指令開始,我反而不知道下一步該做什麼了。

簡單看過說明後,我才大概知道這些 commands 的用途與執行順序。看到 Spec Kit 會把需求一路整理成 spec、plan 與 tasks,再讓 AI 依照這些文件實作,我的想法也很直接:結果應該不會差太多吧?這些需求與規格如果可以留下來,也許不只可以跨過 session,開發途中出現的新決策也有機會回到規格裡,不用每次都重新解釋一次。

現在回頭看,只能說:期待越大,失望越大!真的開始跑起來後,我第一個感覺並不是「AI 產生的東西更穩定」,而是:「蛤?怎麼越改越糟?」

會跑 Spec Kit workflow,真的就等於懂 SDD 嗎?

文件確實產生了,但每份該寫到多深、規格範圍該怎麼判斷,我還是不知道。老實說,我雖然能照著工具的順序執行,卻連這樣到底算不算在使用 SDD 都說不上來。

所以下一篇,我們就從這個困惑開始,看看 SDD 到底是一套工具、一個固定的 workflow,還是一套不依賴特定工具也能實踐的方法吧!

參考資料


下一篇
【Day - 2】到底怎樣才算 SDD?
系列文
我的 SDD 實驗之路 - 從實際使用現有工具,到設計自己的流程6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言