iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0
Software Development

AI 慣老闆的 AI 學習歷程 - AI 時代的軟體工程的反思系列 第 26

AI 慣老闆的 AI學習日記 Day 25 - 新功能要灰度釋出:Feature Flag/Canary/Kill‑Switch/A/B 測試

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250829/20142509mSa7M8C2jm.png

精煉重點 1:先上旗標,再上功能;沒有 Kill‑Switch 就不准上線。
精煉重點 2:灰度釋出=小流量試水+即時觀測 KPI+守門指標不過就立刻回滾。


職場漫才開場

貝老闆(手握手機、眼神發亮):「新活動頁上了就別壞!一次全開 100%,衝一波流量!」

小可(拿摺扇敲他頭):「先別衝!我們用 Feature Flag 灰度釋出,10% 小流量先跑,KPI 不佳就一鍵回滾。」

工程師 King(推眼鏡小聲吐槽):「上次全開害我半夜 Rollback 三次……這次拜託留個 Kill‑Switch。」

AI 實習生(舉手傻笑):「我幫大家把全部使用者都開到 110%!」

小可(白眼):「先把實習生的權限關小!」

電話那頭好威(駭客貓 T‑shirt):「聽好:旗標平台、Canary、Guardrail KPI、還有 A/B。遵守流程,創新才不會變災難。」
活動頁剛開 10% 量,轉換率掉到 0.7×,客服回報『按鈕點了沒反應』。King 從 Feature Flag 平台拉出『promo_v2_button』的變體紀錄,發現 Edge 瀏覽器樣式被新 CSS 打爆。小可立刻切回舊版變體,Kill‑Switch OFF,指標回穩。貝老闆抖著手:「還好沒全開……」

好威解析

  • Feature Flag 就像遙控器,把『發布』跟『部署』分開
  • Canary 是先讓一小群使用者走新路,看會不會掉坑
  • Guardrail KPI 是護欄,像錯誤率、轉換率、TTFB、客訴數
  • Kill‑Switch 是紅色大按鈕,風向不對立刻關。
  • A/B 不是只有換顏色,是驗證假設的實驗設計。這些東西加起來,才能又快又穩。

概念拆解

1)旗標平台與命名規範
旗標不是亂取名的便利貼。用 domain.feature.variant 規則(如 checkout.promo_v2.button),加上 Owner、到期日、預設值與影響面。旗標分『長尾配置』與『短期實驗』,短期旗標到期要清理,避免技術債堆成迷宮。平台可選開源 OpenFeature 或商用 LaunchDarkly 等,但重點是工作流:誰能開、誰能關、誰負責觀測與回報。

2)Canary 灰度策略與守門指標
Canary 不是固定 10% 就好。以風險分級選流量階梯(1%→5%→10%→25%→50%→100%),每一階至少觀測一個穩定期。守門指標(Guardrail)要提前定義:錯誤率、轉換率、TTFB、滯留時間、退款率等,還要設『最小顯著量』,避免因樣本太小誤判。指標不過就自動暫停,人工確認後再決定回滾或修復再試。

3)Kill‑Switch 與回滾流程
Kill‑Switch 必須『即時』『可審計』『權限分離』。誰能按、按了會紀錄到哪、是否需要雙人覆核,都要明確。回滾不是只關旗標,還要同步關聯:Feature Gate、背景排程、實驗埋點、告警閾值。理想流程:按下後 1 分鐘內生效、5 分鐘內 KPI 回到基線,並由 Scribe(可以是 AI 實習生)自動產生事後報告。

4)A/B 測試設計與資料治理
先寫清楚假設與成功條件,例如「按鈕改文案可讓 CTR +5%」。分流要『使用者穩定分桶』,避免跨天換組;指標統計要考慮多重比較與冷啟期;事件追蹤需定義版號與旗標值,確保還原性。結果不顯著就收斂,不要『A/B/C/D/Z』一路測到顯著才宣稱勝利。

最小可行做法(MVP)

  • 流程:開旗標 → 1% Canary → 觀測 30 分鐘 → 5%/10% 階梯 → 守門 KPI 不過即關閉+回滾 → 產出事後報告。
  • 權限:PM 提案、BE 實作、SRE 設告警、資料分析定義 KPI、Owner 負責關閉。
  • 文件:在 PR 模板加上『旗標名/Owner/到期日/回滾步驟/影響面』。

旗標設計範例(僅示意)

# flags.yaml(後端讀取;前端以相同 key 透過 SDK 注入)
checkout:
  promo_v2:
    default: false
    owners: ["pm.xk", "be.king"]
    expires_at: 2025-09-30
    kill_switch: true
    rollout: [1,5,10,25,50,100]  # 階梯
    guardrails:
      - metric: conversion_rate
        lower_than: -5%   # 低於基線 5% 就停
      - metric: error_rate
        higher_than: 1%   # 高於 1% 就停
// pseudo TypeScript(前端)
if (flags.get("checkout.promo_v2") && user.bucket() < 0.10) {
  renderPromoV2();
} else {
  renderPromoV1();
}

與 AI 協作(怎麼問才有用)

  • 產生旗標方案
    「請依據『結帳頁改版』產生 Feature Flag 名稱、Owner、到期日、回滾步驟與階梯釋出計畫,並列出需要監測的 Guardrail KPI。」
  • 自動監測腳本
    「給我一段程式,每 1 分鐘比對新舊版 conversion、error_rate、TTFB,若超過閾值就呼叫 /flag/off 並在 Slack @oncall。」
  • A/B 假設檢定
    「用二項檢定估算目前樣本量下的顯著性,告訴我何時可以停止實驗。」

Takeaways(延伸說明)

  • 把『部署』與『發布』解耦,旗標使你能先把程式碼安全地送上去,等到條件成熟才對外開啟。這讓風險從『一次性豪賭』變成『可控小實驗』。而解耦也讓排程、排假與營運時程更有彈性。

  • 灰度釋出是節奏管理,階梯與觀測時間不是宗教儀式,而是依風險等級調整。核心在於『先定義守門指標』與『自動化暫停/回滾』,避免人腦延遲導致災情擴大。

  • Kill‑Switch 要可用又可查,權限分離、審計日志、雙人覆核可以降低『一鍵全毀』的風險。把回滾寫進 PR 模板與 Runbook,災時才不會靠回憶。

  • A/B 是科學實驗,不是顏色大賽,先有假設與成功標準,再談設計與樣本量。資料事件要帶上版本與旗標值,才能事後重現與追責。


今日提問

1)你們團隊目前最缺的是旗標平台、指標監測,還是回滾 Runbook?
2)若只能選三個 Guardrail KPI,你會挑哪三個?為什麼?

小作業(可直接丟給 AI)

「請根據我們的『結帳頁改版』,產生一份灰度釋出計畫:旗標命名、Owner、到期日、Canary 階梯、Guardrail KPI 與閾值、Kill‑Switch 的觸發條件、Slack 告警訊息範本與事後報告模板。」


上一篇
AI 慣老闆的 AI 學習日記 Day 24 - PII 亂飛,隱私合規拉警報
下一篇
AI 慣老闆的 AI學習日記 Day 26 - 需求來得快,流程卡得更快,人+ AI 沒更快
系列文
AI 慣老闆的 AI 學習歷程 - AI 時代的軟體工程的反思31
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言