5.7 Mobile application development¶
Overview and motivation¶
Mobile application development is the discipline of building software for phones and tablets. For many people, a phone is now the primary or only computer they own. That makes the mobile app the front door to your service, and often the surface where users judge your whole organization.
Mobile is a distinct engineering environment, not a small version of the web or desktop. The device runs in a pocket, on battery, over connections that come and go. Screens are small. The operating system controls what your app may do. Two dominant platforms exist (iOS from Apple and Android from Google), each with its own languages, design rules, and store. You cannot simply ship an update whenever you like, because a store reviews it first, and users choose when to install it. This chapter builds on frontend engineering (chapter 5.6), UX foundations (chapter 5.1), and accessibility (chapter 5.3), and it leans on application security (chapter 4.2) and CI/CD and delivery (chapter 8.1).
Enterprise and government relevance is high. Enterprises ship customer apps and internal apps for their own workforce, often managed through mobile device management (MDM: central software that configures and secures company devices). Governments build citizen-facing apps for benefits, health, identity, and payments, and they must serve everyone, including people on old devices and slow connections, under accessibility laws. In both settings, mobile is a serious, long-lived commitment, so treat it with the same rigor you give any other production system.
Key principles¶
- Design for the device: small screen, battery, and a network that comes and goes.
- Assume intermittent connectivity; work offline first and sync when you can.
- Respect each platform's design and interaction conventions.
- You do not control release timing; the store and the user do.
- Fragmentation is normal; support a real range of devices and OS versions.
- Store data securely on the device, because devices get lost and stolen.
- Accessibility is a requirement, not a finishing touch.
- Choose your build approach for the whole life of the app, not just launch day.
Recommendations¶
Choose the build approach deliberately¶
There are three broad approaches, and each fits different needs.
Native development means writing separately for each platform using its own tools: Swift for iOS, Kotlin for Android. You get the best performance, the fullest access to device features, and the most faithful platform feel, at the cost of building and maintaining two codebases.
Cross-platform frameworks let one codebase target both platforms. React Native uses JavaScript and renders real native components. Flutter uses the Dart language and draws its own widgets. These reduce duplicated effort and can speed delivery, but they add a dependency on the framework's health and can lag behind the newest platform features.
A progressive web app (PWA: a website that can be installed and can work offline) needs no store and updates instantly, but it has limited access to some device features and a weaker presence on the home screen.
Choose based on the required device features, the performance profile, the maintenance horizon, the skills you can hire, and the reach you need. A high-performance consumer app may justify native. A content-and-forms app with a small team may fit cross-platform or a PWA well.
Follow the platform design guidelines¶
Each platform has published, detailed conventions. Apple provides the Human Interface Guidelines, and Google provides Material Design. These cover navigation, gestures, typography, spacing, and system behaviors. Following them makes your app feel familiar, which lowers the effort users spend learning it. Fighting them makes an app feel foreign and awkward. A cross-platform codebase still needs to honor per-platform conventions where they differ, rather than forcing one platform's look onto the other.
Design for mobile constraints¶
Build offline-first: let core tasks work without a connection, store changes locally, and sync when the network returns. Handle conflicts thoughtfully when the same data changes in two places. Be frugal with battery and data: batch network calls, avoid constant location or background work, compress payloads, and respect the user's data-saver settings. Plan for fragmentation, the wide spread of screen sizes, device power, and OS versions. Pick a support range based on real usage data, and test on modest hardware, not just flagships. Design for small screens with clear hierarchy, large touch targets, and content that adapts to different sizes and orientations.
Plan distribution, versioning, and updates¶
Publishing goes through the Apple App Store and Google Play, each with review processes and policies that can delay or reject a release. Build review time into your schedule, and read the policies early. Because users choose when to update, you will always have many versions in the field at once. Keep your app backward compatible with older clients, and version your APIs (chapter 2.3) so an old app keeps working. Provide a way to require an update when you must, for example a forced-update prompt when a version is unsafe or unsupported, and use it sparingly. Enterprises can also distribute internal apps through MDM or private channels rather than the public stores.
Use push notifications and deep links with care¶
Push notifications let you reach users when your app is closed. Use them for genuine value, respect the user's consent and platform permissions, and avoid noise, because people disable notifications from apps that overreach. Deep links send a user straight to a specific screen from a link or a notification. Configure them so a link opens the right place in the app, and falls back to the web gracefully when the app is not installed.
Secure the app and its data¶
Treat the device as untrusted and possibly lost. Store sensitive data in the platform's secure storage (the iOS Keychain or the Android Keystore), never in plain files. Offer biometric authentication (fingerprint or face) to unlock sensitive actions, backed by a passcode. Consider certificate pinning (checking that the server presents an expected certificate) for high-value connections, and plan for rotating those certificates. Minimize what you store on the device, protect secrets, and follow the broader guidance in application security (chapter 4.2).
Build a real testing and delivery pipeline¶
Test on real devices, not just emulators and simulators, because hardware, sensors, and performance differ. Use a device lab or a cloud device farm to cover a representative spread of models and OS versions. Automate builds, tests, signing, and store submission through continuous integration and delivery (chapter 8.1), including beta distribution to testers before public release. Managing signing keys and store credentials safely is part of this pipeline.
Make accessibility a requirement¶
Support each platform's accessibility features: screen readers (VoiceOver on iOS, TalkBack on Android), dynamic text sizing, sufficient color contrast, and large touch targets. Label controls so assistive technology can describe them. Test with the actual assistive tools, not just automated checks. For government especially, accessibility is a legal mandate, and the details live in accessibility (chapter 5.3).
Trade-offs: pros and cons¶
| Approach | Pros | Cons |
|---|---|---|
| Native (Swift, Kotlin) | Best performance, full device access, true platform feel | Two codebases, higher cost, more staff |
| React Native | One JavaScript codebase, real native components, fast iteration | Framework dependency, bridging complexity, feature lag |
| Flutter | One codebase, consistent UI, strong performance | Dart skills less common, larger app size, own widget model |
| Progressive web app | No store, instant updates, one web codebase | Limited device features, weaker presence, platform limits |
| Forced updates | Removes unsafe old versions quickly | Annoys users if overused; can block access |
| Certificate pinning | Strong protection against interception | Breaks if certificates rotate without app updates |
The recurring trade-off is reach and speed of delivery versus depth and fidelity. Native gives the richest, most faithful experience but costs the most to build and maintain. Cross-platform and PWA approaches save effort and broaden reach, at some cost in platform feel or device access. For a small team shipping forms and content, sharing a codebase is often wise. For a demanding consumer app, native depth can be worth the price. Decide with the full life of the app in view, not just the launch.
Examples¶
Startup. A three-person startup building a habit-tracking app had to reach both iOS and Android but could not afford two native codebases or two sets of skills. They chose a cross-platform framework so one small team could ship to both stores, and designed offline-first from the start so a user could log a habit on the subway with no signal and sync later. They kept the login token in the platform secure storage rather than a plain file, built store review time into every release plan, and tested on a couple of cheap older phones alongside their own, which caught sluggish performance they would otherwise have shipped.
Enterprise. A logistics company built an internal app for its drivers and warehouse staff. Because warehouses and delivery routes have patchy signal, the team chose an offline-first design: scans and status updates save locally and sync when a connection returns. They used a cross-platform framework to serve one codebase to both platforms with a small team. The app is distributed through mobile device management rather than the public stores, so IT controls installation, configuration, and security policy on company devices. Sensitive credentials live in the platform secure storage, and biometrics unlock the app. A cloud device farm tests a representative spread of the rugged handsets staff actually carry.
Government. A national agency shipped a citizen-facing app for identity and benefits. Accessibility was a hard requirement from day one: full screen reader support, dynamic text sizing, and strong contrast, tested with real assistive tools to meet the law. Because citizens use a huge range of devices, the team supported a wide band of older models and slow connections, and kept core tasks working offline. Sensitive data stays in secure device storage, biometrics protect access, and high-value connections use certificate pinning with a planned rotation process. API versioning keeps older installed apps working, and a rarely used forced-update path exists for security fixes. Store review timelines are built into every release plan.
Business case: motivations, ROI, and TCO¶
Mobile is where many users meet your service, so the app affects adoption, satisfaction, and completion of the tasks that matter to your organization. A fast, reliable, well-designed app increases usage and reduces support load. For enterprises, an internal mobile app can make a mobile workforce measurably more productive and cut paperwork. For governments, a usable citizen app widens access and reduces call-center and in-person demand.
On total cost of ownership (TCO), the choice of approach is the biggest lever. Native means paying for two codebases and two skill sets over the app's whole life. Cross-platform trades some of that for a dependency you must keep current. Beyond code, budget for store fees and review cycles, a device testing lab or cloud farm, ongoing OS-version support as platforms release yearly, and the security work that mobile demands. The cost of underinvesting shows up as crashes on unsupported devices, security incidents from unprotected on-device data, rejected or delayed releases, and users who abandon a slow or awkward app.
To make the case to leadership, connect the app to concrete outcomes: task completion, retention, workforce productivity, or reduced support cost. Price the full approach decision across the app's life, not just the first release, and name the risks (security, accessibility law, store rejection) that a serious mobile practice reduces.
Anti-patterns and pitfalls¶
- Treating mobile as a shrunken website: ignoring touch, gestures, and platform conventions.
- Assuming a perfect network: no offline handling, so the app breaks the moment signal drops.
- Testing only on the latest flagship: hiding poor performance on the devices real users carry.
- Storing secrets in plain files: sensitive data exposed when a device is lost or stolen.
- Notification overload: too many pushes, so users mute or delete the app.
- Ignoring store review time: release plans that assume instant publishing and then slip.
- No forced-update path: unsafe old versions live on with no way to retire them.
- Draining battery and data: constant background work and chatty networking that users notice.
- Accessibility as an afterthought: excluding users and, for government, breaking the law.
- One codebase forced to look identical everywhere: an app that feels foreign on both platforms.
Maturity model¶
Level 1: Initial. Mobile is ad hoc. The app is built like a website, tested on the team's own phones, and often breaks offline. Little thought to security, accessibility, or store timelines. Releases are stressful and manual.
Level 2: Repeatable. A clear build approach is chosen. The app follows platform basics and is tested on a few real devices. Some offline handling exists. Secure storage is used for the most sensitive data. Builds are partly automated, and someone owns store submissions.
Level 3: Defined. Offline-first is standard. A documented device support range is tested on a device lab or cloud farm. Platform design guidelines and accessibility are followed and verified with assistive tools. Secure storage, biometrics, and API versioning are in place. CI/CD automates builds, tests, signing, and beta distribution. Store review time is planned into releases.
Level 4: Optimizing. Mobile quality is measured continuously from real devices: crashes, performance, battery, and task completion. Accessibility and security are audited, not assumed. Certificate rotation, forced-update paths, and rollback are practiced. The support range and build approach are revisited on evidence as the device landscape shifts, and the whole range of users and devices is first-class.
Ideas for discussion¶
- How do you decide between native, cross-platform, and a progressive web app for a given product?
- What device and OS-version support range fits your real user data, and how do you keep it current?
- Where is offline-first essential in your app, and how will you handle sync conflicts?
- When is a forced update justified, and how do you avoid blocking users unfairly?
- How will you test on real devices at a scale that reflects your users?
- What sensitive data lives on the device, and how is each piece protected?
- How do you honor each platform's conventions from a shared codebase?
Key takeaways¶
- Choose the build approach (native, cross-platform, or PWA) for the whole life of the app.
- Follow the platform design guidelines so the app feels familiar and lowers user effort.
- Design for mobile constraints: offline-first, frugal battery and data, fragmentation, small screens.
- You do not control release timing; plan for store review, versioning, and forced updates.
- Use push notifications and deep links with restraint and consent.
- Secure on-device data with secure storage, biometrics, and, where warranted, certificate pinning.
- Test on real devices and automate the mobile pipeline through CI/CD.
- Make accessibility a requirement, which for government is a legal mandate.
References and further reading¶
- Apple, Human Interface Guidelines
- Google, Material Design guidelines
- Apple, App Store Review Guidelines
- Google, Google Play developer policies and Android developer documentation
- OWASP, Mobile Application Security Verification Standard (MASVS) and Mobile Security Testing Guide
- React Native project documentation
- Flutter project documentation
- Google, web.dev guidance on progressive web apps
- U.S. Section 508 and WCAG (Web Content Accessibility Guidelines) references for mobile accessibility
- NIST, Guidelines on mobile device security and management