We shipped an iOS and Android app backed by the same API. It went fine, but a few decisions mattered a lot.
What worked:
- One versioned API, and clients that tolerate unknown fields
- Server-driven feature flags instead of hardcoded release rules
- A shared contract file (OpenAPI) that both apps generate models from
What I'd change:
- We added a "v2" endpoint for one screen and it became three. Versioning per-field would have been better.
I'm learning Rust for a small CLI that helps with release notes. Coming from Swift and Kotlin, the compiler feels strict in a good way.
