Build and maintain a shared KMP core for an AI inference platform, including business logic and state machines. Design the public API and migrate existing Android and iOS native code to the shared module.
Yo is building an AI inference platform that runs directly on smartphones - turning the phone in your pocket into part of a global AI network. The mobile SDK that ships this to Android and iOS devices is moving to a shared core built in Kotlin Multiplatform, replacing what was previously two separate native codebases.
This is a foundational hire on a KMP effort that is just getting started. You will help build the shared core from the ground up and shape its public API alongside the existing Android and iOS engineers.
Key Responsibilities
Build and maintain the KMP shared core: business logic, state machines, and data models used by both the Android and iOS clients
Design the shared module's public API - decide what it exposes to platform-specific code and what stays internal
Keep the shared module platform-clean: no Android-only imports, plain data classes and suspend functions at the platform boundary
Wire up dependency injection using Metro (a newer DI tool similar to Dagger/Anvil)
Package the iOS side as an XCFramework and handle Kotlin/Native interop correctly for Swift consumers
Build and maintain a Jetpack Compose benchmark app on Android used to validate the shared core
Work with the Android and iOS engineers to migrate their existing native code onto the shared core
Required Qualifications
Production experience with Kotlin Multiplatform: shared module design, expect/actual, judgment on where platform boundaries belong
Experience building and shipping an SDK or library consumed by other developers - deciding what belongs in a public API and what stays closed
Dependency injection experience (Dagger, Anvil, Hilt, Koin, or similar); able to pick up Metro quickly
Working knowledge of Swift and iOS development, including how Kotlin/Native interop and Objective-C/Swift bridging work
“I was the first applicant for a remote marketing position that got listed on the company website the same day I applied. Had an interview within 48 hours!”