[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-mobile-app-production-14-design-choices-en":3,"article-related-mobile-app-production-14-design-choices-en":30,"series-industry-02eda58c-984d-45d3-88cd-e3e9554cf28c":73},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":29},"02eda58c-984d-45d3-88cd-e3e9554cf28c","mobile-app-production-14-design-choices-en","Mobile app production depends on 14 design choices","\u003Cp data-speakable=\"summary\">Mobile app production depends on modular code, BFFs, versioning, flags, and staged rollouts.\u003C\u002Fp>\u003Cp>Mobile apps get hard to operate long before they get big in user count. This newsletter from \u003Ca href=\"https:\u002F\u002Fnewsletter.systemdesign.one\u002Fp\u002Fsystem-design-mobile\" target=\"_blank\" rel=\"noopener\">The System Design Newsletter\u003C\u002Fa> says part 3 covers 14 production concepts that shape how apps are built, shipped, and kept alive after release.\u003C\u002Fp>\u003Cp>The list is practical: modular architecture, backend for frontend, app versioning, feature flags, deep links, permissions, accessibility, localisation, graceful degradation, geo usage, crash reporting, crash-free rate, and staged rollouts. That mix tells you where mobile teams spend their time once the first version is already in users’ hands.\u003C\u002Fp>\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Concept\u003C\u002Fth>\u003Cth>What it solves\u003C\u002Fth>\u003Cth>Why mobile teams care\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>14 concepts\u003C\u002Ftd>\u003Ctd>Production app design and operations\u003C\u002Ftd>\u003Ctd>Covers build, ship, and post-release work\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>3-day app review window\u003C\u002Ftd>\u003Ctd>Release delay\u003C\u002Ftd>\u003Ctd>Feature flags reduce wait time\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>5 backend services\u003C\u002Ftd>\u003Ctd>Screen-level data aggregation\u003C\u002Ftd>\u003Ctd>BFF cuts client-side request fan-out\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>2026 cohort start\u003C\u002Ftd>\u003Ctd>Partner promotion timing\u003C\u002Ftd>\u003Ctd>Shows the newsletter’s publication date\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>Modular architecture keeps code from turning into sludge\u003C\u002Fh2>\u003Cp>The article starts with modular architecture, also called feature-based modules. The idea is simple: split a mobile app into separate pieces so auth, feed, checkout, and similar features do not all live in one giant codebase. Each module owns its own code and exposes only the parts other modules need.\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782267479521-v1yh.png\" alt=\"Mobile app production depends on 14 design choices\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>That matters because large mobile apps slow down in ways that are painful for developers and users. The newsletter points out that a huge monolith can take minutes to compile. If only one module changes, only that module needs rebuilding, which saves time during active development.\u003C\u002Fp>\u003Cp>There is a tradeoff here. Module boundaries need real discipline. Shared concerns such as analytics, navigation, and design systems often need a common core, and teams have to watch for circular dependencies. Once a monolith has grown too far, splitting it later is much harder than starting clean.\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.airbnb.com\" target=\"_blank\" rel=\"noopener\">Airbnb\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fwww.uber.com\" target=\"_blank\" rel=\"noopener\">Uber\u003C\u002Fa>, and \u003Ca href=\"https:\u002F\u002Fwww.spotify.com\" target=\"_blank\" rel=\"noopener\">Spotify\u003C\u002Fa> use modular patterns in mobile apps.\u003C\u002Fli>\u003Cli>Dependency graph tools help teams spot circular module links before they spread.\u003C\u002Fli>\u003Cli>A common core module often holds analytics, navigation, and shared UI primitives.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>BFFs cut request fan-out on mobile screens\u003C\u002Fh2>\u003Cp>Next comes Backend for Frontend, or BFF, which is one of the most useful ideas in the whole piece. A mobile screen often needs data from several backend services at once. If the app calls each service directly, it pays for multiple network trips, more battery use, and more latency.\u003C\u002Fp>\u003Cp>A BFF sits between the app and the rest of the backend. The mobile app makes one request, and the BFF gathers and shapes the data into a response that fits the screen. That keeps the client simpler and lets the server do the heavy lifting.\u003C\u002Fp>\u003Cblockquote>\u003Cp>“The BFF pattern is a backend specifically tailored to the needs of a frontend.”\u003C\u002Fp>\u003Cfooter>Sam Newman, \u003Ccite>Building Microservices\u003C\u002Fcite>\u003C\u002Ffooter>\u003C\u002Fblockquote>\u003Cp>The newsletter uses \u003Ca href=\"https:\u002F\u002Fwww.netflix.com\" target=\"_blank\" rel=\"noopener\">Netflix\u003C\u002Fa> as the example, and that makes sense. Netflix keeps separate backend layers for iOS, Android, TV, and web so each client gets data in the shape it needs. A phone does not need the same payload as a television.\u003C\u002Fp>\u003Cp>One important warning: a BFF should aggregate and transform data, not become a second business-logic layer. If it starts owning domain rules, teams end up with duplicated logic and a harder debugging story.\u003C\u002Fp>\u003Cul>\u003Cli>One screen can trigger 5 service calls without a BFF.\u003C\u002Fli>\u003Cli>A BFF reduces that to 1 client request.\u003C\u002Fli>\u003Cli>Mobile clients benefit because smaller payloads usually mean less waiting and less battery drain.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Versioning and flags keep releases from breaking users\u003C\u002Fh2>\u003Cp>App versioning and backward compatibility come next, and this is where mobile differs from the web in a very annoying way. Users do not update on your schedule. Some update on day one, others stay on older builds for weeks or months, so the backend has to keep serving multiple app versions at once.\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782267475497-dq9o.png\" alt=\"Mobile app production depends on 14 design choices\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>The article uses endpoint examples like \u003Ccode>\u002Fv1\u002Fusers\u003C\u002Fcode> and \u003Ccode>\u002Fv2\u002Fusers\u003C\u002Fcode> to show how APIs can return different shapes for different clients. That makes older apps keep working even after the server evolves.\u003C\u002Fp>\u003Cp>For \u003Ca href=\"\u002Ftag\u002Fapi\">API\u003C\u002Fa> teams, the \u003Ca href=\"https:\u002F\u002Fstripe.com\" target=\"_blank\" rel=\"noopener\">Stripe\u003C\u002Fa> model is a good reference point because versioning is part of the contract. The newsletter also mentions the Expand-Contract pattern: add new fields first, migrate clients, then remove old fields later. That avoids the classic breakage where an older app expects a field that disappeared.\u003C\u002Fp>\u003Cp>Feature flags and remote configuration solve a different problem: release timing. Instead of waiting for app store approval and user updates, teams can ship code with a feature disabled and turn it on remotely later. That gives product and engineering teams a fast kill switch if something misbehaves in production.\u003C\u002Fp>\u003Cp>The article notes that app store approval can take up to 3 days. It also points out that remote config can change UI text, layout choices, feature limits, and experiment settings without a new binary.\u003C\u002Fp>\u003Cul>\u003Cli>API examples in the article use \u003Ccode>\u002Fv1\u002Fusers\u003C\u002Fcode> and \u003Ccode>\u002Fv2\u002Fusers\u003C\u002Fcode>.\u003C\u002Fli>\u003Cli>App store review can take up to 3 days.\u003C\u002Fli>\u003Cli>Feature flags can target specific users, not just the entire install base.\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Ffirebase.google.com\u002Fproducts\u002Fremote-config\" target=\"_blank\" rel=\"noopener\">Firebase Remote Config\u003C\u002Fa> is a common tool for this pattern.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Staged rollouts and observability decide whether a release survives\u003C\u002Fh2>\u003Cp>The last part of the article shifts from architecture to operations. That is where mobile teams learn whether their design choices actually held up after release. Staged rollouts let a team ship to a small slice of users first, then widen exposure if crash rates and performance stay healthy.\u003C\u002Fp>\u003Cp>This is where crash reporting, performance monitoring, and crash-free rate matter. A crash-free rate is an SLI for mobile health, and it gives teams a concrete signal instead of a gut feeling. If the rate drops after a release, the team can halt rollout before the problem reaches everyone.\u003C\u002Fp>\u003Cp>That operational discipline matters because mobile bugs are expensive to fix once they are in the wild. Users may be on old versions, on poor networks, or on devices with limited memory. Graceful degradation helps the app stay usable when one piece fails, while accessibility, localisation, permissions, and geo usage make sure the product behaves well for different users and regions.\u003C\u002Fp>\u003Cp>The newsletter’s structure is a reminder that mobile system design is not a single diagram. It is a chain of decisions that starts in the codebase and ends in release controls, telemetry, and rollback plans.\u003C\u002Fp>\u003Cul>\u003Cli>Crash-free rate is treated as an SLI, so it can be tracked like latency or error rate.\u003C\u002Fli>\u003Cli>Staged rollouts reduce blast radius when a release has a hidden bug.\u003C\u002Fli>\u003Cli>Graceful degradation keeps the app usable when one service or feature fails.\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Ffirebase.google.com\u002Fproducts\u002Fcrashlytics\" target=\"_blank\" rel=\"noopener\">Firebase Crashlytics\u003C\u002Fa> is a common crash reporting tool.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Mobile system design is really release design\u003C\u002Fh2>\u003Cp>What makes this newsletter useful is that it connects architecture to operations without pretending they are separate worlds. Modular code speeds builds, BFFs reduce client work, versioning protects older users, and feature flags plus staged rollouts give teams room to fix mistakes before they spread.\u003C\u002Fp>\u003Cp>That is the real lesson in this part of the series: mobile system design is release design. If your app cannot absorb change safely, the code structure does not matter much. If you are building a mobile product now, the next question is not whether you need these patterns, but which one will save you first when your app hits real traffic.\u003C\u002Fp>\u003Cp>For related reading, see \u003Ca href=\"\u002Fnews\u002Fmobile-backend-design-patterns\" target=\"_blank\" rel=\"noopener\">mobile backend design patterns\u003C\u002Fa> and \u003Ca href=\"\u002Fnews\u002Ffeature-flags-production\" target=\"_blank\" rel=\"noopener\">feature flags in production\u003C\u002Fa>.\u003C\u002Fp>","A mobile app stays fast and safe in production by using modular code, BFFs, versioning, flags, and staged rollouts.","newsletter.systemdesign.one","https:\u002F\u002Fnewsletter.systemdesign.one\u002Fp\u002Fsystem-design-mobile",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782267479521-v1yh.png","industry","en","11bd0e30-051c-487f-9c83-3a37dba9326c",[17,18,19,20,21],"mobile system design","feature flags","backend for frontend","staged rollouts","modular architecture",[23,24,25],"Modular architecture keeps large mobile codebases easier to build and change.","BFFs reduce client-side request fan-out and let servers shape data for each device.","Versioning, feature flags, and staged rollouts protect users when releases go wrong.",0,"2026-06-24T02:17:35.117614+00:00","2026-06-24T02:17:35.109+00:00","a1c158f8-b98b-4d99-aa84-35523d1f1876",{"tags":31,"relatedLang":32,"relatedPosts":36},[],{"id":15,"slug":33,"title":34,"language":35},"mobile-app-production-14-design-choices-zh","手機 App 上線靠這 14 個設計","zh",[37,43,49,55,61,67],{"id":38,"slug":39,"title":40,"cover_image":41,"image_url":41,"created_at":42,"category":13},"ca97c9b6-c348-479c-9290-79f50db79647","project-solara-agent-first-devices-en","Project Solara aims at agent-first devices","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782280979335-4qr9.png","2026-06-24T06:02:32.645188+00:00",{"id":44,"slug":45,"title":46,"cover_image":47,"image_url":47,"created_at":48,"category":13},"e3c31d0f-718f-433d-9547-f3c10f0785a8","gemini-live-memory-galaxy-phones-tablets-en","Gemini Live adds Memory on Galaxy phones and tablets","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782279169317-g4do.png","2026-06-24T05:32:23.791983+00:00",{"id":50,"slug":51,"title":52,"cover_image":53,"image_url":53,"created_at":54,"category":13},"bfa5c112-2a8f-4952-88cb-d73021f2b9d2","un-open-source-week-2026-ai-priorities-en","UN Open Source Week 2026 spotlights 4 AI priorities","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782276472510-4iya.png","2026-06-24T04:47:23.371801+00:00",{"id":56,"slug":57,"title":58,"cover_image":59,"image_url":59,"created_at":60,"category":13},"8a5fdaf5-98a9-4aee-90d3-9a17d36e7262","prime-day-pc-hardware-discounts-matter-most-en","Prime Day proves PC hardware discounts still matter most when prices …","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782266605324-chat.png","2026-06-24T02:02:29.775705+00:00",{"id":62,"slug":63,"title":64,"cover_image":65,"image_url":65,"created_at":66,"category":13},"ff4b8962-7e63-4c84-ac43-80c6f073e055","anthropic-export-ban-ai-regulation-clear-rules-en","Anthropic’s export ban proves AI needs clear rules, not ad hoc crackd…","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782264764218-hejy.png","2026-06-24T01:32:21.560395+00:00",{"id":68,"slug":69,"title":70,"cover_image":71,"image_url":71,"created_at":72,"category":13},"082daac6-89f8-4e26-b7c2-26c1e20768e1","five-eyes-ai-cyber-risk-board-level-emergency-en","Five Eyes is right: AI cyber risk is a board-level emergency","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782262971575-8uss.png","2026-06-24T01:02:24.108058+00:00",[74,79,84,89,94,99,104,109,114,119],{"id":75,"slug":76,"title":77,"created_at":78},"d35a1bd9-e709-412e-a2df-392df1dc572a","ai-impact-2026-developments-market-en","AI's Impact in 2026: Key Developments and Market Shifts","2026-03-25T16:20:33.205823+00:00",{"id":80,"slug":81,"title":82,"created_at":83},"5ed27921-5fd6-492e-8c59-78393bf37710","trumps-ai-legislative-framework-en","Trump's AI Legislative Framework: What's Inside?","2026-03-25T16:22:20.005325+00:00",{"id":85,"slug":86,"title":87,"created_at":88},"e454a642-f03c-4794-b185-5f651aebbaca","nvidia-gtc-2026-key-highlights-innovations-en","NVIDIA GTC 2026: Key Highlights and Innovations","2026-03-25T16:22:47.882615+00:00",{"id":90,"slug":91,"title":92,"created_at":93},"0ebb5b16-774a-4922-945d-5f2ce1df5a6d","claude-usage-diversifies-learning-curves-en","Claude Usage Diversifies, Learning Curves Emerge","2026-03-25T16:25:50.770376+00:00",{"id":95,"slug":96,"title":97,"created_at":98},"69934e86-2fc5-4280-8223-7b917a48ace8","openclaw-ai-commoditization-concerns-en","OpenClaw's Rise Raises Concerns of AI Model Commoditization","2026-03-25T16:26:30.582047+00:00",{"id":100,"slug":101,"title":102,"created_at":103},"b4b2575b-2ac8-46b2-b90e-ab1d7c060797","google-gemini-ai-rollout-2026-en","Google's Gemini AI Rollout Extended to 2026","2026-03-25T16:28:14.808842+00:00",{"id":105,"slug":106,"title":107,"created_at":108},"6e18bc65-42ae-4ad0-b564-67d7f66b979e","meta-llama4-fabricated-results-scandal-en","Meta's Llama 4 Scandal: Fabricated AI Test Results Unveiled","2026-03-25T16:29:15.482836+00:00",{"id":110,"slug":111,"title":112,"created_at":113},"bf888e9d-08be-4f47-996c-7b24b5ab3500","accenture-mistral-ai-deployment-en","Accenture and Mistral AI Team Up for AI Deployment","2026-03-25T16:31:01.894655+00:00",{"id":115,"slug":116,"title":117,"created_at":118},"5382b536-fad2-49c6-ac85-9eb2bae49f35","mistral-ai-high-stakes-2026-en","Mistral AI: Facing High Stakes in 2026","2026-03-25T16:31:39.941974+00:00",{"id":120,"slug":121,"title":122,"created_at":123},"9da3d2d6-b669-4971-ba1d-17fdb3548ed5","cursors-meteoric-rise-pressures-en","Cursor's Meteoric Rise Faces Industry Pressures","2026-03-25T16:32:21.899217+00:00"]