လွယ်လွယ်ပြောရရင် Feature Flag ဆိုတာ App ထဲက လုပ်ဆောင်ချက်တစ်ခုကို Code ပြန်တင်စရာ မလိုဘဲ ခလုတ်နှိပ်ရုံနဲ့ ဖွင့်/ပိတ် လုပ်လို့ရတဲ့ နည်းလမ်းပါ။ Feature အသစ်ကို သုံးစွဲသူအားလုံးဆီ တစ်ခါတည်း ထုတ်မယ့်အစား ခလုတ်ပိတ်ထားပြီး Code ကို အရင်တင်ထားလို့ ရပါတယ်။ အဆင်သင့်ဖြစ်မှ ခလုတ်ဖွင့်လိုက်ရုံပါပဲ။

ကျွန်တော် ဒါကို ဆိုင်တစ်ဆိုင်နဲ့ ဥပမာပေးချင်တယ်။ ဆိုင်က အစားအစာအသစ် တစ်မျိုး ရောင်းချင်တယ်ဆိုပါတော့။ ရိုးရိုးနည်းဆိုရင် Menu တစ်ခုလုံး ပြန်ရိုက်ပြီး အားလုံးဆီ တစ်ခါတည်း ရောင်းရမှာပါ။ အစားအစာက မကောင်းရင် ဆိုင်တစ်ဆိုင်လုံး ဒုက္ခရောက်မယ်။ Feature Flag နည်းဆိုရင် အစားအစာအသစ်ကို Menu မှာ ထည့်ထားပေမယ့် ခလုတ်ပိတ်ထားတယ်။ စမ်းချင်တဲ့စားပွဲအနည်းငယ်ကိုပဲ အရင် ရောင်းကြည့်တယ်။ ကောင်းရင် လူတိုင်းကို ဖွင့်ပေးတယ်။ မကောင်းရင် ခလုတ်ပိတ်လိုက်ရုံပဲ။ Menu ပြန်ရိုက်စရာ မလိုဘူး၊ ဆိုင်ပိတ်စရာ မလိုဘူး။

Feature Flag က ဘယ်လို အလုပ်လုပ်လဲ?

Code ထဲမှာ Flag ကို စစ်တဲ့ အပိုင်းလေး ထည့်ထားပါတယ်။


if feature_flag("new-checkout-page") is on:
    ပြင်ဆင်ထားတဲ့ Checkout Page အသစ်ကို ပြပါ
else:
    Checkout Page အဟောင်းကို ပြပါ

Flag ရဲ့ အခြေအနေကို Code ထဲမှာ တိုက်ရိုက်မရေးဘဲ သီးသန့် Flag စနစ် (ဥပမာ LaunchDarkly၊ Unleash၊ ဒါမှမဟုတ် ကိုယ့် Database) ထဲမှာ သိမ်းထားပါတယ်။ ဒါကြောင့် Flag ပြောင်းချင်ရင် Code ကို ပြန်တင်စရာ မလိုဘဲ Dashboard ကနေ ခလုတ်နှိပ်ရုံပဲ လိုတာပါ။

Feature Flag နဲ့ ဘာတွေ လုပ်လို့ရလဲ?

တဖြည်းဖြည်း ထုတ်တာ — အရင်က Canary Deployment အကြောင်း ရေးခဲ့ဖူးပါတယ်။ Feature Flag က အဲဒီသဘောကို ပိုလွယ်အောင် လုပ်ပေးပါတယ်။ အသုံးပြုသူ ၁% ကို အရင်ဖွင့်ပေးတယ်။ ပြဿနာ မရှိရင် ၁၀%၊ ၅၀%၊ ၁၀၀% ဆိုပြီး တိုးသွားတယ်။
အရေးပေါ် ပိတ်တာ (Kill Switch) — Feature အသစ်မှာ ပြင်းထန်တဲ့ Bug တွေ့ရင် Code ပြန်တင်ပြီး Deploy ပြန်လုပ်ဖို့ နာရီဝက်စောင့်စရာ မလိုဘူး။ Flag ပိတ်လိုက်တာနဲ့ ချက်ချင်း အဟောင်းပြန်ဖြစ်သွားပါတယ်။ ဒါက အရေးပေါ်အချိန်မှာ အသက်ကယ်တဲ့ နည်းလမ်းပါ။
A/B Testing — လူတစ်ဝက်ကို ဒီဇိုင်း A၊ တစ်ဝက်ကို ဒီဇိုင်း B ပြပြီး ဘယ်ဟာက ပိုကောင်းလဲ တိုင်းတာလို့ ရပါတယ်။
သီးသန့် အသုံးပြုသူတွေကို ပေးတာ — စမ်းသပ်သုံးစွဲသူတွေ၊ ဒါမှမဟုတ် ငွေပိုပေးတဲ့ Customer တွေကိုပဲ Feature အသစ် အရင်ပေးလို့ ရပါတယ်။

Feature Flag သုံးတဲ့အခါ သတိထားရမှာ

Flag အဟောင်းတွေကို ပြန်ရှင်းပါ — Feature အသစ် အားလုံးဆီ ရောက်သွားပြီးရင် Flag ကို Code ထဲက ပြန်ဖြုတ်ရပါတယ်။ မဖြုတ်ဘဲ ထားရင် Flag တွေက တစ်ဖြည်းဖြည်း များလာပြီး Code က ရှုပ်ထွေးသွားပါတယ်။ ဒါကို Flag Debt လို့ ခေါ်ပါတယ်။ အခန်းထဲမှာ အမှိုက်စုသလိုပါပဲ။ တစ်ခါတစ်လေ ရှင်းရပါတယ်။
Flag ကို အသေးစိတ် မစဉ်းစားဘဲ မသုံးပါနဲ့ — Flag တစ်ခုချင်းစီက Code ထဲမှာ လမ်းကြောင်း ၂ ခု ဖြစ်စေပါတယ်။ Flag ၁၀ ခုရှိရင် လမ်းကြောင်း ပေါင်းများစွာ ဖြစ်သွားပြီး စမ်းသပ်ဖို့ ခက်လာပါတယ်။
အသေးစား Project တွေအတွက်က Environment Variable လည်း လုံလောက်ပါတယ် — ကိုယ့်တစ်ယောက်တည်း Project လေးမှာ Feature Flag Service ကြီး သုံးဖို့ မလိုပါဘူး။ .env ဖိုင်ထဲမှာ NEW_FEATURE=true လို့ ရေးထားရုံနဲ့တင် အဲဒီသဘောကို ရပါတယ်။ အရင်က Environment Variable အကြောင်း ရေးခဲ့ဖူးပါတယ်။

Feature Flag နဲ့ Deploy ခွဲခြားတာ

အရင်က Deploy ဆိုတာ Feature ထွက်တာနဲ့ အတူတူပဲ ထင်ခဲ့ဖူးပါတယ်။ Code တင်လိုက်ရင် သုံးစွဲသူက မြင်သွားပြီ။ Feature Flag က အဲဒီနှစ်ခုကို ခွဲလိုက်ပါတယ်။ Code တင်တာက Deploy ပါ။ Feature ဖွင့်တာက Release ပါ။ ဒီနှစ်ခု ခွဲလိုက်တော့ Developer တွေက စိတ်အေးအေးနဲ့ Code တင်လို့ ရသွားတယ်။ Feature ဖွင့်မယ့်အချိန်ကို သီးသန့် ရွေးလို့ ရတယ်။ သောကြာညနေမှာ Code တင်ပြီး တနင်္လာနေ့မှ ဖွင့်မယ်လို့လည်း ဆုံးဖြတ်လို့ ရတယ်။

ကျွန်တော်ပြောချင်တာက Feature Flag က ကြီးမားတဲ့ ကုမ္ပဏီတွေအတွက်ပဲ မဟုတ်ပါဘူး။ ကိုယ့် Project လေးမှာတောင် “အသစ်ကို လူတိုင်းမမြင်ခင် ခဏပိတ်ထားမယ်” ဆိုတဲ့ စိတ်ကူးက အလုပ်ကို အများကြီး စိတ်ချမ်းသာစေပါတယ်။ Update တင်တိုင်း ရင်တုန်နေရတဲ့ ခံစားချက်ကို ခလုတ်လေးတစ်ခု နှိပ်ရုံနဲ့ ပြန်ပိတ်လို့ရတယ်ဆိုတာ သိသွားရင် Deploy လုပ်ရတာ ပိုပျော်လာပါလိမ့်မယ်။ 🙂

—

Avatar photo
Min SiThu
@itsmeminsithu

Software Engineer & Tech Content Creator

View all posts