AI 當工程師,我當主管
AI 當工程師,我當主管
AI 分享

AI 當工程師,我當主管

一個非工程師,如何把 Vibe Coding 變成可管理、可驗收的開發流程。

分享人 佳臨 身分 製造業 × Vibe Coder 時間 約 60 分鐘 + Q&A
00

這場分享要講什麼

  • 第一部 我的 AI Coding 三階段:每一階段都是被前一階段的失敗推出來的
  • 第二部 我現在的開發流程

一個非工程師,如何把 Vibe Coding 變成可管理、可驗收的開發流程。

我看不懂大部分程式碼。這套流程不是讓我變強,是讓我像個主管:在看不懂細節的情況下,仍然能判斷「這件事做完了沒有」

PART 01

我的 AI Coding 三階段

01

Vibe Coding 的問題

Fitness Expedition 運動 RPG · Codex · Python × Streamlit × Google Sheet

活力遠征狀態總覽頁:玩家職業、等級、EXP、HP/MP、技能摘要、懲罰剩餘回合
活力遠征回合與抽卡頁:事件選擇、抽怪物、個人額外抽卡

點圖可放大

  • 只提供幾個規則說明的 md 檔,前端、後端、資料庫全由 AI 決定,資料庫接 Google Sheet
  • 全程用自然語言提需求,沒有任何開發架構與流程
  • 結果:畫面粗糙、沒有響應式、功能不齊、錯誤修不完
沒有規格的時候
1
只有初始的零散文件
開頭寫的幾份說明,之後沒有再維護;需求的其餘部分只存在我腦中,每次對話都要重新描述一遍
2
用自然語言講一次
技術選型交給 AI,我沒有判斷依據,也就無法糾正
3
AI 做出東西
看起來能跑,但「做完了沒有」由它自己認定
4
不是我要的,再講一次
回到步驟 2。每一輪都在重新解釋,而不是累積
5
超出上下文長度
分段作業,做了後面就忘記前面的決定
6
錯誤修不完,專案停擺

五個失敗原因

排序有意義——最不重要的那個,正好是當時我以為最重要的那個

01沒有規格
上下文長度有限,加上分段作業,每次新對話都在重新推測需求。規格真正的功能是跨對話的共同記憶
02沒有明確驗收條件
「做完了」由誰認定?當時的答案是 AI 自己認定。
03技術選型交給 AI
不知道選項之間差在哪,就失去糾錯的能力
04AI 還不夠聰明
這是事實,但它是五項裡最不重要的一項。模型能力提升之後,同樣的做法仍然會失敗。
05門外漢
看不懂程式碼不是關鍵,不知道該問什麼才是。
02

接觸 SDD:openspec

規格驅動開發 Spec-Driven Development

  • 什麼是 SDD:先把「要做什麼」寫清楚再動手——蓋房子先畫藍圖,不是拿起鐵鎚就開始敲
  • AI 為什麼特別需要:上下文長度有限、分段作業,規格就是路線圖
  • openspec:給 AI 用的 SDD 標準作業程序,npm install -gopenspec init
六個步驟,重複迭代、逐步加入新功能
指令只有三個:proposal 開案、apply 施工、archive 收帳;中間三步是 proposal 產出的文件
1
提案 /openspec:proposal
這個功能要解決什麼問題?不做什麼?
2
設計 design.md
劃定本次變更的邊界、重要決策與風險
3
規格 specs/
用情境 Scenario 描述系統行為
4
任務 tasks.md
按規格展開具體工作,讓 AI 照著做
5
實作與驗證 /openspec:apply
AI 自己先檢查,再由人工檢查
6
歸檔 /openspec:archive
寫入這個專案的規格書,成為下一輪變更的起點

案例:JJoy 家庭娛樂記帳 APP

JJoy 家庭娛樂記帳 · openspec · Vue 3 × Supabase × Netlify

自家的娛樂費規則(月預算 + 有運動加 300 元)· 規則明確、規模小 · 不到一天做出來

JJoy 記帳 APP 畫面:預算摘要、費用記錄、運動記錄
功能:月份導覽、預算摘要、費用記錄、運動記錄、超支警示、跨年到期提醒。完整紀錄見 打造家庭娛樂記帳 APP — Vibe Coding 從零到上線的實踐心得
文件兩份人機共管文件

execution-plan.md 計劃書 → 進度追蹤清單(誰負責、打勾)

ToDoList.md 途中的想法先寫下來,一段落再討論

協作先說明自己是新手

寫進 CLAUDE.md:技術決定要說明優缺點與取捨理由

dev_exp.md 記三種:學到的概念、可遷移的決定、踩過的坑

execution-plan.md:分 Phase 的任務清單,標示負責人是 Claude 或使用者
進度追蹤清單長這樣——每一項都標明由人還是 AI 負責
這階段最重要的發現:AI 的計算也會出錯

資料庫表格設計不符合使用需求、費用結餘的計算方式有誤。後來寫成紅線第二條:寫成測試腳本後,一定要由人驗算一次

但還有一個問題沒解決:規格寫得再細,仍有一整類問題是文字描述不出來的。

03

學習 Agentic Engineering

Google 5-Day AI Agents 課程 課程連結(免費,有興趣可以自己上)

DAY 1關鍵不在模型,在 Context Engineering

Context 六類:指令、知識、記憶、範例、工具、護欄。

靜態(CLAUDE.md,每次互動都載入,消耗 token)與動態(Skill、RAG,需要時才載入)要分開管理。

Day 1 為什麼你的 AI 比較聰明?關鍵不在模型

DAY 2MCP 是 agent 的通用接口

選工具的原則是「夠用就好」——MCP 與 Skill 都不是安裝越多越好

Day 2 幫你的 AI Agent 裝上萬用插頭

DAY 3Agent Skills:把經驗變成資產

context rot(上下文腐化):靜態背景放太多,會稀釋掉真正重要的訊號。

Skill 的命名與 description 欄位決定它會不會在對的時機被觸發。

Day 3 Prompt 的下一步:把經驗變成 Skill

DAY 4安全性與評估

沙盒、紅藍綠隊、Vibe Coding 特有的風險。核心提問:AI 做完了,但它做對了嗎?

Day 4 Vibe Coding 的陰影:當 AI 開始自己寫程式

DAY 5規格驅動的正式環境開發

程式碼變便宜之後,什麼變貴了?同一個 AI 要戴不同的帽子。以及先寫一個會失敗的測試

Day 5 Vibe Coding 不等於 Vibe 上線:AI 寫程式,要先寫規格

建立你的 Agent 資產庫:從每次空白開始,到把經驗累積進 Harness
不是每次重新組裝,而是設計能持續生產價值的系統。
開發重點從「規格」,轉變成「規格 + 測試」。規格說要做什麼,測試說做到了沒有。

三段光譜:差別不在有沒有用 AI

Vibe Coding、Structured AI-Assisted Coding、Agentic Engineering 三段光譜對照
差異不在是否使用 AI,而在如何驗證輸出結果。出自 為什麼你的 AI 比較聰明?關鍵不在模型
驗證方式驗什麼誰來驗
測試 Tests確定性的部分:給定輸入就有對應輸出程式碼
評估 Evals不確定性的部分:步驟軌跡、工具選擇、回應品質標記資料集、評分量表、LM 裁判

管理 context window + Matt Pocock 的 Skill

  • 對話變長之後,模型在後段的判斷品質會下降 → 工作單位要切到「一個全新對話裝得下」
  • 命名會影響流程:決策卡與任務卡混用,整套流程會跟著偏掉

我現在的 dev skill,骨架來自這幾個 skill(點開看說明)。順序不能顛倒:grill → to-spec → to-tickets

SKILLgrill

Matt Pocock 最有名的一支。不是我寫需求給 AI,是讓 AI 當審稿人,在寫任何程式碼之前把我問到說清楚

它解決的是門外漢最大的問題:我不知道自己漏了什麼。產出是需求決策清單,答案會沉澱成這個專案的共同術語。

SKILLto-spec

已經談清楚的對話整合成正式的產品需求文件(PRD)。它不負責重新訪談,所以順序很重要:先 grill,再 to-spec

PRD 要有:背景與目標、使用者角色與核心流程、功能與非功能需求、不做什麼(Out of Scope)、驗收標準。我的 dev-spec 就是從這個 skill 改出來的。

SKILLto-tickets

把龐大的功能需求或規格,拆成範圍明確、具備依賴關係的小單元。避免一次丟給 AI 過大的任務,導致脈絡混亂或改壞既有程式,讓 AI 沿著確認過的規格逐步執行。

核心原則是垂直切片,不是水平切片:每張卡從資料表 → 後端邏輯 → 畫面 → 測試切穿一條窄路,做完就能親手操作看到結果,而不是先把整個資料層做完再往上疊。我的 dev-tickets 沿用這個原則。

SKILLwayfinder

它防的是一件事:在你還沒決定的事情上先動手。大需求一次丟給 AI,它會照自己的假設做下去,錯了就是大返工。

做法是先命名終點(終點決定每張卡長什麼樣),再把「已經預感到、但還講不清楚的決策」畫成迷霧,把現在就能處理的卡放上前線。原則是 Plan, don't do:先解決決策,不急著產出東西。

卡分四種:研究(查外部事實,AI 自己跑)、原型(做粗的換回饋)、拷問(跟我對話釐清)、雜務(現實的前置作業)。地圖只是索引,決定留在各自的卡裡。

SKILLprototype

用在設計還不確定的時候。撰寫程式碼的成本已大幅下降,「該長什麼樣、操作順不順」用文字討論半天,不如直接做出來。

做一個可拋棄的版本,驗證完就淘汰——它的產出是判斷,不是程式碼。

PART 02

我現在的開發流程

04

Dev Skill 全景

把踩過的坑固化成標準作業程序

一個功能,從想法到上線
0
dev-kickoff
專案層級,只跑一次:開案問卷、專案 CLAUDE.md 與六條紅線、規格骨架、品質工具。既有專案補制度也走這個 skill

功能起點:方向定了嗎?

A
dev-wayfinder
大軟體、方向未定:畫地圖,一次結一張決策卡
B
grill
小軟體、方向清楚:訪談到可驗收的精確度
1
dev-spec
產出 SPEC.md 或 delta.md
2
codex-peer-review
第二個 AI 交叉審查規格
我核准
沒有這一步,流程不往下走
3
dev-tickets
拆成垂直切片任務卡
4
逐卡施工
開新對話,一次一張卡
5
dev-verify-card
當場人工驗收,然後回到步驟 4 做下一張
6
dev-verify-spec
三問檢查、跨卡整合驗收、合併回規格總帳
7
dev-closeout
上線前六項檢查
我用正式網址親手跑一次
這一步沒有替代方案
隨時可叫的:git-commit(版控)/dev-test-plan(寫測試)/dev-debug(診斷錯誤)/dev-ci-setup(自動檢查)
  • 每個階段都有核准關卡——AI 不能自己往下一關走
  • 工作單位是「一個全新對話裝得下」——避免中途遺失前面的決定
  • 做成 Skill 而不是寫在提示詞裡:屬於動態 context,需要時才載入

為什麼從 openspec 換成自己這套

  • openspec 的文件層數太多,小案子光是文件作業就佔掉半天
  • 現在收成兩層SPEC.md 一本總帳 + changes/{功能}/delta.md 差異規格
  • 入口也簡化:小軟體直接 grill 後開工;大軟體先用 wayfinder 釐清架構
05

wayfinder 與 grill

動工之前,先把方向定下來,再把需求問清楚

wayfinder:想法太大、方向未定的時候

方向已經清楚、只差寫規格,就直接走 dev-spec。開一張沒必要的地圖只是增加流程成本

MAP.md 只當索引,一個決定只住在它自己的卡裡
已定案
每條只記一行摘要與連結
前線 FRONTIER
沒被擋住的卡,現在可以認領
迷霧區 FOG
還講不清楚的,先不要切成卡

一個對話只結一張卡。這張卡缺的是什麼?

RESEARCH
缺事實 → 派 subagent 去查
PROTOTYPE
缺高保真回饋 → 做一個預計丟棄的版本
GRILL
缺人的取捨(預設型別)→ 跟我談
TASK
缺一個不做就無法決定的動作
結卡 → 地圖加一行 → 迷霧散開就升級成新卡 → 回到前線。迷霧清空、沒有未決的卡,就交棒 dev-spec
三條鐵律

只決策,不施工 | 一個對話只結一張卡 | AI 不得代替我回答它自己提的問題

霧散了、方向定了,接下來才是把細節問到可以驗收的精確度。

grill:拷問模式

不是我寫需求給 AI,是 AI 反過來把我問到說清楚——因為我不知道自己漏了什麼

六條訪談紀律為什麼
一次只問一題一次給五題,我只會挑最容易回答的那題
附上建議答案開放式問題我答不出來,選項我判斷得了
查得到的事實自己查只問需要我決定的事
順著依賴走先問會影響後續答案的上游決策
挑戰模糊語言「使用者」指誰?「完成」的判準是什麼?
用具體情境施壓「月底 31 號跨月呢?」在例子上做決定,不在抽象原則上表態

結束方式:輸出共識清單(問題 → 決定 → 理由一句),我確認後才動工。小軟體到這裡就能開工。

grill 第 7 題:登入狀態保持多久,四個選項各自附上代價
先給現場情境再提問;四個選項各自寫明代價,連不建議的那個都列出來——「列在這裡只是讓你確認不選它」。
grill 第 9 題:密碼打錯幾次要鎖,先聲明哪些是實作決策
「先講一個我已經替你查掉、不需要你決定的事」→「要你裁決的是政策」。事實自己查,決策才問人。
06

dev-kickoff

開案時一次把制度裝好

dev-kickoff:八個步驟

新專案走完整流程;既有專案補掛制度也走同一個 skill,只補缺的部分

0
判斷模式
空資料夾走完整流程;已有程式碼改走 brownfield 規則
1
一則訊息問完開案問卷
專案名稱與一句話目標/Node.js 還是 Python/需不需要資料庫/部署平台。四題都有明確答案才往下走
2
生成專案 CLAUDE.md
從模板生成,全文貼給我看過一遍,確認六條紅線
3
建立規格骨架
docs/specs/changes/done/。SPEC.md 本體不在這裡建,由第一次 dev-spec 從討論中生成
4
建立 .gitignore
依專案類型複製,並用白話說明每一項為什麼要忽略:.env 有金鑰、node_modules/dist/ 可以重建
5
安裝品質工具
Node.js:ESLint + Prettier + Husky;Python:先建 venv,再裝 Ruff + pre-commit。裝完各跑一次確認能動
6
生成計劃與追蹤文件
專案計劃.md專案進度追蹤.md
7
逐節討論專案計劃
這一步是對話,不是模板填空:目標、MVP 功能清單、技術選型表(每項都要寫選擇理由)、不做的事、里程碑與完成判準
8
首次 commit
呼叫 git-commit skill,不直接下 git 指令
部署平台的判斷:純前端搭 Supabase → Netlify;有自己的後端伺服器或 Docker → Zeabur;個人腳本、內部工具 → 暫不部署。
既有專案補制度的三條規則

先盤點再動手:列出「已有什麼、缺什麼」給我看過,同意後只補缺的。不覆蓋既有檔案:已有 CLAUDE.md 或 .gitignore 就改用差異合併,逐條加入。不動既有程式碼:這個 skill 只裝制度,不重構也不改功能。

專案 CLAUDE.md 的六條紅線

違反任一條就停下來,先取得我的同意

01先討論再動手
新模組、新檔案、架構或選型變更,先提案並取得同意才實作。功能變更一律走 dev-spec → dev-tickets → dev-verify-spec。
02業務邏輯要使用者驗算
涉及金額、結餘、日期規則等計算,完成後必須用具體數字舉例請我驗算,不得自行宣告正確。
03危險操作用白話確認
執行 rm、資料庫 migration、改 git 歷史、權限變更之前,先用白話說明「這會做什麼、影響什麼、能不能復原」。
04資料庫預設 RLS
涉及資料庫的功能,設計階段就規劃 Row-Level Security;預設拒絕,明確寫政策才放行
05git 一律走 git-commit skill
不直接下 git commit 或 push 指令。
06套件安裝先查證
安裝任何非主流套件前,先到 npm 或 PyPI 確認套件存在、下載量、維護狀態,回報後才安裝。
07

dev-spec 與交叉審查

規格只寫行為,而且要先被另一個 AI 審過一輪

首次SPEC.md v1
專案第一次寫規格,產出全量總帳。
DELTAchanges/{功能}/delta.md
「修改」段每一條都必須引用 SPEC.md 現有條文並寫影響檢查——這是替我做的回歸影響檢查。
輕量小改動直接做
改文案、調樣式這種一目瞭然的小事走輕量通道。沒有這條,流程本身的成本會超過它防的風險

規格紀律:只寫行為,不寫實作。實作決策記在 delta 的 Implementation Decisions,那一節永遠不會併進 SPEC.md。

codex-peer-review:為什麼要找第二個 AI

  • 規格自審,審不出源自自己假設的缺口
  • 規格的缺口會一字不漏變成程式碼的錯誤;在文字這層修正只花幾行字
  • Stop hook 硬性把關:規格檔沒蓋審查 marker 就不准收工——靠制度,不靠自律
Codex 挑出 10 條 major issues,Claude 先跑指令驗證再逐條修
不是照單全收,而是先驗證:用 sed 確認它指的行號屬實、用 grep 數出 81 處樣式混用。驗完才接受這 10 條,其中 2 條採用不同解法。
五輪審查後 APPROVED,21 條全部成立
跑了 5 輪才 APPROVED,Codex 提的 21 條全部成立,一次都沒有被反駁。
Codex 抓到的關鍵問題為什麼嚴重怎麼改
健康檢查不會重啟卡住的容器只會被標成 unhealthy 然後繼續掛著,User Story 4 完全落空改成容器內監督程序
首次設定是一條無密碼登入捷徑任何人都能替沒密碼的人設定密碼,並立刻用他的身分進入加上「開放設定密碼」30 分鐘窗口
鎖定機制可被用來癱瘓全站登入頁公開全部人名,連續輸錯就能把同事鎖在門外鎖定改綁「人員 + 來源電腦」
漏了 SPEC 四行沒處理合併後總帳會同時存在兩套相反的行為逐條補進修改段
08

dev-tickets:拆成垂直切片

  • 垂直切片:每張卡切穿資料 → 邏輯 → 介面 → 測試的一條窄路,不是先做完整個資料層
  • 一個功能通常 2~8 張卡;超過 8 張表示規格太大,該回頭分期
  • 拆完就停,不在同一個對話開始實作
拆卡提案:8 張卡,標示卡名、Blocked by、做完能親手驗什麼
三個欄位:卡名Blocked by(誰先誰後、哪幾張能平行)、做完你能親手驗什麼
最重要的是「做完你能親手驗什麼」

用我的操作語言寫,不是用程式語言寫,而且連「這張卡還不會做到什麼」都寫明——此時系統還沒上鎖,那是 02 卡的範圍。

卡上的「驗證證據」要在施工完成的當下填寫,不留到驗收時回頭補。
09

dev-verify-card:人工驗收

每做完一張卡就當場驗,不累積到最後

  • 驗收清單不寫成 md,產成 HTML:docs/verify/index.htmldata.jsresults/
  • 雙擊就能開、不用起伺服器、填寫自動存在瀏覽器、可分次完成、最後匯出 JSON
  • 整個資料夾進版本控制,這是專案的驗收歷史帳
驗收 Hub 早期:完成 1 張卡,共 14 項全部未測
完成 1 張卡:14 項、全部未測。
驗收 Hub 後期:完成 4 張卡,共 43 項,通過 5 項
完成 4 張卡:43 項、通過 5。項目是累加的,先前填的結果不會被覆蓋。

四個篩選鈕:全部/只看未測/只看高風險、人工必測/只看不通過。逐卡驗收階段,結案鈕是鎖住的,跑完 dev-verify-spec 才解鎖。

一條驗收項 = 一條走得完的操作路徑

使用者的時間是整套流程裡最貴的資源。別項的前提不要再獨立列一項;一張卡超過 5~6 條,通常是拆太細了。

欄位規則
coverage.auto確實有自動化測試涵蓋,附上測試檔路徑與測試名稱
coverage.agentAI 實際執行過,附上跑了什麼指令、看到什麼輸出
risk高/中/低,加一句具體理由
manualOnly畫面觀感、金額驗算、外部系統串接、需要真實時間流逝 → 永遠排最前面
crossEnv只給行為確實會因環境而異的項目開啟

找不到證據就填 false,不推測「應該有測過」——這一欄的用途是決定我把時間花在哪。

人工必測|風險高|自動化測試 ✗|AI 驗過 ✗|跨環境

這一項的題目
純看版面(這一項 AI 完全驗不了)。

① 登入頁與「請設定你的密碼」頁:
   欄位寬度、按鈕位置、字級看起來合不合理?把視窗拉窄會不會爆版?

② 人員主檔的操作欄現在一列有四顆按鈕+一行狀態文字,
   會不會太擠、擠到看不懂哪顆是哪顆覺得哪裡不對就寫在備註裡,這種事只有你看得出來。

不通過:三選一

  1. 當場修:改動小、在這張卡的範圍內
  2. 開新卡:牽涉範圍超出這張卡
  3. 延後:對應的規格條文不得合併進 SPEC.md
不自行判定「這個不算問題」。使用者說不通過就是不通過,最多是討論怎麼處置。
回到第一部:人工驗收為什麼不能省

某次驗收時抓到——一個按鈕要把頁面上下捲動才能重複點選。這種操作上的問題,AI 自己測不出來

全部卡做完 → dev-verify-spec

  • 三問檢查:漏做/多做(範圍擴張)/做錯
  • 跨卡整合驗收:單卡都通過,不代表串起來會正確——這是逐卡驗收唯一的結構性缺口
  • delta 合併回 SPEC.md(由我看 diff 核准)→ change 資料夾搬到 done/ 封存
10

git-commit

git 是唯一的還原機制,但指令沒人教

顯示目前變更 → 安全掃描 → 規劃 commit 計畫(判斷要不要拆)→ 逐筆 commit → 確認後才 push

git-commit 的安全掃描報告與 commit 拆分建議
安全掃描不是只回一句「通過」,而是逐項說明判定安全的依據。
掃描逐項說明判定依據
  • .env.example 只新增說明與佔位字串,沒有真實金鑰
  • docker-compose 用的是變數引用,不含實際值
  • 新檔案掃過,沒有寫死的密碼或 token
  • 真正的 .env 沒有進變更清單,已被 .gitignore 擋住
攔截什麼情況會被強制擋下

檔名:.env**.pem*.keyid_rsa

內容:password=api_key=secret=token=

被攔下時會說明「這會造成什麼、建議怎麼處理」。

37 個修改檔 + 8 個新增檔,建議分成 3 筆。拆分邏輯是按性質分,不是按時間分

commit 訊息照 Conventional Commits 寫:這是業界通用的規範,格式是 type: 說明文字。好處是讀歷史紀錄時,光看前綴就知道這筆在做什麼,工具也能據此自動產生版本紀錄。

type用途範例
feat新功能feat: 新增使用者登入頁面
fix修正錯誤fix: 修正送出表單後畫面空白的問題
docs文件變更docs: 更新 README 安裝說明
refactor重構refactor: 拆分登入邏輯為獨立模組
chore雜項設定、依賴chore: 新增 .gitignore
test測試test: 補充登入流程的單元測試

繁體中文、動詞加受詞、30 字以內,說「做了什麼」而不是「為什麼」。

11

dev-closeout

上線前的六項收尾檢查

檢查項做什麼
一、程式碼清理框架模板殘留檔(列清單,經同意才刪)、<title> 不是「Vite App」、package.json 的 name、favicon
二、文件README 至少要有「專案是什麼、怎麼安裝執行、環境變數清單(只列名稱不列值)」;進度追蹤的「延後/技術債」逐項確認是接受還是要處理
三、規格收帳changes/ 應該是空的;抽 2~3 條核心行為規則對照程式碼;SPEC.md 版本紀錄每個 change 都有一行
四、安全檢查RLS 是否啟用、前端不得有 service key、git ls-files 確認 .env 不在追蹤中、npm audit 結果用白話回報
五、git 收尾git status 乾淨、push 後確認部署平台自動重新部署成功
六、交還使用者正式網址親手跑一次完整流程:登入、操作核心功能、確認資料正確
最後一步只能由使用者做。AI 不得替使用者宣告這一步完成——測試全數通過,不等於功能正確。

還有 change 沒收完怎麼辦:卡做完了就引導跑 dev-verify-spec 驗收合併;卡沒做完,就問我要完成還是放棄。放棄的 change 搬到 done/ 並註明「未實作即關閉」,它的條文不得出現在 SPEC.md

CLOSING

結尾

12

那我什麼時候該用 vibe coding?

不是二選一,是同一條光譜上的刻度。決定落在哪一端的,是「產出需要被驗證到什麼程度」。

兩個問題就能決定

  1. 這東西出錯,誰會受影響
  2. 這東西會存在多久
Vibe Coding 那端Agentic Engineering 那端
例子一次性腳本、資料清洗、個人小工具、探索性原型同事或客戶每天在用的系統,牽涉金額、日期、權限
出錯代價丟掉重做,成本接近零要有人收拾,而且常常是上線之後才發現
需求哪裡來做了才知道自己要什麼動手前先問到可驗收的精確度:方向未定走 wayfinder,方向清楚走 grill
給 AI 的東西幾句話一整套 harness(見下)
工作單位一個對話從頭做到尾一張任務卡一個對話,每張卡切穿資料表 → 邏輯 → 畫面 → 測試
誰說做完了我自己看一眼,覺得可以就可以規格說要做什麼,測試與人工驗收說做到了沒有;AI 不得自行宣告
出錯之後重講一次,再生一版git 還原 → 先寫會失敗的回歸測試 → 修 → 規格補一條
換人接手只有我知道當初為什麼這樣做規格是團隊的共同語言:任務卡可以分給不同人平行做,驗收紀錄與 commit 留下誰在什麼時候確認了什麼

右邊那欄的「harness」是什麼

不是提示詞寫得更長,是把「這件事怎麼被做完」整個架起來。對照 Day 1 的 context 分類:靜態的每次都載入,動態的需要時才載入

指令與護欄(靜態)
專案 CLAUDE.md 的六條紅線,每次互動都在,違反就停下來等我同意
流程(動態)
dev skill 這一整套,該用到才載入,避免 context 被稀釋
記憶
SPEC.md 總帳與任務卡,是跨對話的共同記憶,不靠我每次重講
證據
驗收 Hub 的打勾紀錄、測試結果、commit 歷史,用來回答「做完了沒有」
一個人是紀律,一群人就是制度

我是一個人在跑這套,所以每一關的核准人都是我。放到企業團隊裡,這些東西的名字其實你都認得:規格是需求規格書任務卡是工單分派紅線是作業規範驗收紀錄是稽核軌跡。差別只在於,這次接單的是 AI。

人一多,harness 反而更不能省:多個人同時叫 AI 改同一套系統,沒有共同的規格與驗收紀錄,衝突會在上線那天才爆出來。

怎麼判斷

第一題:出錯了誰會受影響?

A
有人靠它工作,或牽涉金額、資料、權限
走規格:grill → 規格 → 任務卡 → 驗收
B
只有我自己
進入第二題

第二題:這東西會存在多久?

B1
用完就丟
直接 vibe,執行結果肉眼驗
B2
之後還要回來改
先做一個預計丟棄的原型,用它把規格談清楚,再照規格重做
中間帶才是常態

大部分案子是先 vibe 再收斂。關鍵是事先說好這個版本要被丟掉——原型直接沿用成正式版,是最常見的失敗方式。

  • 小工具走完整流程 → 流程本身的成本超過它防的風險(所以要有輕量通道,所以方向清楚就不開地圖)
  • 正式系統直接 vibe 上線 → 就是第一部那個坑。Vibe Coding 不等於 Vibe 上線
13

三個階段

這套流程真正在管的,不是 AI 夠不夠聰明,而是「做完了」由誰認定

每一階段補的是上一階段沒補的那個缺口
1
只有想法
AI 照自己的理解做,做出來的不是我要的
2
加上規格
AI 知道要做什麼了,但「做到沒有」仍然由它認定
3
加上測試與人工驗收
完成與否由我認定,AI 負責在過程中留下證據
14

延伸閱讀

我的文章

其他來源

AI 分享教材 | 佳臨