---
name: design-brainstorm
description: 蘇格拉底式設計對話，透過逐步提問精煉想法為可實作的設計。當提到「腦力激盪」「brainstorm」「我有個想法」「幫我想想」「設計討論」「explore ideas」時自動啟用。不適用於已有明確需求的正式開發流程（用 /dd-start）。
allowed-tools: Read, Grep, Glob, Bash, Write
---

# Design Brainstorm — 蘇格拉底式設計對話

借鑑 obra/superpowers 的 `brainstorming` 概念，適配 DD Pipeline 風格。

## 核心原則

**設計未批准前，不得寫任何程式碼。**

> 這是硬閘門。不要呼叫任何實作技能、不要寫程式碼、不要建立專案骨架，
> 直到你呈現了設計方案並且使用者已批准。

**啟動時調用 `EnterPlanMode`**，確保 Plan 模式的讀取限制生效。
設計完成後調用 `ExitPlanMode`，讓使用者審閱。

## 觸發條件

**關鍵詞：**
- 「腦力激盪」「brainstorm」「brain storm」
- 「我有個想法」「我在想」「我想做」
- 「幫我想想」「一起想」「討論一下」
- 「設計討論」「explore ideas」
- 「這個方向對嗎」「可行嗎」

**場景觸發：**
- 使用者有模糊的想法想要精煉
- 新功能的初步探索
- 技術方案尚未確定
- 需要在多個方案間做選擇

**與 `/dd-start` 的區別：**

| 特性 | design-brainstorm | /dd-start (RDD) |
|-----|------------------|-----------------|
| **適用階段** | 想法探索、尚未成形 | 需求已初步明確 |
| **互動風格** | 蘇格拉底對話、逐步引導 | 結構化需求分析 |
| **產出** | 設計文件 + 進入 task-planner | 正式需求文件 + 進入 DD Pipeline |
| **流程彈性** | 高（隨時調整方向） | 中（遵循 RDD 框架） |

## 9 步工作流程

### Step 1: 探索專案脈絡

在開始對話前，先了解背景：

1. 讀取 `CLAUDE.md`、`README.md`、`package.json` 等專案文件
2. 瀏覽相關目錄結構
3. 查看最近的 git 提交了解開發方向
4. 識別現有模式、慣例、和技術棧

**目的**：確保設計建議符合現有專案脈絡。

### Step 2: 提問釐清

**規則：一次只問一個問題。**

- 不要一次丟出問題清單（會壓倒使用者）
- 偏好多選題而非開放式問題
- 每個問題都應該推進理解

**規則：事實自己查，決策才問人。**（借鑑 mattpocock/skills 的 `grilling`）

- 能從環境查到的「事實」自己查（filesystem、程式碼、git、設定檔），不拿去問使用者
- 「決策」才逐一放到使用者面前，且每題附上自己的建議答案
- 判斷基準：這題有標準答案嗎？有 → 事實，去查；取決於偏好/取捨 → 決策，去問

**提問順序：**
1. **目標**：「你想解決什麼問題？」或「你希望達成什麼效果？」
2. **使用者**：「誰會使用這個功能？」
3. **限制**：「有什麼技術限制或時間壓力嗎？」
4. **範圍**：「MVP 需要包含哪些部分？」

**範例（多選偏好）：**
```
你的主要目標是哪個？
A) 提高使用者體驗
B) 改善系統效能
C) 減少技術債
D) 新增商業功能
```

### Step 3: 範圍評估

在深入設計前，評估專案規模：

- **小型**（< 1 天）：可以直接進入設計
- **中型**（1-3 天）：需要分階段設計
- **大型**（> 3 天）：**標記需要拆分為子專案**

如果是大型專案，先幫使用者拆分為獨立的子專案，每個子專案分別進行 brainstorm。

### Step 4: 提出 2-3 個方案

每個方案包含：

```markdown
## 方案 A: [名稱]

**核心思路**：[一句話描述]

**優點**：
- ...

**缺點**：
- ...

**技術選擇**：[框架/工具]

**預估複雜度**：低/中/高

**適合場景**：[什麼情況下選這個]
```

**YAGNI 原則**：
- 每個方案都應該是最小可行方案
- 如果某個功能「以後可能需要」但現在不需要 → 移除
- 質疑每一個非必要的功能：「沒有這個會怎樣？」

### Step 5: 分段呈現設計

不要一次呈現完整設計。分段呈現，每段確認：

1. **資料模型** → 確認
2. **API 設計** → 確認
3. **核心邏輯** → 確認
4. **UI/UX 流程**（如適用）→ 確認
5. **錯誤處理** → 確認

每段結束後詢問：「這部分你同意嗎？有什麼要調整的？」

**視覺輔助**：若涉及 UI/架構圖，主動提議呼叫 `senior-architect`（Mermaid/PlantUML/依賴圖）或 `frontend-design`（UI mockup）產出視覺輔助。以獨立訊息詢問，使用者同意後再呼叫。

### Step 6: 寫設計文件

將批准的設計寫入文件：

**檔案位置**：`docs/designs/YYYY-MM-DD-<topic>-design.md`

**文件結構**：
```markdown
# [功能名稱] 設計文件

## 問題描述
[要解決的問題]

## 設計決策
[選擇的方案及理由]

## 技術設計
### 資料模型
### API 設計
### 核心邏輯

## 範圍排除
[明確不做的事情]

## 開放問題
[尚未決定的事項]
```

### Step 7: 自我審查

寫完設計文件後，自我檢查：

- [ ] 沒有佔位符或 TODO
- [ ] 沒有內部矛盾
- [ ] 沒有模糊不清的描述
- [ ] 所有技術選擇都有明確理由
- [ ] 範圍排除清楚列出
- [ ] 不包含 YAGNI 功能

### Step 8: 使用者審查

請使用者審查設計文件：
- 「請閱讀設計文件，有什麼需要修改的嗎？」
- 根據反饋修改，直到使用者批准

### Step 9: 進入下一步

設計批准後，**唯一合法的下一步**是：

1. **進入 task-planner**：將設計拆分為微任務
2. **進入 /dd-start**：如果使用者想走正式 DD Pipeline

**禁止直接開始寫程式碼。**

---

## 關鍵規則

### 一次一個問題
```
# 錯誤 ❌
你想用什麼框架？資料庫呢？需要認證嗎？API 風格偏好？

# 正確 ✅
你想用什麼框架？
A) Next.js（全端、SSR）
B) React + Express（前後端分離）
C) 其他（請說明）
```

### YAGNI 執行
```
# 使用者說：「以後可能需要多語言支援」
# 正確回應：
「現在的 MVP 需要多語言嗎？如果不需要，我們先不做，
但設計時會確保之後容易加入。」
```

### 設計隔離
```
# 複雜系統應拆分為獨立單元
每個單元應有：
- 明確的職責（做什麼）
- 清楚的介面（怎麼互動）
- 獨立的測試策略
```

### 遵循現有模式
```
# 在已有 codebase 中
- 先了解現有的架構模式
- 新設計應與現有模式一致
- 如果需要偏離，明確說明理由
```

## 常見錯誤

| 錯誤 | 正確做法 |
|------|---------|
| 設計前就開始寫程式碼 | 堅守硬閘門 |
| 一次問太多問題 | 一次一個 |
| 把查得到的事實拿去問使用者 | 事實自己查（Read/Grep/git），只問決策並附建議答案 |
| 假設使用者的技術偏好 | 提供選項讓使用者選 |
| 設計過度（over-engineering） | YAGNI — 只做需要的 |
| 跳過範圍評估 | 大專案必須先拆分 |
| 設計文件有佔位符 | 自我審查消除所有 TODO |

## 與其他技能的協作

```
design-brainstorm → task-planner → subagent-orchestrator
                  → /dd-start → DD Pipeline 正式流程
```

- **design-brainstorm** 負責：從模糊想法到清晰設計
- **task-planner** 負責：從設計到可執行的微任務
- **/dd-start** 負責：正式需求分析（如果要走 DD Pipeline）
