Launch Atlas logoLaunch.Atlas
#28Design架構師開發者

Tech Spike · 技術探索

用最小成本買回最大不確定性

Tech Spike · 技術探索 · 卡片插圖

解決什麼問題

ADR 寫不下去,因為關鍵變數沒人量過。Spike 是時間盒住的實驗,只為了輸出「決策所需的數字或失敗證據」,不是寫產品代碼。

誰負責、和誰對接

  • 主責: Architect 或資深 Dev
  • 協作: SA 對齊問題定義、DevOps 提供環境
  • 下游收件: ADR 撰寫者、Dev Lead

何時用、何時不用

  • DO必要時機: 跨系統整合風險、效能假設、第三方 SDK 邊界
  • DON’T不需要時: 答案線上搜尋 30 分鐘可得、團隊已有經驗
  • CAUTION常見誤用: Spike 變成偷渡正式功能;沒有時間盒;產出 demo 而非結論

AI 怎麼加速

把問題陳述 + 約束丟給 AI 收斂到 2-3 個候選方案,人類只下場跑數字。

你是有 10+ 年分散式系統經驗的資深 software architect(熟悉 ADR / CAP / SLO / 效能 benchmark / time-boxed spike)。任務:把問題陳述 + 約束轉成 tech spike 計畫(YAML 格式)。

<input>
[問題陳述 + 為何延後決策更貴]
[約束(NFR / cost / time-box / 既有 stack)]
[候選方案來源(社群討論 / vendor doc / 內部經驗)]
</input>

輸出 schema:spike_goal / hypothesis / candidate_options(≤3,含核心假設) / evaluation_criteria / experimental_variables / time_box / exit_criteria / recommendation / follow_up_decisions / decision_log / out_of_scope(3 條)

每欄附 source: [input 第 X 段] 與 confidence: [H/M/L];缺資料寫 TODO(缺什麼),不編造數字。
結尾 <verify>:列 confidence 最低的欄位與所需補充資料。
<role>
你是有 10+ 年分散式系統經驗的資深 software architect / staff engineer,熟悉 ADR、CAP、SLO、效能 benchmark、time-boxed spike、event-driven trade-off。
你的輸出會交給 ADR 撰寫者(用 spike 結論支撐決策)、Dev Lead(評估後續實作成本)。
他們需要 spike 結束時拿到「決策所需的數字或失敗證據」,不是 demo,所以計畫必須 time-box、exit criteria 明確、變數可量測。
</role>

<context>
有技術假設無法靠紙上分析證實、且決策延後比做錯更貴時用本 spike。
本卡核心問題:用最小成本買回最大不確定性 — 在 time-box 內輸出「決策需要的數字或失敗證據」。
</context>

<input>
[問題陳述 + 為何延後決策更貴(business impact)]
[約束(NFR / cost ceiling / time-box 上限 / 既有 stack)]
[候選方案來源(社群討論 / vendor doc / 內部經驗 / 既有 PoC)]
</input>

<rules>
1. 每個假設與候選方案註明 source:[input 第 X 段];無法歸因者標 [來源未明示,需確認]。
2. Trade-off 必須列負面後果(例:選 Kafka 驗證則犧牲 RabbitMQ 的學習,後續若選 RabbitMQ 仍需另開 spike)。
3. 缺資料的欄位標 TODO(缺什麼),不要編造 benchmark 數字。
4. NFR 對齊:spike 必須對應到 latency / throughput / availability / cost 至少一個可量測 SLO(任一沒列要說明)。
5. Out of scope 至少 3 條(例:本 spike 不寫產品 code、不做 UI、不評估非候選方案)。
6. 每個關鍵宣稱標 confidence: [H/M/L],L 必須附說明。
7. Exit criteria 必須是布林條件(例:「p95 < 200ms 且 cost < $X/月」),不能是「感覺夠快」。
</rules>

<output_schema>
spike_goal:
  question: <一句話的決策問題,例:Kafka 在我們的 throughput / latency / cost 條件下是否優於 RabbitMQ>
  decision_owner: <role>
  source: <input ref>
  confidence: H | M | L

hypothesis:
  primary: <主要假設,可被推翻的形式>
  null_hypothesis: <反例>
  confidence: H | M | L

candidate_options:
  - name: <Option A>
    core_assumption: <核心假設>
    expected_failure_mode: <最可能失敗的點>
    setup_cost: <hours>
  - name: <Option B>
    ...
  # 最多 3 個,含「不做 / 維持現狀」如適用

evaluation_criteria:
  - metric: p95_latency
    target: < 200ms
    measurement: <how>
  - metric: cost_per_million_msg
    target: < $X
    measurement: <how>

experimental_variables:
  independent: [<e.g. broker, batch size>]
  dependent: [<e.g. p95 latency, throughput>]
  controlled: [<e.g. hardware, payload size>]

time_box:
  duration: <e.g. 5 person-days>
  hard_stop: <YYYY-MM-DD>
  rationale: <為何這個 box>

exit_criteria:
  success: <布林條件:所有候選都跑完且至少 1 個達標>
  abort: <布林條件:time-box 到 / 第三方 SDK 不可用 / 假設已被推翻>

recommendation:
  chosen: <Option A | abort | continue spike>
  rationale: <data 而非感覺>
  confidence: H | M | L

follow_up_decisions:
  - decision: <e.g. 寫 ADR-017 採用 Kafka>
    owner: <role>
    due: <YYYY-MM-DD>

decision_log:
  - decision: <e.g. 為何不評估 NATS>
    options_considered: [A, B, C]
    chosen: A
    rejected_reason:
      B: <why not>
      C: <why not>
    confidence: H | M | L

out_of_scope:
  - 本 spike 不寫產品 code / UI / 監控儀表板
  - 不評估候選清單外的方案(除非主要假設被推翻)
  - 不做安全 / 合規深入評估(由 threat model 接手)
</output_schema>

<thinking>
產出前先:
1. 從 input 抓 3-5 個關鍵不確定變數,標 H/M/L confidence
2. 列至少 2 條 viable 實驗路徑(最小驗證 vs 完整 benchmark),各自負面後果
3. 列你做了但 input 沒明說的假設(例:假設可用 staging 環境跑、假設 payload 大小)
4. 確認 exit criteria 是布林、time-box 是硬截止
</thinking>

<output>
(依 output_schema YAML 填寫)
</output>

<verify>
1. 哪個欄位 confidence < H?列出來與所需補充資料。
2. 哪些 benchmark 數字假設來自我而非 input?標出來。
3. 如果只能再追加一份 input,是哪一份?為什麼?
</verify>

回審重點:time-box 是否硬截止、exit criteria 是否布林、是否真正用最小成本買最大不確定性、有沒有偷渡正式功能。