Thuta Learning
How Mobile Apps Work
AdvancedMobile Developmentintermediate

Mobile Production Operations

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Mobile Production Operations concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • Diagram/checklist ကို ဖတ်ပြီး mobile architecture/decision ဘယ်လို ဆက်စပ်နေသလဲ ခြေရာခံနိုင်ရန်
  • ကိုယ့် mobile app project အတွက် ဘယ်လို အသုံးချသင့်သလဲ ရှင်းပြနိုင်ရန်

နားလည်ထားရမယ့် အချက်

production ထဲမှာ mobile app run နေတဲ့အခါ developer ကိုယ်ပိုင် phone ပေါ်မှာ ဘယ်တော့မှ မပေါ်ပေါက်ဖူးတဲ့ problem တွေ ပေါ်လာပါတယ်။ app version ဘယ်ဟာတွေ, OS version ဘယ်ဟာတွေ, screen ဘယ်ဟာတွေမှာ crash ဖြစ်လဲဆိုတာ သင်ကိုယ်တိုင် ကိုင်ဆောင်ခွင့် ဘယ်တော့မှ မရမယ့် device fleet အစစ်တွေ အနှံ့ ကြည့်ရှုနိုင်ဖို့ လိုအပ်ပါတယ်။

crash report ထဲ sensitive data ဘယ်တော့မှ မထည့်ပါနဲ့

problem ကို ပြန်လုပ်ပြီးဖြေရှင်းနိုင်လောက်တဲ့ အသေးစိတ်ကို ဖမ်းယူပါ၊ ဒါပေမယ့် password, token, ဒါမှမဟုတ် sensitive user data ကို crash report ထဲ ဘယ်တော့မှ log မလုပ်ပါနဲ့။

version fragmentation ကတော့ နောက်ထပ် mobile-specific truth တစ်ခုပါ - သင့် user တွေဟာ နှစ်ပေါင်းများစွာ ဟောင်းနေတဲ့ version တစ်ခုအထိ update လုပ်ထားခဲ့တဲ့ app version အမျိုးမျိုးမှာ ပျံ့နှံ့နေကြပါတယ်။ သင့် backend API က app version အများကြီးကို တစ်ပြိုင်နက် ခေါ်နေတာကို support လုပ်ရပါတယ်။

  • Optional update: user တွေကို ရိုးရိုးလှမ်းခေါ်တာ၊ လျစ်လျူရှုနိုင်ပါတယ်။
  • Recommended update: block မလုပ်ဘဲ ပိုပြင်းထန်စွာ တွန်းအားပေးတာ။
  • Force update: version ဟောင်းကို လုံးဝ block လုပ်တာ။
  • Emergency security update: real vulnerability တစ်ခုအတွက် ပုံမှန်သတိထားမှုကို ကျော်လွန်တာ။

feature flag တွေက ဒီနေရာမှာ အထောက်အကူပြုပါတယ် - ship ထားပြီးသား code ကို backend က ဖွင့်ပေးမှသာ active ဖြစ်စေနိုင်ပြီး gradual rollout, beta, emergency disable ကို release အသစ်မလိုဘဲ လုပ်နိုင်ပါတယ်။

mobile rollback ဟာ web deployment လို instant မဟုတ်ဘဲ - version တစ်ခု device ပေါ် ရောက်သွားပြီဆိုရင် ပြန်ပြင်ဖို့ release အသစ် ဒါမှမဟုတ် flag flip တစ်ခုမှသာ ရနိုင်ပြီး redeploy တစ်ခုတည်းနဲ့ ဖြေရှင်းလို့ မရနိုင်ပါဘူး။

text
BACKWARD COMPATIBILITY CHALLENGE
--------------------------------
BACKWARD COMPATIBILITY CHALLENGE
----------------------------------
v1 App (older, still installed)  ---+
                                     |
                                     +--> Backend API
                                     |      (must support
v2 App (latest release)          ---+       both versions)

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

ပထမ release အစစ်မတိုင်ခင်ကတည်းက crash monitoring ကို ထားပါ၊ ပထမ problem ဆိုးတစ်ခုပြီးမှ မဟုတ်ဘဲ - user တွေ ညည်းညူပြီးမှ ထည့်ရင် incident ဆိုးဆုံးတွေရဲ့ data ကို လက်လွတ်ဆုံးရှုံးပြီးသားပါ။

app version, OS version, device model, crash ဖြစ်တဲ့ screen ကို ဖမ်းယူအောင် config လုပ်ပြီး password, token, ဒါမှမဟုတ် personal identifier ဆိုင်ရာ ဘာမဆို report ထဲ ကပ်ပါလာရင် ရှင်းလင်းဖယ်ရှားပါ။

Compatibility မေးခွန်း မေးပါ

install ဖြစ်ပြီးသား app version ဟောင်းတွေက code အသစ်ယူဆထားတာနဲ့ မတူတဲ့ ဘာတစ်ခုခု ပို့နေမလား ဒါမှမဟုတ် မျှော်လင့်နေမလား။

ပုံစံနှစ်ခုစလုံးကို Support လုပ်ပါ

field အဟောင်းကို အမည်ပြောင်းမယ့်အစား field အသစ်ထည့်ပါ, endpoint ဟောင်းကို ရှင်သန်နေအောင်ထားပါ, လိုအပ်မှသာ တိတိကျကျ version ခွဲပါ။

ပထမဦးဆုံး Feature Flag ကို စဉ်းစားပါ

force update မလိုဘဲ feature flag ဒါမှမဟုတ် server-side toggle က problem ကို ဖြေရှင်းနိုင်လားဆိုတာ စစ်ဆေးပါ။

Force Update ကို Emergency အတွက်ပဲ သိမ်းထားပါ

force-update prompt ကို ပုံမှန် nudge မဟုတ်ဘဲ user ရဲ့ နေ့စဉ်ဘဝကို ပြင်းထန်စွာ ဖျက်ဆီးတဲ့အရာအဖြစ် သဘောထားပါ။

Mobile Rollback ဟာ Instant မဟုတ်ပါဘူး

mobile rollback ဟာ web deployment လို instant မဟုတ်ပါဘူး - install ဖြစ်ပြီးသား version ဟာ update အသစ်တစ်ခုနဲ့ အစားထိုးမှသာ device ပေါ်က ပြောင်းသွားမှာဖြစ်တဲ့အတွက် release မလုပ်ခင် သေချာစွာ test လုပ်ပါ။

အတူတူ စမ်းရေးကြည့်မယ်

javascript
function evaluateApiChangeSafety(change) {
  if (change.isBreakingChange && change.oldAppVersionsStillInUse) {
    return {
      safeToShip: false,
      recommendation: "Version the endpoint or support both old and new shapes until old app versions age out."
    };
  }
  if (change.isBreakingChange && !change.oldAppVersionsStillInUse) {
    return {
      safeToShip: true,
      recommendation: "No old versions depend on the previous shape -- confirm with real usage data before assuming so."
    };
  }
  return { safeToShip: true, recommendation: "Non-breaking change; ship normally." };
}

const riskyChange = { isBreakingChange: true, oldAppVersionsStillInUse: true };
const safeChange = { isBreakingChange: false, oldAppVersionsStillInUse: true };

console.log("Risky change:", evaluateApiChangeSafety(riskyChange));
console.log("Safe change:", evaluateApiChangeSafety(safeChange));
You should see
risky change (breaking ဖြစ်ပြီး old version တွေ သုံးနေသေးတဲ့) က { safeToShip: false, recommendation: 'Version the endpoint or support both old and new shapes...' } ကို ပြန်ပေးပါတယ်။ safe change (non-breaking) ကတော့ { safeToShip: true, recommendation: 'Non-breaking change; ship normally.' } ဖြစ်ပါတယ်။

၅ မိနစ် စမ်းကြည့်

app လက်ရှိဖတ်နေတဲ့ field တစ်ခုကို ဖယ်ရှားမယ့် backend API change စိတ်ကူးတစ်ခု ဒီဇိုင်းရေးပါ။ old app version တွေ still active ဖြစ်တယ်လို့ ယူဆပြီး evaluateApiChangeSafety-စတိုင် function ကို run ကြည့်ပါ၊ ပြီးရင် backward-compatible အစားထိုးနည်းကို ဆုံးဖြတ်ပါ။

သတိလေးတစ်ချက်

release ဆိုးတစ်ခုပြီးမှသာ crash monitoring ကို ထည့်တာ - အရေးအကြီးဆုံး incident တွေရဲ့ data ကို လက်လွတ်ဆုံးရှုံးလိုက်တာ။

လိုအပ်ချက်အစစ်မရှိဘဲ စိတ်မရှည်လို့ force update လုပ်လိုက်တာ - ဘာမှမမှားခဲ့တဲ့ user တွေကို စိတ်အနှောက်အယှက် ဖြစ်စေတာ။

Feature toggle - WikipediaHow Mobile Apps Work

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • release ဆိုးတစ်ခုပြီးမှသာ crash monitoring ကို ထည့်တာ - အရေးအကြီးဆုံး incident တွေရဲ့ data ကို လက်လွတ်ဆုံးရှုံးလိုက်တာ။
  • လိုအပ်ချက်အစစ်မရှိဘဲ စိတ်မရှည်လို့ force update လုပ်လိုက်တာ - ဘာမှမမှားခဲ့တဲ့ user တွေကို စိတ်အနှောက်အယှက် ဖြစ်စေတာ။
  • ဒီ course က Android Development, Flutter, iOS Development, React Native tutorial တွေကို ထပ်မသင်ပါ — framework hands-on depth အတွက် အဲဒီ course တွေဆီ ဆက်သွားပါ။ ဒီ course က framework-neutral mobile architecture, decision-making, build/deployment/security concept တွေကိုသာ သင်ပေးပါတယ်။

လေ့ကျင့်ခန်း

app လက်ရှိဖတ်နေတဲ့ field တစ်ခုကို ဖယ်ရှားမယ့် backend API change စိတ်ကူးတစ်ခု ဒီဇိုင်းရေးပါ။ old app version တွေ still active ဖြစ်တယ်လို့ ယူဆပြီး evaluateApiChangeSafety-စတိုင် function ကို run ကြည့်ပါ၊ ပြီးရင် backward-compatible အစားထိုးနည်းကို ဆုံးဖြတ်ပါ။

You'll know it worked when: risky change (breaking ဖြစ်ပြီး old version တွေ သုံးနေသေးတဲ့) က { safeToShip: false, recommendation: 'Version the endpoint or support both old and new shapes...' } ကို ပြန်ပေးပါတယ်။ safe change (non-breaking) ကတော့ { safeToShip: true, recommendation: 'Non-breaking change; ship normally.' } ဖြစ်ပါတယ်။

Mobile Production Operations | Thuta Learning