Migrating an existing Android app to KMP isn’t a weekend job. It’s an iterative process worth planning well.
Where to start
The first thing I shared was the networking layer. Ktor in commonMain replaced Retrofit on Android, and on iOS it saved me from writing all the networking by hand with URLSession.
What not to share
The UI. Each platform has its own design language, its own conventions. Forcing a shared UI between Compose and SwiftUI would have been worse than keeping them separate.
The result
After three iterations, I have a KMP project where 60% of the code is in commonMain. Business logic, data models, and API access are written once. Native UIs benefit from that shared base without compromising anything.