核心原則

工作有兩個獨立維度:ROI 高低 × 是否有外部觸發。

ROI / 觸發有外部觸發沒外部觸發
高 ROI順利做(happy path)被結構性跳過(本卡焦點)
低 ROI該砍掉、不該做自然不做(也對)

高 ROI + 沒外部觸發」是個結構性陷阱 — 知道該做、做了有大回報、但永遠不做。靠「我下次記得」不可行。修法是結構性對策:把外部觸發補上。


為什麼靠紀律不可行

「之後做」是個謊言(共同結構)

#67 我等下會 refactor 是個謊言 已經點到一個面向。把它推廣:

「之後做 X」這個 plan 在 X 屬於「高 ROI + 無觸發」時、預期完成率接近 0。不是個人意志問題、是結構問題:

工作觸發來源「之後做」的執行率
客戶來信催~95%
Bug 卡死流程~95%
Calendar reminder~70%
Sprint planning~60%
自己記下的 TODO~30%
「下次有空我做」~5%

往下走、外部觸發越弱、執行率越低。最弱的「下次有空我做」≈ 0% — 因為「下次」永遠是「現在」、「現在」永遠有更急的事。

為什麼結構性、不是動機問題

「沒外部觸發」 = 沒人催、沒 deadline、沒 alarm、沒 PR review 提醒。腦中有 working memory 限制、優先處理「正在叫」的事。「叫」這個動作只有外部能做 — 自己對自己叫沒用(因為「自己叫自己時」跟「自己接受自己叫時」是同個 context)。

這跟意志力、自律、責任感無關 — 即使最自律的人、面對「沒人催的高 ROI 工作」,執行率也大幅下降。靠紀律 = 預期失敗、然後責怪自己。


多面向:高 ROI + 無觸發的工作清單

每一條都對應某張既有卡的具體展現:

寫程式類

  • Refactor(沒功能壓力)#67
  • Test-first 的 RED 階段(修完才補測試)#69
  • Checkpoint 1(列使用者意圖完整集)#68
  • Ship 前 E2E case 設計#68
  • Code review feedback 的 follow-up(reviewer 留 comment、作者回「之後改」)

維護類

  • Migration cleanup(feature flag 拔除、舊 path 砍掉)
  • Deprecated 程式碼移除
  • Dependency upgrade(沒 breaking 但該升)
  • Performance regression 修復(測量上有但使用者沒抱怨)

文件類

  • API doc / README 更新
  • 事後檢討卡片寫入(這個 cards-skills 系統就是 case — 沒 user 提醒就不會做)
  • Decision log / ADR

監控類

  • Setup observability / log monitor(#68 Checkpoint 4)
  • Alert 規則 review
  • Dashboard 維護

知識類

  • Onboarding doc 更新
  • Post-mortem 寫完發出去
  • 跨團隊 share session

共通結構:每一項都「知道該做、做了有大回報、沒人催就不做」。即使是寫過卡片教自己原則的人(meta-level dogfooding 失敗)也一樣會跳過。


修法:結構性對策的五個層級

從弱到強:

L1:個人紀律(最弱、不可行)

「我下次記得」「我會自律」 — 已經證明 ≈ 0% 執行率。不該寫進 plan。

L2:自我排程(弱)

「每週五下午 refactor 1 小時」「每個月初 review TODO」。比 L1 強、但仍依賴自己當下不分心、不被「更急」的事拉走。執行率約 30-50%。

L3:外部工具觸發(中-強)

把觸發外化到工具:

  • CI / pre-commit hook:commit test file 自動提醒「跑過 RED 嗎」
  • Scheduled scripts:cron job 跑 lint / dep audit / migration cleanup detector
  • Calendar event:固定時間、有 alarm
  • PR template:強制填「Checkpoint 1 列了哪些 case」

工具不會忘、不會拖、不會選擇性執行。執行率 80-95%。

L4:團隊流程(強)

把觸發外化到別人:

  • Pair programming:另一個人在旁邊、會問「為什麼跳過 X」
  • Code review block:reviewer 不通過 PR 直到 X 完成
  • Standup commitment:公開講出「我這週要修 X」、隔天會被問
  • Retro action items:團隊紀錄 + 追蹤、不個人擁有

執行率 90-99%。

L5:結構性不可能(最強)

讓不做 X 變成 ship 不出去:

  • Tests required:CI fail 不能 merge
  • Build fails on stale doc:lint 規則檢查 doc 跟 code 同步
  • Feature flag 自動 expire:超過某時間、flag 被自動移除
  • Linter 禁用 deprecated API:用了就 build 錯

100% 執行率(系統強制)。代價:建立成本高、要團隊認可。

選擇法則:先看哪個層級剛好夠、不要用 L5 解 L3 能解的問題(過度工程)、也不要用 L1 解 L4 才能解的問題(會失敗)。


「想到就動手」是次優、不是最優

直覺反應是「想到該做就立刻做」、避免拖延。這在「想到時剛好沒手邊事」可行、但實際多半「想到時手邊有事」 — 變成中斷當前工作、context switch 高昂。

更穩定的策略:把想到的東西塞進已存在的觸發機制

  • 想到「這個重複了該抽 helper」 → 開 issue / TODO 給下次 refactor session
  • 想到「這個 case 沒測」 → 加進 PR template 的 Checkpoint 1 list
  • 想到「這個 doc 過時了」 → 打開 doc 在 commit 寫 // TODO: 更新 X

「動手」的時機由觸發決定、不由「想到」決定。想到 = 觸發機制的 input、不是執行的 trigger


不該套用本原則的情境

「高 ROI + 無觸發 = 結構性跳過」原則在多數情境成立、但有合理例外:

情境為什麼不該套用
純探索 / 興趣專案沒 ROI 概念、做了爽就好、不需要結構性對策
一次性極小工作5 分鐘內完成、加 trigger 反而成本高
緊急 incident已有最強觸發(系統壞了)、不需額外結構
還沒穩定的探索期規則還在演化、結構性對策可能會卡死探索
學習新技術 / 練習自己選、沒外部 ROI 衡量、跳過也不損失

四類共同特徵:「外部觸發」這個變數已經有解或不存在 — 本原則建立在「沒觸發 = 跳過」上、有觸發或不需要時自然不適用。


跟其他抽象層原則的關係

原則跟本卡的關係
#67 寫作便利度跟意圖對齊反相關#67 是本卡在「寫程式當下選哪條路」面向的展現 — 對齊 = 高 ROI 但無觸發
#68 驗收的時間軸#68 的「Ship 前 / Checkpoint 1 結構性偏差」是本卡在驗收動作的展現
#69 Test-FirstRED 階段被跳過 = 本卡在測試協議的展現
#42 2 次門檻失敗訊號需要被「外部承認」才能觸發轉折 — 跟本卡共骨
#82 字面攔截 vs 行為精煉本卡的 ceiling — L5 hook 只擋字面、行為錯誤需要 L4 review / multi-pass spiral、不是「再寫一條 hook 規則」

本卡是 meta-#67/#68/#69 — 把「為什麼這些動作會被跳過」抽出來、答案是「沒外部觸發 + 靠紀律失敗 = 結構性跳過」。三張卡的修法都是「補外部觸發」、不是「自己更努力」。


對應的實作篇 / 系統建設

把本原則套用到本系統的具體 case:

  • make verify-red-green script#69)— L3 工具觸發、把 retrospective 流程從文字協議升級成可執行 target
  • playwright CI workflow(push / PR 觸發)— L5 結構性、test 不過就無法 merge
  • md-check workflow — L5 強制、卡片格式不對 build fail
  • 本卡誕生過程 — User 提問是 L4 外部觸發、把「該回頭抽 meta」變成有壓力的動作(不然不會做)

每一個都是「把高 ROI + 無觸發的工作、補上對應層級的觸發」。


判讀徵兆

訊號該做的事
Plan 含「之後我會 X」是 L1 紀律、預期失敗、改成 L3+ 觸發
TODO list 累積 30+ 項、半年沒減少觸發機制壞了、不是「太忙」
某類重要工作(refactor / doc / monitor)長期沒做沒外部觸發、補 L3-L5
自己責怪「我又拖延了」結構問題不是個人問題、停止責怪、改機制
同團隊不同人做同類工作的執行率差很多個別人差是表象、機制設計問題(流程不一致)
某個 lint / CI rule 改完所有人都自動跟上L5 對策成功、適合複用到其他類似工作
「想到就立刻做」打斷正在做的事動作該由觸發排程、不由 thoughts 觸發

核心原則:高 ROI 但無外部觸發的工作 = 結構性跳過、不是個人問題。修法是把觸發外化(工具 / 流程 / 結構)、不是「我下次記得」。「之後我會 X」是 plan-level 警訊、應該轉成「X 會被 Y 觸發」的具體機制。