What Kotlin Multiplatform Actually Saves You
Kotlin Multiplatform gets pitched as “write your business logic once, ship it everywhere.” That’s true, but the interesting part is which logic actually survives the trip unmodified.
What moved cleanly
Networking clients, serialization, local caching logic, and most of our domain layer moved into commonMain with almost no friction. Coroutines and Ktor gave us near-identical ergonomics on both platforms, and the type safety caught a class of bugs that used to slip through when the same logic was duplicated by hand in Swift.
What didn’t
Anything touching platform UI conventions — navigation, permissions prompts, background execution limits — still needed platform-specific expect/actual implementations. We didn’t try to force these into shared code, and that turned out to be the right call: fighting platform idioms costs more than it saves.
The real win
The biggest payoff wasn’t lines of code saved. It was that a single team could reason about business logic bugs without needing both an Android and iOS engineer in the room. That alone justified the migration cost for us.