ข้ามไปยังเนื้อหา

Prerequisites

prerequisite คือเงื่อนไขที่คุณแนบไปกับ feature flag ที่บอกว่า: “ประเมิน flag นี้ก็ต่อเมื่อ flag อื่นเปิดอยู่ (หรือมีค่าเฉพาะ)”

ทำให้คุณสร้าง dependency chain ได้:

  • checkout-v2 เปิดใช้งานได้ก็ต่อเมื่อ new-payment-provider เปิดอยู่
  • ai-search-results เปิดใช้งานได้ก็ต่อเมื่อ search-redesign เปิดอยู่ และ beta-features เปิดอยู่

หากไม่มี prerequisites คุณต้องจัดการ dependency เหล่านี้ด้วยตัวเองในโค้ดของแอป — เพิ่ม if (flagA && flagB) guard ทุกที่ prerequisite ย้าย logic นั้นเข้าไปใน GrowthBook ทำให้โค้ดสะอาดขึ้นและ dependency มองเห็นได้ใน UI

prerequisites มีประโยชน์สูงสุดเมื่อ:

  • Staged rollout chains — flag ระดับ surface ขึ้นอยู่กับ infrastructure flag ที่ rollout เต็มที่แล้ว
  • Kill switches พร้อม dependencies — การปิด new-payment-provider ควรปิดทุกอย่างที่ depend อยู่โดยอัตโนมัติ โดยไม่ต้อง deploy ใหม่
  • Beta gate stacking — ฟีเจอร์เข้าถึงได้เฉพาะเมื่อ user อยู่ใน beta cohort ทั่วไป AND อยู่ใน sub-experiment เฉพาะ
  1. ไปที่ Features และเปิด feature ที่คุณต้องการเพิ่ม prerequisite (flag dependent)
  2. บนหน้า feature detail คลิก Edit ถัดจาก Default Value & Rules
  3. เลื่อนลงไปที่ส่วน Prerequisites และคลิก Add Prerequisite
  4. ใน dropdown ค้นหาและเลือก flag parent (อันที่ต้องเปิดก่อน)
  5. ตั้ง Required Value — สำหรับ boolean flag เลือก true
  6. คลิก Save

ตอนนี้เมื่อ SDK ประเมิน flag dependent:

  • หาก parent flag เป็น false (หรือ override rules คืนค่า false) flag dependent จะคืนค่า off value โดยไม่คำนึงถึง rules ของตัวเอง
  • หาก parent flag เป็น true flag dependent จะประเมินตามปกติ

สำคัญ: Circular prerequisites (A ต้องการ B, B ต้องการ A) จะถูก GrowthBook ตรวจพบและบล็อกตั้งแต่ save time

ลองนึกถึงสาม feature ตามลำดับ:

new-payment-provider (infrastructure flag)
↓ prerequisite
checkout-v2 (UI flag)
↓ prerequisite
express-checkout (premium surface flag)

การปิด new-payment-provider จะ cascade — ทั้ง checkout-v2 และ express-checkout ดับอัตโนมัติ แม้ว่า rule ของทั้งคู่จะบอกว่า ON ทำให้คุณมี kill switch เดียวสำหรับทั้ง chain

import { GrowthBook } from '@growthbook/growthbook';

const gb = new GrowthBook({
  apiHost: 'https://cdn.growthbook.io',
  clientKey: 'sdk-YOUR_DEV_KEY',
  attributes: { id: 'user-123' },
});

await gb.init({ timeout: 2000 });

// Prerequisites are evaluated server-side in GrowthBook
// and baked into the feature payload the SDK downloads.
// No extra client code is needed — isOn() already
// respects the prerequisite chain.

const paymentOn = gb.isOn('new-payment-provider');
const checkoutOn = gb.isOn('checkout-v2');       // false if paymentOn is false
const expressOn  = gb.isOn('express-checkout');  // false if checkoutOn is false

console.log({ paymentOn, checkoutOn, expressOn });
ตัวเลือกBenefitCost
ตั้ง Prerequisite flagป้องกัน dependency ผิดลำดับเพิ่มความซับซ้อนของ dependency graph
ไม่ตั้ง Prerequisiteง่ายกว่าเสี่ยง feature ถูกเปิดก่อนที่ dependency พร้อม
  • สร้าง circular dependency ระหว่าง flag (flag A ต้องพึ่ง B, B ต้องพึ่ง A)
  • ลืมว่า prerequisite ที่ปิดจะทำให้ feature ลูกปิดไปด้วยเสมอ
  • ไม่ document dependency graph ทำให้ทีมอื่นไม่รู้ว่าทำไม flag ถึงปิดอยู่

💡 ตัวอย่างจากของจริง

ระบบ platform ขนาดใหญ่ใช้ prerequisite flag เพื่อบังคับว่า feature ใหม่ต้องรอ infrastructure flag (เช่น “new-api-ready”) เปิดก่อนเสมอ

เกิดอะไรขึ้นกับ dependent flag เมื่อ prerequisite parent flag ปิดอยู่?
คุณเพิ่ม prerequisite ให้กับ feature ได้ที่ไหนใน GrowthBook UI?
SDK ต้องการโค้ดเพิ่มเติมเพื่อรองรับ prerequisites หรือไม่?
GrowthBook ทำอะไรเมื่อคุณพยายามสร้าง circular prerequisite (A ต้องการ B, B ต้องการ A)?