iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0

上一篇記錄了我第一次與第二次使用 Spec Kit 的實驗。第一次,我把整套權限架構交給 AI 一路做到最後,結果整個專案壞掉;第二次,我補上更多需求與技術作法,也改成分段執行,結果確實好很多,方向卻還是慢慢偏掉。

兩次的做法明明不一樣,為什麼最後都沒有走到我要的結果?直到我把兩次實驗放在一起,才發現問題並不是從 implement 才開始。

兩次 Spec Kit 實驗比較:第一次把整個目標交給 AI、plan 沒有說清楚技術作法,並一路完成 tasks,最後出現無法編譯、UI 偏離與既有功能損壞;第二次補上需求、架構與技術作法,並改成分段執行與檢查,部分結果改善,但幾輪後方向仍然偏離

這張比較圖看起來像是第二次已經把第一次的問題都補起來了。不過,有一件事始終沒有改變:我還是把整套權限架構放在同一份 spec 裡,卻沒有先確認哪些需求還沒講清楚、哪些作法其實還沒有決定。

問題不只出在最後才檢查

分段檢查能讓我提早看到問題,卻不會阻止問題發生。第一次會失控,顯然不只是因為我太晚檢查。

我當時雖然知道 spec 後面會接著 plan 與 tasks,卻還不知道一份 spec 應該包含哪些問題、做到哪裡就該停,只覺得既然需求已經寫成規格,AI 應該就不容易做錯。我少做的,是先弄清楚這個大目標裡包含哪些不同問題、有哪些決定還沒做,以及哪些部分適合放在同一份 spec 裡一起實作與驗證。

第一次實驗時,我還預設 codebase 裡既然已經有類似的實作方式,CLAUDE.md 又寫了專案使用的架構與技術,AI 應該就會照著這些內容完成,所以沒有把這次變更需要的技術作法與重要決策完整寫進 plan。第二次雖然補了更多內容,也重新檢查 plan 是否符合專案既有的架構與規範,但我還是沒有繼續追問:裡面的每一個判斷,究竟建立在什麼前提上?那些我沒有寫到的地方,是專案裡早已有答案,還是我們根本還沒討論過?

需求寫得更詳細,通常只是把我已經想到的內容寫得更多。至於那些沒有被說出口的前提、例外與取捨,並不會因為文件變長就自動得到答案。AI 遇到這些空白時,還是只能根據 codebase、CLAUDE.md、前面的 artifacts 與自己的理解繼續往下做;只要它補上的答案和我心裡想的不一樣,方向就會開始偏離。分段檢查可以讓我提早看見這件事,卻不能替我把原本還沒決定的問題變成答案。

說穿了,第一次實驗時,我把「它應該知道」當成了「我已經說清楚」;到了第二次,我雖然真的說得更多,卻還沒有把需求裡沒談清楚的地方找出來。這也是我後來才真正分清楚的事情:把需求寫得更詳細,和把需求釐清,並不是同一件事。

回頭比對 artifacts,問題其實早就出現了

發現方向又開始偏離後,我帶著實作結果重新查看 spec,以及 plan 過程產生的 research、plan 與後續 tasks。這次不是只看每份文件單獨讀起來合不合理,而是拿實際做出來的東西反過來比對:AI 為什麼會做出這個選擇?這個決定最早是從哪一份文件出現的?

這時我才發現,問題不是到了 implement 才突然冒出來。plan 過程產生的 research 裡,已經有一些和 codebase 不符的判斷;不同位置的專案規範之間,也有彼此矛盾的內容。這些內容又繼續出現在 plan 與 tasks 裡,所以 AI 實作時,只是照著前面整理出的方向一路做下去。

比較尷尬的是,這些 artifacts 我當時真的都有看,而且看的當下也覺得滿合理的。直到內容真的被實作出來後,我才發現有些判斷根本對不上專案現況。這其實也很像平常拿到需求時會遇到的狀況:需求文件看起來沒有問題,真的開始改 code 後,才會發現原本沒想到的限制,或是前後接不起來的地方。只是換成 AI 開發後,我把需求整理成更多 artifacts,卻還是掉進了同一個問題裡。

constitution 與 CLAUDE.md 為什麼會互相打架?

還記得【Day - 3】留下的問題嗎?constitution 與 CLAUDE.md 都可能放進原則與規範,兩邊到底要怎麼分?這次看到這些規範互相衝突,我才開始真正整理兩份文件的用途。

到了【Day - 4】,我提過自己當時把專案架構、使用技術、命名、分層、測試與各種開發規範都塞進 CLAUDE.md,整份文件甚至超過 1000 行。另一方面,constitution 裡也會放使用函式庫的原則、測試原則與其他長期規範。當同一類事情同時出現在兩份文件裡,寫法只要不一致,AI 讀到的指示就可能互相打架。

後來真的動手整理時,我沒有再替兩份文件各寫一套完整規範,而是先把兩份文件的用途重新分開。constitution 保留專案長期遵循的工程原則與品質要求,例如測試、UI 一致性,以及實作前不能只看文件,還要回到 codebase 找既有做法。CLAUDE.md 則縮成 AI 和我協作時要遵循的基本方式,再把前端與後端的詳細內容分別指向各自的 README。

拿掉專案名稱、framework 與內部細節後,大概可以簡化成這樣:

# constitution.md

## Project Principles

- 新增功能前,先查看 codebase 裡相近的實作
- 文件只能提供方向,實際做法仍要和現有 code 對照
- 新增商業邏輯時,需要補上對應測試
- UI 優先沿用既有元件與設計規則
# CLAUDE.md

Always respond in Traditional Chinese.

## Coding Practices

- 優先選擇容易維護的作法
- 註解說明「為什麼」,不要重複 code 已經表達的事情
- 主動注意 edge cases、安全性與測試範圍

## Frontend

> 詳細架構與開發方式請參考 `front-end/CLAUDE.md`

## Backend

> 詳細架構與開發方式請參考 `back-end/CLAUDE.md`

這是我當時整理後留下的版本。當時我先做的,是把兩份文件重疊最嚴重的部分拆開,不再讓整套架構、技術與規範在兩邊各放一份。在那個版本裡,constitution 比較像是在回答「這個專案長期不能違反什麼」,CLAUDE.md 則是 Claude Code 進入專案後,該怎麼和我協作、又該去哪裡找資料。兩邊偶爾還是可能有些交集,重要的是調整時要一起看,不要讓重疊的內容越寫越不一樣。

constitution 與 CLAUDE.md 都不是整理完就永遠不再調整的文件。

規格會繼續往下跑,專案也會持續維護,AI 模型的能力與我跟它協作的方式也一直在變,所以這兩份文件當然也要跟著持續維護與調整。

constitution 與 CLAUDE.md 會隨規格、專案和 AI 協作方式的變化持續維護與調整

把 constitution 與 CLAUDE.md 分開之後,【Day - 3】留下的另一個問題還沒有解決:既然專案架構、使用的技術與既有規範都已經有地方可以查,為什麼每次執行 plan 時,還要再說一次這次準備怎麼做?

專案背景都有了,plan 還要寫什麼?

我後來才比較能理解,plan 要補的是「這次變更還沒決定,但實作前必須說清楚的技術內容」。Spec Kit 並沒有替 greenfield 與 brownfield 準備兩套不同的 plan。從頭建立專案時,可能連使用什麼技術、資料怎麼存、架構怎麼安排都還沒決定;修改既有系統時,通常已經有這些基礎,更需要說清楚這次要沿用什麼、改動什麼,以及怎麼接回原本的系統。

greenfield 與 brownfield: greenfield 通常指從頭建立、還沒有既有系統包袱的開發情境;brownfield 則是在已經有 code、架構、功能與各種限制的系統上繼續修改。

當然,既有系統也可能遇到完全沒有做法可以沿用的新功能,或需要引入新技術、調整架構的變更。這些決定還是得在 plan 裡說清楚,不能因為專案已經有架構,就以為這次不需要再規劃。

我第一次實驗面對的就是 brownfield。當時 codebase 與 CLAUDE.md 的確已經提供不少專案背景,但我沒有在 plan 裡說清楚這次權限重構應該沿用哪些設計、哪些地方才是這次要改的範圍。沒有說明的部分,AI 最後只能按照自己的理解補上。說穿了,我把「AI 看得到專案背景」當成了「AI 知道這次該怎麼改」。

到了第二次實驗,我才把這次適合的架構與技術作法補得更完整,做出來的結果也確實比第一次更接近我要的方向。

CLAUDE.md 可以提供專案背景,但不能代替這次變更的 plan。前者寫得再完整,這次準備怎麼改,還是要在 plan 裡說清楚。

不過,就算 plan 的用途分清楚了,前面還有一個更早的問題:spec 裡那些沒說清楚的地方,要在哪一步被找出來?

第二次實驗後,我才想到 clarify

把問題一路往前追之後,我才想到:Spec Kit 不是還有 clarify 嗎?

它會在 plan 之前,針對 spec 裡還沒寫清楚的地方繼續提問,再把確認後的答案寫回 spec。前兩次實驗時,我把注意力都放在怎麼把需求與 plan 寫得更完整,卻沒有真的把這一步接進自己的 workflow。

於是,我決定把 clarify 接回 workflow,先讓它針對 spec 裡沒說清楚的地方提問,再往 plan 和實作走。但補上這一步之後,AI 就比較能做出我要的結果了嗎?下一篇,就來聊聊補上 clarify 後有哪些改善,以及持續使用 Spec Kit 時,我還想調整哪些流程吧!

參考資料


上一篇
【Day - 4】同一個需求做了兩次,為什麼方向還是偏了?
下一篇
【Day - 6】Spec Kit 用順之後,我還想調整哪些流程?
系列文
我的 SDD 實驗之路 - 從實際使用現有工具,到設計自己的流程6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言