規格確認完了,下一步不是開始寫程式,而是決定:第一個可以交付的東西到底要切多大?
昨天完成最後一次規格自檢。
Spec 告訴我「要做什麼」,但真正開始實作前,還需要回答另一個問題:我要怎麼把這些規格變成可以執行、可以 review、可以交付的工作?
這就是今天 plan 要處理的事情。
拆規格那天講過,plan 和 tasks 不算規格——規格是交給開發的合約,它們是為了達成合約而寫的工作文件。三者分工:
| 文件 | 回答什麼 |
|---|---|
| spec | 要做什麼 |
| contracts | 跟外部怎麼溝通 |
| plan | 怎麼做到 |
| tasks | 要做哪些工作 |
這個區分很重要。
如果 plan 又開始描述需求,最後就會出現兩份 Spec;如果 tasks 又重新定義驗收條件,最後就會出現兩份 Acceptance Criteria。
所以我現在對 Plan 的理解比較簡單:Plan 不是把規格寫得更詳細,而是把規格轉成「可以開始施工的結構」。
我沒有從空白 plan.md 開始。使用 /speckit-plan 先讀現有規格,產生基本架構:
Summary
Technical Context
Constitution Check ← 逐條原則對照
Project Structure
Complexity Tracking
Post-Design Constitution Re-Check ← 設計產出之後再檢一次
其中我特別留下兩個部分。
1. Constitution Check
它會把設計跟既有規則逐條對照:
### II. 時間一律 UTC + ISO 8601 — PASS
### III. 自建認證(NON-NEGOTIABLE) — PASS
### V. 資料存取只走 ORM — PASS(需審查者留意)
把說過的規則跟這次準備怎麼做放在同一張表上。
2. Complexity Tracking
另一個我覺得值得留下的是 Complexity Tracking,它要求只有在違反既有原則時,才需要解釋:
Fill ONLY if Constitution Check has violations that must be justified
/speckit-plan 範本裡沒有「開發順序」/speckit-plan 產出的那六節全部在回答「技術上長什麼樣」—— 技術背景、目錄結構、原則有沒有被違反,但它不會幫我決定開發順序,因為這不是純技術問題,而是產品問題。
所以我自己補了一節:交付順序,我補的內容:
| 順序 | 為什麼排在這裡 |
|---|---|
| 先做記錄與簽核流 | 整個系統只有這段不是 CRUD,是唯一會出錯、也唯一值得先驗證的部分 |
| 建立會議排它前面 | 沒有與會者名單,「全員確認」就沒有對象可綁——這是依賴,不是優先級 |
| 登入刻意押後 | 標準做法、風險低;提早做會讓每一條測試都要先取 token,拖慢驗證核心流程的速度 |
「開發順序」底下其實藏著兩種順序。
| 問的是 | 軸 | |
|---|---|---|
| 依賴順序 | 哪個元件必須先存在,另一個才寫得下去 | 技術的 |
| 交付順序 | 使用者先拿到哪一個功能 | 產品的 |
例如:Backend API 要先完成,Frontend 才能串接,是依賴順序。但先完成「寫記錄並送出」,讓使用者可以開始使用,則是交付順序。
兩者很容易被寫成同一件事,可以用一個很簡單的方法檢查:這個階段完成之後,誰的手上多了什麼?
如果答案是:「下一個工程師可以開始做下一層」那很可能只是依賴順序。如果答案是:「使用者現在多了一件原本做不到的事」,這才是交付單位。
六個功能先保留完整全貌,但實際上不一次拆到最細。
| # | 工作單元 | 後端 | 前端 |
|---|---|---|---|
| 1 | 寫記錄並送出 | ✅ 已完成 | 待做 |
| 2 | 確認與退回 | ✅ 已完成 | 待做 |
| 3 | 版本歷程檢視 | ✅ 已完成 | 待做 |
| 4 | 登入與帳號 | 待做 | 待做 |
| 5 | 決議項指派與我的待辦 | 待做 | 待做 |
| 6 | 稽核軌跡查詢 | 部分 | 待做 |
前三個後端已經完成,反而讓我看到原本 Plan 裡的一個問題:我把「後端先做」誤當成了「功能先交付」,這兩個概念其實不一樣。
我不會用一張 Issue 要幾個 Task 來決定大小。而是:「這張 Issue 關掉之後,有沒有人因此多了一件原本做不到的事?」,Issue 應該要是一個可以 review、測試,甚至交付的工作單元。
Task 是施工步驟,Issue 是交付單位。
| 問題 | 我的做法 |
|---|---|
| 規格要不要一次規劃到底? | 先保留全貌,但不要過度預測後面的細節 |
| 技術順序跟交付順序一樣嗎? | 不一樣,依賴是約束,交付才是計畫 |
| 一張 Issue 要多大? | 完成後要能驗證一件完整的事 |
明天:工作單元切好了,第一張要動手。但在寫任何一行畫面之前,先寫測試——而前端的「測試」跟後端不是同一回事。