並行開發 - Parallel Worktree Development 實戰範例
「下週三要上 5 個獨立功能,週一才開工。」這是 sprint 結尾最常見的噩夢。傳統做法是工程師開 5 個 branch、輪流切、開發完一個 merge、開發下一個——序列化保證你來不及。
本範例示範如何用 Superpowers 的 Using Git Worktrees + Subagent-Driven Development + Dispatching Parallel Agents 三個 skills 的組合,把「5 個獨立功能」壓縮成「5 個並行的 worktree + 5 個 subagent」,從週一早上到週二下午就全部提交完。
專案概述
情境:Next.js 14 電商前端,週三 deploy 前 PM 派 5 個任務:
- F1:
/products/[id]頁加入麵包屑導航 - F2:
/cart加入「移除商品」確認 modal - F3:
/checkout把地址輸入改為 Google Places Autocomplete - F4:
/orders加入 CSV 匯出 button - F5:全局加上
<SEO>元件補 Open Graph tags
目標:
- 全部 5 個任務於週二下午 5pm 前完成 + reviewed + merged
- 無 merge conflict
- CI 全綠
技術棧:Next.js 14 (App Router) + TypeScript + Tailwind + Vitest
核心挑戰:5 個任務「號稱獨立」其實有共享風險——
- F1、F3 都動
app/(shop)/layout.tsx - F4、F5 都需要新 npm dep(
papaparse、next-seo) - 全部都需要 VE component,但 VE 元件不應跨 worktree 重複修改
完整開發流程
第 1 步:Brainstorming — 任務依賴性盤點
觸發:
使用 brainstorming skill 評估這 5 個任務能否並行,以及最佳並行策略
AI 回應摘要:
## 依賴性矩陣分析
| 任務 | 動的檔案 | 依賴 |
|------|---------|------|
| F1 麵包屑 | product page, breadcrumb.tsx (新) | 無 |
| F2 移除 modal | cart page, confirm-modal.tsx (新) | 無 |
| F3 G. Places | checkout page, address-input.tsx (新) | 無 |
| F4 CSV 匯出 | orders page, export-button.tsx (新), + papaparse | 與 F5 共用 npm install lock |
| F5 SEO | root layout, + next-seo | 與 F4 共用 npm install lock |
## 結論
- ✅ 5 個任務業務邏輯獨立
- ⚠️ F1 與 F3 都會改 layout.tsx,需最後合併協調
- ⚠️ F4 與 F5 共享 package.json,需要合併時解決 conflict
## 策略
- 全部 5 個並行,worktree 隔離
- 合併時依 F1→F3、F4→F5 順序解 conflict(而不是隨機順序)
- 共用 component 放到 shared/ 而非各自 worktree
第 2 步:Writing Plans — 5 個 worktree 的批次計畫
觸發:
使用 writing-plans skill 把並行計畫轉成可執行的 worktree + subagent 任務
計畫:
階段 1(15 min):建立 5 個 worktree
- [ ] git worktree add ../shop-f1-breadcrumb -b feat/breadcrumb
- [ ] git worktree add ../shop-f2-cart-modal -b feat/cart-remove-modal
- [ ] git worktree add ../shop-f3-places -b feat/places-autocomplete
- [ ] git worktree add ../shop-f4-csv -b feat/csv-export
- [ ] git worktree add ../shop-f5-seo -b feat/global-seo
- [ ] 每個 worktree 跑 pnpm install
階段 2(2-4 hr):dispatch 5 個 subagent 並行開發
- [ ] 每個 worktree 對應一個 subagent
- [ ] subagent 內含完整 context (任務描述 + 該 worktree 路徑)
- [ ] subagent 完成後 commit 在自己分支
- [ ] 不直接 push
階段 3(30 min):收集成果 + 解 conflict
- [ ] 切回主倉庫,按依賴順序 cherry-pick
- [ ] F1 → F3(layout 解 conflict)
- [ ] F4 → F5(package.json 解 conflict)
- [ ] F2 (獨立,隨意順序)
階段 4(1 hr):全量 review + merge
- [ ] 統一 PR(superpowers 偏好 atomic PR,但時程壓力下可一個 PR 含 5 commit + 各自 commit message 詳述)
- [ ] code-reviewer subagent 並行審 5 個 commit
- [ ] 每 commit 個別 revert-friendly
驗收標準:
- [ ] 5 個功能全上 staging
- [ ] CI 全綠(包含 lint、tsc、vitest)
- [ ] 5 個任務各自的 unit test 覆蓋
- [ ] 無功能面 regression
第 3 步:Executing Plans — 建立 worktree 群
依 Using Git Worktrees skill,把 5 個任務分散到 5 個實體 worktree(不是 branch),讓 subagent 各自隔離工作:
# 主倉庫在 ~/repo/shop-frontend
cd ~/repo/shop-frontend
# 建立平行 worktrees
git worktree add ../shop-f1-breadcrumb -b feat/breadcrumb main
git worktree add ../shop-f2-cart-modal -b feat/cart-remove-modal main
git worktree add ../shop-f3-places -b feat/places-autocomplete main
git worktree add ../shop-f4-csv -b feat/csv-export main
git worktree add ../shop-f5-seo -b feat/global-seo main
# 各自 install(可並行)
for dir in ../shop-f1-breadcrumb ../shop-f2-cart-modal ../shop-f3-places ../shop-f4-csv ../shop-f5-seo; do
(cd $dir && pnpm install) &
done
wait
為什麼是 worktree 而非 branch:worktree 是實體隔離的工作目錄,subagent 可以同時在 5 個目錄寫碼,互不影響、各自有 install 的 node_modules、各自有 build cache。branch 切換會清掉這些,subagent 之間會踩對方。
第 4 步:Dispatching Parallel Agents — 並行觸發 5 個 subagent
觸發(主控對話):
使用 dispatching-parallel-agents skill 開發這 5 個獨立功能,每個 subagent 對應一個 worktree
主控 Agent 同時派 5 個 subagent,每個都完全自足(不需要回頭問問題):
F1 subagent prompt(範例):
你是 F1 subagent,工作目錄 ~/repo/shop-f1-breadcrumb
任務:為 /products/[id]/page.tsx 加入麵包屑導航
具體:
1. 新增 src/components/breadcrumb.tsx
2. 在 /products/[id]/page.tsx 頂部加入 <Breadcrumb />
3. 從 product data 抽出 category 路徑
4. 寫 vitest 覆蓋 breadcrumb 元件
5. commit message 用 "feat: 加入產品頁麵包屑" (不含感謝詞)
驗收:
- pnpm test 綠
- pnpm build 綠
- 完成後不要 push,留在你自己的分支
注意:不要動 layout.tsx(那是主控會處理)
(其他 4 個 subagent 同樣格式,各自 worktree)
dispatching 的關鍵:
- 完全自足:subagent 不該問主控問題,任何「不清楚」就要在 prompt 中先定義
- 結果唯一性:subagent 結束只回「done: 5/5 tasks in worktree X」訊息
- 不要共用檔案:每個 subagent 動的檔案不重疊(已在 brainstorm 階段確認)
第 5 步:Subagent-Driven Development — 監督 5 個 subagent
依 Subagent-Driven Development skill,主控不要寫碼,只做:
- 派發:5 個 subagent 同時起來
- 監督:看每個 subagent 的 commit 進度,但不介入
- 收尾:5 個全完成後,主控做合併與協調
主控的 review checklist(每個 subagent 完成後):
- [ ] 該 worktree 的 commit 在自己的 branch 上
- [ ] pnpm test 該 worktree 內綠
- [ ] pnpm build 該 worktree 內綠
- [ ] 修改的檔案都在當初 scope 內(不越界)
- [ ] commit message 繁中且語義清楚
第 6 步:合併 — 解衝突的順序是關鍵
5 個 subagent 完成,回到主倉庫按依賴順序 cherry-pick:
cd ~/repo/shop-frontend
git checkout -b feat/batch-wednesday-release main
# F2(獨立, 先合)
git cherry-pick feat/cart-remove-modal
# F1 → F3(layout.tsx 可能 conflict)
git cherry-pick feat/breadcrumb
git cherry-pick feat/places-autocomplete
# ↑ 若 layout.tsx 衝突,F3 那邊解 - 保留 F1 的 Breadcrumb,加入 F3 的 AddressInput
# F4 → F5(package.json 可能 conflict)
git cherry-pick feat/csv-export
git cherry-pick feat/global-seo
# ↑ 解 package.json conflict - 兩個 dep 都保留
pnpm install # 因為 package.json 可能變了
pnpm test
pnpm build
為什麼順序重要:隨機順序合會踩出莫名其妙 conflict。依賴性矩陣告訴你哪些任務會共編輯同一檔,腦中有這個圖就能避開亂世。
第 7 步:批次 review 與部署
雖然傳統建議一個 PR 對應一個原子任務,但時程壓力下,批次 PR 也是合法選項(只要 commit 細粒度可 revert):
git push -u origin feat/batch-wednesday-release
gh pr create --title "[批次] 週三 5 功能並行釋出" \
--body "$(cat <<EOF
## 含 5 個獨立任務
- F1: 麵包屑 (@feat/breadcrumb)
- F2: 購物車移除 modal (@feat/cart-remove-modal)
- F3: Google Places Autocomplete (@feat/places-autocomplete)
- F4: CSV 匯出 (@feat/csv-export)
- F5: 全域 SEO (@feat/global-seo)
## 並行策略
- 5 個 git worktree 隔離
- 5 個 subagent 並行開發(2-4 小時)
- 依賴衝突按 F1→F3、F4→F5 順序解決
每個 commit 都可獨立 revert。
EOF
)"
觸發 code-reviewer subagent 並行審 5 個 commit:
使用 dispatching-parallel-agents skill 派 5 個 reviewer subagent,
每個審一個 commit 的 diff
5 個 reviewer 並行給意見,主控整合 → 修正 → merge。
第 8 步:Verification Before Completion
觸發:
使用 verification-before-completion skill 驗證 5 功能批次釋出
驗收清單:
✅ 功能完整性
- F1 麵包屑:正確顯示 category 路徑、可點擊導航 ✓
- F2 移除 modal:點擊移除跳出確認、取消不動作 ✓
- F3 Places:輸入地址自動完成、選取後填入表單 ✓
- F4 CSV:點擊下載 .csv、欄位正確 ✓
- F5 SEO:View Source 看到 og:title、og:image ✓
✅ 工程品質
- pnpm test 287 個測試全綠(新增 18 個)✓
- pnpm build 無警告 ✓
- pnpm lint 無警告 ✓
- TypeScript 嚴格模式編譯通過 ✓
✅ 並行效率
- 序列估算:5 任務 × 1 工程師 = 5 天
- 並行實測:1.5 天(0.25 天 setup + 0.5 天並行 + 0.25 天整合 + 0.5 天 review)
- 加速比:3.3x
✅ 無衝突殘留
- F1/F3(layout.tsx 手動 merge 後 ve 元件正常)✓
- F4/F5(package.json conflict 解後 pnpm install 正常)✓
- 5 個 worktree 都已清理(rm -rf 並 git worktree remove)✓
✅ 可回滾
- 每个 commit 都獨立、可 revert
- 出問題時可 git revert <commit-hash> 而不影響其他 ✓
關鍵學習點
1. Worktree > Branch (給 subagent 的場景)
subagent 寫碼需要實體目錄(node_modules、build cache、TypeScript cache)。branch 切換會清掉這些,subagent 之間互相破壞。worktree 是為了 subagent 而生。
2. 依賴矩陣是並行的前提
「5 個任務看起來獨立」≠「5 個任務實際獨立」。動到同一檔案的任務要合併時協調,但開發期還是能並行——只要在 brainstorm 階段先標好依賴。沒先做矩陣分析就並行,等於自找 conflict 地獄。
3. Subagent prompt 要完全自足
「不確定就問」是單 agent 場景的好習慣,但 給 subagent 的 prompt 必須把不確定性先消滅。任何「等等問主控」都會破壞並行。這也是 brainstorming + writing-plans 先行做的價值——把模糊都解析掉再 dispatch。
4. 批次 PR 在時程壓力下合法
原子 PR 是理想,但「5 天工作 1.5 天做完」這種現實壓力下,批次 PR + 細粒度 commit 是合理折衷。重點是每個 commit 獨立可 revert,而不是 commit log 一團亂。
5. 合併順序是顯式決策
依賴矩陣不僅告訴你「會衝突」,還告訴你「該用什麼順序合」。F1 先合,F3 看見 F1 已落地、自然知道要保留 F1 的 Breadcrumb ——心智負擔降到最低。
工具使用摘要
| Skill | 用途 | 在本例的作用 |
|---|---|---|
| Brainstorming | 依賴性盤點 | 畫出 5 任務 × 檔案交互 |
| Writing Plans | 拆解並行計畫 | 4 階段(worktree → dispatch → merge → review) |
| Using Git Worktrees | 實體隔離 | 5 個 worktree 各自 install + build cache |
| Dispatching Parallel Agents | 觸發並行 | 5 個 subagent 同時寫碼 |
| Subagent-Driven Development | 監督模式 | 主控只協調,不動手寫碼 |
| Verification Before Completion | 批次驗收 | 功能 + 工程 + 效率 + 回滾四面向 |
總結
並行開發的核心反模式是 「我們人多,把任務分成 5 份各自做就好」——沒有 worktree、沒有 subagent、沒有依賴矩陣,結果就是 5 個人互相 block、5 個 branch 互相 conflict、merge 完破壞彼此功能。
Superpowers 的 skills 提供的是結構化並行:
- Brainstorming 先把「真的能並行嗎?」問清楚
- Worktree 提供實體隔離,subagent 不互相破壞
- Dispatching Parallel Agents 把模糊任務轉成自足 prompt
- Subagent-Driven Development 把主控從「碼農」解放成「指揮官」
最終 5 天 → 1.5 天的加速,不是因為「我們更努力」,而是因為 skills 把並行的複雜度變成了可工程的流程。下次遇到「N 個獨立任務、deadline 緊迫」,先別加班、先別悲觀,先打開 worktree,先派 subagent。