經過前五天的準備,我們已經完成了 AI-DLC Sprint 的前三個環節:規格書撰寫、User Story 拆解、UI/UX 設計。今天進入第四環節:Development(開發實作)。
更重要的是,今天要實際展示 Day 4 - AI-DLC Sprint 實戰:MenuBar Todo 的 PRD 速成魔法:Solo Sprint。
還記得介紹過的 Solo Sprint 嗎?這是 AI-DLC Sprint 為個人開發者打造的變形:
Solo Sprint(個人衝刺)
- 1 人團隊,超短週期
- 48 小時內完成一個迷你產品
- 零溝通成本
- AI 全程陪伴
今天的開發正是 Solo Sprint 的 Development 環節,讓我展示如何在半天內將 User Story 變成可運作的功能。
關鍵差異:沒有會議、沒有等待、沒有交接。
與 AI 的快速對話:
我:「今天上午要完成快速記帳功能,User Story 是:(給他之前產生的檔案)」
在 Solo Sprint 中,開發節奏完全不同。不是寫完整的系統,而是最小可行功能。
Step 1:極簡解析器
// 不追求完美,只要能動
export function parseExpense(input: string) {
const parts = input.trim().split(/\s+/);
const lastPart = parts[parts.length - 1];
const amount = parseFloat(lastPart);
if (!isNaN(amount)) {
// 金額在最後:星巴克 120
return {
amount,
description: parts.slice(0, -1).join(' ') || '支出'
};
}
// 金額在最前:120 星巴克
const firstAmount = parseFloat(parts[0]);
if (!isNaN(firstAmount)) {
return {
amount: firstAmount,
description: parts.slice(1).join(' ') || '支出'
};
}
return null;
}
Step 2:本地分類規則
// 先不接 AI,用簡單規則
const CATEGORY_RULES = {
'咖啡|星巴克|茶': '飲料',
'早餐|午餐|晚餐': '餐飲',
'捷運|公車|uber': '交通',
'電影|netflix': '娛樂'
};
export function categorize(description: string) {
const desc = description.toLowerCase();
for (const [keywords, category] of Object.entries(CATEGORY_RULES)) {
if (keywords.split('|').some(k => desc.includes(k))) {
return { category, confidence: 0.8 };
}
}
return { category: '其他', confidence: 0.5 };
}
Step 3:Server Action
'use server'
export async function quickAddExpense(formData: FormData) {
const input = formData.get('input') as string;
// 解析
const parsed = parseExpense(input);
if (!parsed) {
return { error: '無法解析輸入' };
}
// 分類
const { category } = categorize(parsed.description);
// 儲存(假設 Supabase client 已設置)
const { error } = await supabase
.from('expenses')
.insert({
...parsed,
category,
user_id: (await getUser()).id
});
if (error) return { error: '儲存失敗' };
revalidatePath('/');
return { success: true };
}
Step 4:極簡 UI
// Solo Sprint 秘訣:先求有,再求好
export function QuickExpenseForm() {
return (
<form action={quickAddExpense}>
<input
name="input"
type="text"
placeholder="例:星巴克 120"
className="w-full p-4 text-lg border rounded"
autoFocus
/>
<button type="submit" className="hidden">送出</button>
</form>
);
}
Solo Sprint 的測試策略:只測關鍵路徑。
快速手動測試清單:
加入樂觀更新:
'use client'
import { useOptimistic } from 'react';
export function ExpenseList({ expenses }) {
const [optimisticExpenses, addOptimistic] = useOptimistic(
expenses,
(state, newExpense) => [newExpense, ...state]
);
async function handleAdd(formData: FormData) {
const input = formData.get('input') as string;
const parsed = parseExpense(input);
if (parsed) {
// 立即顯示
addOptimistic({
...parsed,
id: [Date.now](http://Date.now)(),
category: '處理中...'
});
}
// 背景儲存
await quickAddExpense(formData);
}
return (
<>
<form action={handleAdd}>
<input name="input" />
</form>
<ul>
{[optimisticExpenses.map](http://optimisticExpenses.map)(e => (
<li key={[e.id](http://e.id)}>
{e.description} - ${e.amount}
</li>
))}
</ul>
</>
);
}
Solo Sprint 的自我檢視:
完成了什麼?
根據 AI-DLC Sprint 理論,讓我們看看實際差異:
時間:4 小時
人數:1 人
產出:可運作的 MVP
特點:極速、聚焦、零溝通成本
時間:2-3 天
人數:3-5 人
產出:完整功能模組
特點:分工明確、品質較高、需要協調
時間:2 週
人數:5+ 人
產出:生產級系統
特點:標準化流程、多重檢核、協作複雜
經過今天的實踐,我對 Solo Sprint 有了更深的體會:
沒有會議打斷,沒有等待其他人,完全沉浸在開發中。這 4 小時的產出,可能等於傳統開發 2-3 天。
傳統獨立開發:卡住 → Google → Stack Overflow → 嘗試 → 失敗 → 重複
Solo Sprint with AI:卡住 → 問 AI → 立即解答 → 繼續前進
Solo Sprint 逼迫你專注在核心價值。今天的程式碼不完美,但它能運作、能展示、能獲得回饋。
Solo Sprint 最適合:
不適合:
Solo Sprint 的美妙之處是可以連續進行:
Sprint 2(明天上午):
Sprint 3(明天下午):
今天的 Solo Sprint 實踐證明了 AI-DLC Sprint:有了 AI,一個人就是一個團隊。
4 小時,從 User Story 到可運作的功能。這在以前是不可想像的,但在 AI-DLC Sprint 的框架下,這成為了新常態。
關鍵不是 AI 有多強大,而是我們如何與 AI 協作。Solo Sprint 給了我們一個清晰的框架,讓個人開發者也能享受敏捷開發的好處。