Mobile

Server-Driven UI for a National Airline's Mobile App

Co-architected a server-driven UI platform for a national airline's mobile app (2.3M MAU), moving screen composition from app-store releases to backend definitions. The Android modernization underneath cut feature delivery from about a month to about a week.

Co-architected the server-driven UI platform for a national airline's 2.3M-MAU mobile app, so screen composition moved from app-store releases to backend-driven definitions and new screens ship without an app-store cycle. The Android modernization underneath, a Dagger to Hilt migration across 20+ modules with Jetpack Compose, cut feature delivery from about a month to about a week.

Context and stakes

I was the Android technical lead on a national airline's mobile platform, with influence across iOS and backend. The app served 2.3M monthly active users, and the foundational engineering sat behind a large app-driven revenue line, so reliability and delivery speed were business-critical, not cosmetic.

The codebase was seven years old. Every meaningful UI change rode an app-store release, which meant the product could not adjust screens, run experiments, or personalize without a multi-week cycle, and the aging dependency setup was slowing every team down.

Problem

Two constraints compounded. First, UI was release-gated: shipping or changing a screen required an app-store submission, so iteration was slow and personalization was effectively impossible. Second, the modernization debt, an old dependency-injection setup and pre-Compose UI, made the codebase slow to change and slow to onboard into, right as feature demand was rising.

Intervention

  • Co-architected the server-driven UI platform. Screen composition moved to backend-driven definitions rendered by a native component library: trip cards, notification states, rows, sections, and badges, with server-driven actions sent over POST. New and changed screens now ship from the backend without an app release.
  • Made server-driven UI accessible. Built a utility that resolves content descriptions for every server-driven widget, so screens assembled at runtime stay usable with screen readers, backed by a 100+ component accessible (WCAG) library.
  • Led the Android modernization. A staged Dagger to Hilt migration across 20+ modules with zero downtime, using a gradual strategy so existing features kept working, paired with large-scale Jetpack Compose adoption and snapshot testing.
  • Re-engineered delivery. CI/CD on GitHub Actions with faster builds, more frequent deploys, and release hardening, plus core development of a government-partnered digital declaration form, with a check-in redesign and trip management, all held to high uptime through peak travel.
  • Held the technical line. Codebase admin and lead reviewer across squads, and de-escalation of a multi-sprint iOS delivery crisis through an executive root-cause analysis.

Recognition. A product leader on the airline's mobile team publicly credited the delivery team for the rebuild:

"Behind the scenes, we overhauled the technical backend, making the app more reliable and laying the foundation for rapid enhancements. A massive thank you to our dedicated team that made this transformation possible."

See the public post

Lasting impact. Server-driven UI moves screen composition to the backend, so the app ships new screens and features without an app-store cycle. That foundation is what makes a fast enhancement cycle possible, and the team has since moved past building foundations into shipping continuous improvements on the live app. See a recent example of that ongoing iteration