iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0
佛心分享-SideProject30

AI-Driven Development 實戰篇:30 天 Side Project 開發全紀錄系列 第 24

Day 6 - MoodStamp 專案回顧:6 天 AI-DLC Sprint 的真實心得

  • 分享至 

  • xImage
  •  

經過 5 天的開發旅程,今天是 MoodStamp 專案的收尾。雖然沒有完成一個可以上架的完整 App,但這 6 天的價值遠超過一個 Side Project 本身。今天我想好好回顧這段旅程,分享真實的感受、踩過的坑,以及最重要的——AI-DLC Sprint 到底改變了什麼。

我們到底完成了什麼?

不只是程式碼,而是完整的開發流程

很多人會問:「你 6 天就寫了 200 行程式碼?這也太慢了吧?」

但如果你看看我們實際產出的東西:

文件層面:

  • 一份 8 頁的 PRD,包含完整的功能規劃、技術選型、風險評估
  • 20+ 條 User Stories,每條都有清晰的驗收條件
  • 完整的 UI/UX Design System,從顏色、字體到間距都有規範
  • 詳細的 Wireframe 和 User Flow 設計

程式碼層面:

  • MoodEntry Model 的完整實作
  • 9 個測試案例,覆蓋正常流程、邊界條件、錯誤處理
  • 100% 測試覆蓋率
  • 乾淨的專案結構和命名規範

更重要的是無形資產:

  • 建立了 5 個 AI Agent 的協作模式(PM、BA、UX Designer、QA、Developer)
  • 實踐了完整的 TDD 開發流程
  • 累積了可複用的 Prompt 模板
  • 建立了測試驅動的開發習慣

如果用傳統方式開發,光是需求釐清和文件撰寫就要花 2-3 天,UI/UX 設計可能要外包或自己硬刻一週。而我們用 AI 協作,把這些時間壓縮到幾個小時,但品質沒有打折。

數字背後的真實意義

讓我分享一些具體的對比:

需求釐清階段(Day 1):

  • 傳統方式:開 1-2 次會議,每次 1-2 小時,還要反覆確認需求
  • AI-DLC:2 小時的對話,AI 主動提問、識別風險、建議優先級
  • 時間節省:70%,但更重要的是品質提升了,因為 AI 會問到你沒想到的問題

PRD 撰寫(Day 2):

  • 傳統方式:PM 花 1 天寫初稿,團隊再花半天討論修改
  • AI-DLC:AI 生成結構化草稿,我只需要補充細節和調整優先級
  • 時間節省:60%,而且格式統一、結構完整

UI/UX 設計(Day 4):

  • 傳統方式:要麼外包(貴且溝通成本高),要麼自己硬刻(醜且沒系統)
  • AI-DLC:AI 生成完整的 Design System,包含顏色理論、排版規則、無障礙檢查
  • 這個最有感! 我以前最怕做設計,現在有 AI 當設計顧問,做出來的東西看起來專業多了

測試撰寫(Day 5):

  • 傳統方式:開發完才補測試,常常不知道該測什麼,測試案例東缺西漏
  • TDD + AI:先寫測試,AI 建議邊界條件和異常情況,測試完整度大幅提升
  • 時間節省:50%,但更關鍵的是信心提升 200%,因為有測試保護

AI-DLC Sprint 的真實體驗

Day 1 的驚喜:AI 會主動提問

第一天最讓我驚訝的是,AI 不是等我下指令,而是主動發起對話

我只是說:「我想做一個心情記錄 App。」

AI 立刻開始問:

  • 「主要使用者是誰?學生?上班族?還是一般大眾?」
  • 「你希望使用者多久記錄一次?每天?還是想記就記?」
  • 「心情記錄的形式是什麼?純文字?圖片?還是語音?」
  • 「你有考慮過隱私問題嗎?資料存在本地還是雲端?」
  • 「印章是固定的還是使用者可以自訂?」

這些問題讓我意識到,我原本以為很清楚的需求,其實有很多模糊地帶。傳統開發方式下,這些模糊地帶會變成後期的需求變更和重做,但 AI-DLC 在第一天就幫我釐清了。

更厲害的是,AI 還會提出我沒想到的風險

「如果使用者輸入敏感內容,你要如何確保 AI 生成的回應是適當的?」

「有些使用者可能不想要 AI 回應,需要提供關閉選項嗎?」

「如果 OpenAI API 掛掉或達到配額限制,有備援方案嗎?」

這種防禦性思考是我以前常常忽略的,但 AI 會系統性地檢查這些潛在問題。

Day 3 的頓悟:User Story 原來可以這樣

以前寫 User Story,我常常卡在「粒度」的問題:

  • 太大了,像 Epic 一樣難以估算
  • 太小了,變成技術任務而非使用者價值

AI 幫我拆解 User Story 時,我才理解什麼叫「恰到好處」。

舉個例子,我原本想寫:「作為使用者,我想記錄今天的心情。」

AI 說:「這個太大了,我們拆成幾個獨立的價值點。」

然後它給了我:

  1. 「作為使用者,我想輸入今天發生的事情,限制在 200 字以內,這樣我可以快速記錄而不用寫日記。」
  2. 「作為使用者,我想選擇一個印章代表我的心情,這樣不用打字也能表達感受。」
  3. 「作為使用者,我想看到 AI 生成的鼓勵語錄,這樣能得到一些正向回饋。」

你看出差別了嗎?

原本的版本只是功能描述,AI 拆出來的每一條都有明確的使用者價值清晰的範圍界定。而且每一條都是獨立的,可以單獨開發、單獨測試、單獨上線。

更重要的是,AI 自動生成的 Acceptance Criteria 超級詳細:

Given 使用者在輸入框輸入文字
When 文字長度達到 200 字
Then 輸入框應該停止接受新的輸入
And 顯示提示訊息「已達字數上限」
And 字數統計顯示「200/200」並變成紅色

這種細緻度讓我在寫測試時完全不用猜,照著 AC 寫就對了。

Day 4 的驚艷:設計系統的完整度

我必須承認,設計一直是我的弱項。以前做 Side Project,UI 常常長這樣:

「嗯...這個按鈕好像太小了?那就調成 50px 好了。」

「間距看起來怪怪的?那就加個 margin: 10px 吧。」

「顏色?就用藍色吧,#0000FF...嗯,太亮了,改 #336699。」

結果整個 App 充滿了 Magic Number,沒有一致性,看起來就是「工程師做的設計」。

AI UX Designer 完全改變了這個狀況。它不是隨便選顏色,而是給我一套完整的色彩理論

「我選擇 #6366F1(藍紫色)作為主色,原因是:

  1. 藍色系給人平靜、可信賴的感覺,適合心情記錄的溫暖氛圍
  2. 加入紫色調增加柔和感,避免純藍色的冰冷
  3. 這個色調與大多數 emoji 印章不衝突
  4. 符合 WCAG 2.1 AA 級對比度標準(與白色背景對比度 4.6:1)」

然後它還給了我整套的 Spacing System,基於 8px Grid:

XS: 8px   → 相關元素間距(如文字和圖示)
S: 16px   → 段落間距
M: 24px   → 區塊間距
L: 32px   → 主要區塊間距
XL: 48px  → 頁面上下留白

有了這套系統,我不用再猜「這裡要留多少空間」,照著規則走就好。而且因為是系統化的,整個 App 看起來會很一致。

最讓我驚喜的是 Accessibility 檢查。AI 自動檢查了:

  • 文字對比度是否符合標準(15.8:1,遠超 4.5:1 的要求)
  • 可點擊元素是否夠大(所有按鈕都 ≥ 48px)
  • 是否過度依賴顏色傳達訊息(都有圖示或文字輔助)

這些是我以前根本不會想到的,但 AI 把無障礙設計當作基本要求,自動納入考量。

Day 5 的挑戰:TDD 的心態轉換

說實話,Day 5 是最掙扎的一天。

TDD 的理念我懂:先寫測試,再寫實作。但實際操作時,內心一直有個聲音:

「寫測試好慢啊...不如先把功能做出來,測試之後再補?」

「這個測試是不是太細了?會不會浪費時間?」

「我已經知道要怎麼寫了,為什麼還要先寫測試?」

這種「急著看到成果」的心態,是 TDD 最大的敵人。

但當我逼自己完成第一個 Red-Green-Refactor 循環後,我開始理解 TDD 的價值。

Red Phase(寫失敗的測試)的價值:

當我寫這個測試時:

test('should not allow empty content', () {
  expect(
    () => MoodEntry(
      id: 'test-id',
      content: '',
      stamp: '😊',
      date: [DateTime.now](http://DateTime.now)(),
    ),
    throwsA(isA<ArgumentError>()),
  );
});

我必須先想清楚:「空內容應該怎麼處理?拋出錯誤?還是給預設值?」

這個思考過程逼我在寫 code 之前就把邊界條件想清楚,而不是寫到一半才發現「哎呀,空字串怎麼辦?」

Green Phase(讓測試通過)的價值:

寫實作時,我只需要專注在「讓這個測試通過」,不用想太多:

if (content.isEmpty) {
  throw ArgumentError('內容不能為空');
}

這段 code 很簡單,甚至有點「笨」,但它做到了該做的事。這就是 TDD 的精神:先求有,再求好

Refactor Phase(重構)的價值:

當我想把驗證邏輯抽出來時:

void _validateContent() {
  if (content.trim().isEmpty) {
    throw ArgumentError('內容不能為空');
  }
  if (content.length > maxContentLength) {
    throw ArgumentError('內容不能超過 $maxContentLength 字');
  }
}

我可以放心地重構,因為測試會告訴我有沒有改壞。這種安全感是沒有測試時完全體會不到的。

跑完測試,看到一排綠燈,那種成就感真的很爽。

踩過的坑與解決方案

AI 生成的程式碼不一定能跑

問題:
Day 5 寫測試時,AI 生成的程式碼有時候會有小錯誤,比如 import 路徑錯誤、參數順序不對。

解決方案:
不要無腦複製貼上!

  • 先看懂 AI 的邏輯
  • 檢查 import 和語法
  • 跑一次確認真的能動

AI 是助手不是魔法,它能節省 80% 的時間,但剩下 20% 還是要自己檢查。

測試寫太多反而卡住

問題:
剛開始寫測試時,我想把所有可能的情況都測到,結果寫了 20 個測試,但功能還沒開始做。

解決方案:

TDD 不是追求 100% 覆蓋率,而是測試重要的行為

我學會了問自己:

  • 這個測試在驗證什麼價值
  • 如果這個測試失敗,代表什麼壞掉了?
  • 這個測試是在測行為還是實作細節

只測重要的,其他的可以之後再補。

過度依賴 AI 失去思考

問題:
Day 3 拆 User Story 時,我直接全部交給 AI,結果有幾條 Story 不符合我們的實際需求。

解決方案:
AI 是「協作夥伴」不是「外包廠商」。

  • AI 提供建議,我做最終決策
  • AI 生成初稿,我負責調整細節
  • AI 識別風險,我評估優先級

最好的協作方式是:AI 做 80%,我把關最後 20%

如果重來一次,我會怎麼做?

會保留的做法

1. Day 1 的深度釐清
花時間在一開始把需求想清楚,真的值得。很多專案失敗不是因為技術問題,而是需求一直變。

AI-DLC 的 Inception 階段幫我在第一天就把大部分的問題想清楚,後面開發就很順。

2. Design System 先行
Day 4 建立完整的 Design System 看起來很花時間,但後面實作 UI 時會很快,因為所有的顏色、間距、字體都有規範,不用再猜。

3. TDD 從核心功能開始
Model 層用 TDD 開發絕對是對的,因為它是整個系統的基礎。如果 Model 有 bug,上層全部遭殃。

會調整的地方

1. 更早做技術驗證
我們花了 4 天在文件和設計,直到 Day 5 才開始寫 code。如果重來,我會在 Day 2 或 Day 3 就先做一個技術 Spike,確認技術棧真的可行。

比如:

  • Hive 在 Flutter 真的好用嗎?
  • OpenAI API 的回應時間可以接受嗎?
  • 測試框架的設定有沒有問題?

這種快速驗證可以避免「做到一半才發現技術行不通」的悲劇。

2. 更務實的範圍控制
回頭看 Day 2 的 PRD,我們規劃了太多功能:

  • 心情記錄
  • AI 語錄
  • 日曆視圖
  • 統計分析
  • 主題切換
  • ...

如果重來,我會更激進地砍功能,只保留最核心的價值

  • 記錄心情(文字 + 印章)
  • 儲存到本地
  • 查看歷史記錄

其他的都是「Nice to have」,可以之後再加。

3. 更早開始「看得見」的開發
文件和測試很重要,但人是視覺動物。如果 Day 3 或 Day 4 就能看到一個簡單的畫面,即使只是 UI 沒有功能,也會更有動力繼續做下去。

所以如果重來,我可能會調整順序:

  • Day 1-2: 需求 + 技術驗證
  • Day 3: UI 原型(快速做出畫面)
  • Day 4: Model + Repository(TDD)
  • Day 5-6: 功能整合 + 測試

這樣每天都有「看得見」的進度,心理上比較有成就感。

AI-DLC Sprint 適合什麼專案?

經過這 6 天,我對 AI-DLC Sprint 有了更深的理解。它不是萬能的,而是有適用範圍。

最適合的專案類型

1. 需求相對明確的 MVP
如果你已經有個大致的想法,只是想快速驗證可行性,AI-DLC Sprint 非常適合。它能幫你在最短時間內做出一個「能動」的原型。

例如:

  • 工具類 App(記帳、待辦事項、習慣追蹤)
  • 個人專案(部落格、作品集網站)
  • 內部工具(團隊用的小工具)

2. 技術棧成熟的領域
AI 在「已知」的技術上表現最好。如果你用的是 React、Flutter、Node.js 這種主流技術,AI 的建議會很準確。

但如果你要用很新或很冷門的技術,AI 可能會給出過時或錯誤的資訊。

3. 個人或小團隊(2-3 人)
AI-DLC Sprint 的快速迭代節奏很適合個人開發者或小團隊。大團隊可能需要更多的溝通協調,反而會拖慢速度。

不太適合的情況

1. 需求極度模糊
如果你連「要做什麼」都還不清楚,AI 也幫不了你。AI 能幫你釐清需求,但前提是你至少要有個方向。

比如「我想創業但不知道做什麼」這種問題,AI 給不出答案。

2. 需要大量使用者研究
如果你的專案需要深入了解使用者需求、做市場調查、分析競品,AI-DLC Sprint 可能太快了。

這種專案需要更多的前期研究,不適合「快速衝刺」的模式。

3. 複雜的多團隊協作
如果你的專案涉及前端、後端、設計、產品、測試多個團隊,每個團隊都有自己的流程和節奏,AI-DLC Sprint 的快速迭代可能會造成混亂。

這時候傳統的 Agile 或 Scrum 可能更適合。


上一篇
Day23 - MoodStamp Day 5 - TDD 開發起步:第一個測試
系列文
AI-Driven Development 實戰篇:30 天 Side Project 開發全紀錄24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言