The Challenge
A major Swiss bank needed to maintain a pension 3a mobile app serving roughly 150,000 active users on both iOS and Android. The constraint: an engineering team of just two developers, responsible for shipping reliable updates across both platforms.
Matthias Ernst and Marc Rymann from Ernst & Conte led the engagement. The goal: ship reliable updates on both platforms with two people, at the quality a regulated financial product demands.
Why Kotlin Multiplatform
Managing two separate codebases with a two-person team created predictable problems: duplicated logic, inconsistent behaviour between platforms, and a testing effort that scaled poorly.
We started by sharing business logic through Kotlin Multiplatform (KMP) while keeping platform-specific UIs. Once that proved stable, we extended the approach to the presentation layer with Compose Multiplatform, consolidating the app into a single codebase that targets both iOS and Android.
An Incremental Migration
We did not rewrite the app overnight. The migration followed a deliberate, screen-by-screen approach:
- Build a single proof-of-concept screen in Compose Multiplatform.
- Validate it in production alongside existing native screens.
- Migrate the next screen. Repeat.
Each iteration simplified the codebase and reduced the surface area for platform-specific bugs.
What changed
- Every feature is built once. A change ships to iOS and Android in the same release, instead of being implemented twice and scheduled twice.
- The platforms stopped drifting apart. With one implementation there is no second one to fall out of step, which is where most of the platform-specific bugs came from.
- Two people review one codebase. Nobody is “the iOS developer” any more: reviews, architecture decisions and knowledge cover the whole app.
What We Learned
Two takeaways that apply to any KMP migration:
- Start small and validate early. Pick a low-risk screen, prove it works in production, then expand scope. Trying to migrate everything at once introduces unnecessary risk.
- Refactor continuously. Each migrated screen is an opportunity to clean up technical debt. Take it; the long-term maintainability gains compound.
What Comes Next
The migration is ongoing. The target is full code sharing, with the remaining native components replaced as Compose Multiplatform matures, and the same codebase later serving the web application.
If your team faces the same constraint, talk to us.