iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
Vibe Coding

四個番茄鐘,三次重新來過:我跟 AI 的 30 天開發考古系列 第 16 篇

Day 16|16:24 建專案,22:51 做完第三個里程碑

  • 分享至 

  • xImage
  •  

2026 年 6 月 12 日,Pomofocus 的第一天。commit 紀錄是這樣的:

16:24  M0: project skeleton with transparency smoke test          (1ff4a3a, 497 行)
17:25  M1: timer MVP — full state machine, timer panel UI,        (b46b3d7, 699 行)
       synthesized chimes
20:57  M2: data + settings — JsonStore base (atomic write +       (a9a4c3d, 797 行)
       debounce), settings/stats stores, settings panel UI
21:07  M2 補上秒級精度設定                                          (b8a2d90, 101 行)
22:51  M3: break guidance — break_window with 3 intensities,      (dd1b96f, 1102 行)
       5 eye-care step scenes, short/long break orchestration

六個半小時,四個里程碑,3196 行。

我知道這看起來很像「用 AI 三小時做完一個 App」的行銷文。所以這篇要講的是:為什麼這次可以,前面三次不行。

差別不在速度,在有沒有終點

Sproutimer 也很快。4 月 7 日晚上 58 分鐘就有一個會跑的番茄鐘計時器,比這個還快。

差別在於,Sproutimer 那 58 分鐘之後沒有終點。
我做完計時器就開始想「接下來做什麼」,然後是設定視窗、標籤、筆記、音樂、自動變色⋯⋯每一個都是當下想到的。

Pomofocus 在動工前就有六個里程碑,每個里程碑寫死了內容和驗證方式:

階段 內容 驗證成果

| M0 骨架 | 建專案、目錄、project settings(透明/embed off)、autoload 空殼 | 主視窗能跑;透明冒煙測試 PASS |
| M1 計時 MVP | 狀態機完整 + timer_panel UI + 音效 | 自動測試以縮時設定跑完整循環(含長休/skip/overrun);pause/resume 凍結正確 |
| M2 資料+設定 | settings/stats store(原子寫檔)、settings_panel | store 自動測試 22 項 PASS |
| M3 休息引導 | break_window 三強度、五個 step、流程編排、達成回寫 | 自動測試 37 項 PASS |

底下還有一句:

MVP = M0-M2(可日常自用),靈魂功能在 M3/M5,招牌噱頭在 M4。

這句話定義了什麼可以晚點做。前三版每個功能在我眼裡都一樣重要,於是我照著「哪個做起來比較有趣」的順序做。

每個里程碑都附驗證

上面那張表右邊那欄是關鍵。「M2 自動測試 22 項 PASS」「M3 自動測試 37 項 PASS」——這些不是我事後補的,是當下就要跑過才算完成。

這對 vibe coding 是必要的。AI 產出的速度遠超過我 review 的速度,M3 那個 commit 1102 行,我不可能逐行看。我能做的是確認它自己跑過的測試涵蓋了關鍵行為:短休長休流程、跳過和完成的差別、強制模式的 ESC 逃生。

至於畫面好不好看、手感對不對,那是我的工作,交接文件裡另外列了一節「待人工驗證」。

那天做出來的東西

M1 的狀態機有個細節我覺得值得講:所有計時都用 Time.get_unix_time_from_system() 的差值算,不是用每幀累加。

原因寫在風險清單裡——筆電闔上再打開,累加式的計時器會以為時間沒有經過。用絕對時間就不會有這個問題。

這是規劃階段就決定的事,不是踩到坑之後才修。

M2 的原子寫檔:設定和統計都存成 JSON,寫的時候先寫暫存檔再 rename,避免寫到一半當機造成檔案損毀。加上 debounce,不會每改一個設定就寫一次硬碟。

M3 的三種休息強度:柔性小視窗、全螢幕可跳過、強制全螢幕鎖定。這是整個程式最重要的功能,因為它直接對應我前三版失敗的原因——提醒太弱,我會忽略。

對照一下四月

Sproutimer 13 個開發日、103 個 commit、40 小時,最後停在一個沒合併的分支。
Pomofocus 前三個里程碑只花一天,六天後(6/18)已經是我可以日常使用的狀態。

同樣的人、同樣的工具、幾乎同樣的每日時數。差別是有沒有先想清楚要蓋什麼,以及怎麼知道蓋好了。

帶走這個:里程碑表只要兩欄,但第二欄不能空

我的里程碑表:

階段 內容 驗證成果
M2 資料+設定 store(原子寫檔)、設定面板 store 自動測試 22 項 PASS
M3 休息引導 三強度視窗、五個步驟、達成回寫 自動測試 37 項 PASS;雙螢幕遮罩待實機

右邊那欄是整張表的價值所在。沒有驗證方式的里程碑,等於沒有終點——沒有終點就會一直覺得「好像還可以再加一點」,然後就變成我的第二版。

還有一句話建議寫在表格下面,一行就好:

MVP = M0–M2(可日常自用),靈魂功能在 M3/M5,招牌噱頭在 M4。

這句話定義了什麼可以晚點做。沒有它的話,每個功能在眼裡都一樣重要,於是就會照「哪個做起來比較有趣」的順序做——而最有趣的那個,通常不是最該做的那個。

最後一個實務細節:時長要能調到秒。 在 M2 特地加了秒級設定,就是為了讓 25 分鐘的循環可以在幾十秒內測完。這種「為了測試而做的功能」看起來像繞路,實際上它讓後面每一次驗證都快十倍。

明天講素材。6 月 15 日晚上 8 點 12 分到 8 點 47 分,35 分鐘之內,我用 AI 產的圖做出了一隻會走路的貓。


上一篇
Day 15|動工前先寫測試:我把最危險的功能排在第一個
下一篇
Day 17|AI 畫貓、AI 切圖、AI 寫程式:那隻貓花了 35 分鐘
系列文
四個番茄鐘,三次重新來過:我跟 AI 的 30 天開發考古 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言