Kotlin is the default language on Android for good reason: null safety, extension functions, and coroutines make networking and UI state easier to reason about than raw threads plus nested callbacks.
Patterns that survive releases
- Scope work with `viewModelScope` or explicit `SupervisorJob` boundaries so leaks fail loudly in tests.
- Expose UI state with `StateFlow`/`SharedFlow` rather than ad-hoc LiveData unless legacy constraints demand it.
- Prefer clear repository interfaces so a WebView-heavy module and a fully native module can share the same API client.
Between 2025 and 2026, Play policy and enterprise MDM checks increasingly expect deterministic background behavior—document when WorkManager replaces ad-hoc foreground services.
