On this page (1)
We have shipped four Kotlin Multiplatform products. Two were clearly the right call, one was marginal, and one we would build as two native apps if we could go back.
The rule we use now
Share the domain, never the interface. Business rules, validation, data modelling, sync and offline logic go in common code. Anything a user touches stays native. The moment a team starts sharing UI to save time, they begin paying for it in every platform-specific compromise that follows.
- Will the client maintain this in-house? If yes, with one Android engineer, two codebases is the wrong answer regardless of elegance.
- Is the domain logic genuinely substantial? Sharing a thin layer costs more in build tooling than it saves.
- Does either platform need deep OS integration? That work lands natively anyway and erodes the shared share.
On the health product we shared 92% and it was correct. On a media app with heavy platform-specific playback we shared 40% and paid for the toolchain twice over.
Written by Mobile team. Filed under Mobile.
Further reading
All articles- Offline-first is a data model, not a cache
Mobile · 11 min read
- We quantised a model to 31ms and lost almost nothing
AI · 9 min read
- What a paid trial task is actually testing
Team · 6 min read
Working on a problem like this one? Request a proposal.