Problem Framing 和 Spec-Driven Development 不是兩個獨立步驟,而是一個閉環的兩端。Framing 決定你在解什麼問題,Spec 決定你怎麼知道解對了。缺少前者,Spec 可能在解錯的問題上寫得非常完整;缺少後者,Framing 只是一場分析討論,沒有可執行的結果。完整的閉環長這樣:

需求/痛點
    │
    ▼
[Intent Extraction]  ← Interview Me:確認「你真正想要的是什麼」
    │
    ▼
[Problem Framing]    ← 5 Whys、HMW、JTBD → 問題陳述句
    │
    ▼
[Specify]            ← 寫 spec(六大核心 + 驗收標準 + 邊界)
    │
    ▼
[Plan]               ← 技術計畫:依賴圖、風險、建置順序
    │
    ▼
[Tasks]              ← 垂直切片、每個任務有明確驗收標準
    │
    ▼
[Implement]          ← 逐一執行,Doubt-Driven 審核每個非顯然決策
    │
    ▼
[Verify]             ← 對照 spec 的驗收標準逐條確認
    │
    ├── 通過 → 完成,更新 spec 紀錄決策
    │
    └── 不通過 → 根據失敗類型決定回哪一層
                  ├── 實作問題 → 回 Implement
                  ├── 任務拆法有問題 → 回 Tasks
                  ├── Spec 驗收標準設錯 → 回 Specify
                  └── 根本在解錯問題 → 回 Problem Framing

每個環節的輸入與輸出

環節輸入輸出人工審核點
Intent Extraction原始需求陳述(往往模糊)確認過的意圖聲明(outcome / user / success / constraint / out of scope)用戶明確說「是」
Problem Framing意圖聲明問題陳述句(who / context / goal / obstacle / measurable cost)問題陳述被利害關係人認可
Specify問題陳述句Spec 文件(六大核心、驗收標準、假設清單)Spec review 通過
PlanSpec技術計畫(依賴圖、元件、風險)計畫被確認為正確方向
Tasks技術計畫任務清單(每個任務含驗收標準 + 驗證指令 + 預期改動範圍)任務清單被確認為完整
Implement任務清單程式碼變更Doubt-Driven 審核每個非顯然決策
Verify程式碼 + Spec 驗收標準通過 / 失敗 + 失敗類型分析人工確認驗收標準逐條成立

常見短路點

短路 1:跳過 Intent Extraction,直接開始 framing

結果:花時間把一個本來可以對話釐清的問題 framing 得很徹底,但方向從一開始就偏了。Interview Me 的工作是在進入 framing 之前,先確認「我們真的在討論同一件事」。

短路 2:Framing 結論不明確就進入 Specify

徵兆:Spec 的 Objective 欄位空洞(「讓體驗更好」「提升效能」),沒有可測試條件。這種 Spec 寫完跟沒寫一樣,因為它無法當作 Verify 的基準。

短路 3:Specify 跳過假設清單

後果:假設在 Implement 才被發現,這時修改 Spec 要同時重新 review 計畫與任務。一份在 Specify 階段公開的假設清單,讓這類事故在最便宜的時候被攔截。

短路 4:Plan 和 Tasks 合併成一個步驟

問題:Plan 的工作是確定「做什麼、用什麼方式、順序如何」,Tasks 的工作是確定「每個步驟的驗收標準和驗證方式」。合併時,Tasks 的驗收標準往往被省略,結果是 Implement 沒有明確的「完成定義」。

短路 5:Verify 只驗「有沒有跑起來」,不驗「有沒有滿足 spec 的驗收標準」

兩者是不同的問題。程式能跑不代表它在做對的事。Verify 應逐條對照 Spec 的 success criteria,不是跑個 smoke test 就算過。

何時需要重新 framing

回到 Problem Framing 層是正常的,不是失敗的訊號。以下情況應該回頭:

  • Verify 失敗,且失敗模式不是「程式碼有 bug」,而是「這個功能根本解不了用戶的痛點」
  • 在 Specify 時,發現任何驗收標準都無法寫成「可測試」的格式(通常代表問題定義不夠清楚)
  • 在 Implement 時,每個任務的解法都讓你覺得「這樣做好像不對,但我說不清楚哪裡不對」(往往是 framing 沒做好)
  • 用戶看到 demo 時反應是「這不是我要的」而非「這裡有個 bug」

回到 framing 的代價,比走到 deploy 才發現方向錯了低得多。

閉環的本質是迭代速度

這個流程的設計目的不是「慢慢來確保正確」,而是「讓方向錯誤被儘快、儘便宜地發現」。每個環節的人工審核閘門,都是一個可以用低成本問「我們還在對的方向嗎」的機會。在 Specify 發現方向錯了,成本是重寫一份文件;在 Implement 發現,是重寫程式碼;在 Production 發現,是事故和信任損失。

延伸