Что мы на нём делаем
Kotlin Multiplatform делает ставку, противоположную Flutter. Вместо того чтобы разделять всё приложение вместе с интерфейсом, вы разделяете только то, что незачем писать дважды, — сеть, модели, валидацию, хранение, бизнес-правила, — а интерфейс каждая платформа строит сама, на SwiftUI или Jetpack Compose.
Общий код — это Kotlin, компилируемый в нативный фреймворк на iOS и в обычный Kotlin на Android. Со стороны iOS это просто библиотека.
Где он нужен
Продукты с уже существующими нативными приложениями и нативными командами. Это и есть случай, в котором KMP по-настоящему хорош: можно перенести один модуль — клиент API, офлайн-кэш — в общий код, не переписывая ни одно из приложений и не заставляя никого отказываться от своей платформы.
Подходит он и там, где интерфейс обязан быть настолько нативным, что кроссплатформенный рендерер становится обузой, а доменная логика под ним при этом одинаковая.
Когда мы его рекомендуем
Когда у вас уже есть две нативные кодовые базы и вы хотите перестать поддерживать одну и ту же логику дважды, или когда интерфейс всё равно придётся делать нативно на обеих платформах.
Не для продукта, который начинается с нуля силами одной команды. Там KMP означает написать интерфейс дважды — то есть дорогую половину, — и вы взяли на себя кроссплатформенный тулчейн без экономии, которая его оправдывает. Обычно Flutter выгоднее, и мы так и скажем.
Стоит быть честными и про сторону iOS: отлаживать общий Kotlin из Xcode можно, но приятного мало, а инструментарий заметно моложе, чем у Flutter.
