Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Controlled Mobile Rollout with React Native

Avatar for talianassi talianassi
August 10, 2020

Controlled Mobile Rollout with React Native

Controlled rollouts, or canary releases, allow you to release your features to a small subset of your user base at a time to ensure functionality before releasing it to your entire user base. Its a fundamental piece of having an effective CI/CD pipeline, and essential to chaos engineering because you can roll out features to production, test them in production, and ensure functionality and reliability. However, this process on mobile comes with some challenges. How do you propagate feature flagging configuration to mobile devices that don't always have a strong network? As a mobile developer, you want to be able to use the latest flag configuration, but you also don't want to stop someone using the app just because you can't load the feature flag config. In this talk, we'll start with why controlled rollout is important and how feature flags enable you to do it successfully, then we will talk about mobile specifics, and then a demo with React Native.

Avatar for talianassi

talianassi

August 10, 2020
Tweet

More Decks by talianassi

Other Decks in Technology

Transcript

  1. Feature Flags are a safety net Turn on and off

    features without a lengthy release process Test your features in production Provides a safety net to enable controlled rollouts A/B Test
  2. What happens when you don’t have a strong network and

    cant load the feature flag config?
  3. ANDROID AND IOS CACHING Allows flags that control exposure to

    your new features, improvements, and bug fixes to be regularly updated and stored in the cache for instances when connectivity might not be available.
  4. How did Debbie do it? <SplitTreatments names={[‘enable-barcode-shopping’]}> {({treatments}) => {

    const showBarcodeExperience = treatments[‘enable-barcode-shopping’]; if(showBarcodeExperience) return <BarcodeShopping/>; else return null; } </SplitTreatments>