Progress Β· 0/5 phases
π¦ π¦ 90-Day Android/Kotlin/KMP Roadmap
3 min read Β· Notion
π¦ Frontend β Android/KMP Engineer transition. 90 days. 5 phases. From Kotlin basics to production-grade Kotlin Multiplatform apps.
π How to use this template
- Work phases in strict order β every phase is a prerequisite for the next
- Daily ritual: study the concept β write code β break it intentionally β fix it β log one insight
- Use the Daily Tracker to stay accountable
- Open each Phase page for full breakdowns, projects, real-world references, and mistake corrections
π‘ The #1 rule of Android/KMP engineering: The platform is the constraint. Understanding the Android lifecycle, the JVM memory model, and the Kotlin compiler internals is what separates engineers who fight the framework from engineers who use it correctly.
πΊοΈ Roadmap at a glance
| Phase | Days | Focus | Key Output |
|---|---|---|---|
| Phase 1 β Kotlin Foundations | Days 1β15 | Language internals, coroutines, type system | Idiomatic Kotlin fluency |
| Phase 2 β Android Core | Days 16β35 | Lifecycle, Jetpack, Compose, Navigation | Production Android app skeleton |
| Phase 3 β Architecture & Patterns | Days 36β55 | MVI, Clean Architecture, DI, testing | Scalable, testable app architecture |
| Phase 4 β Kotlin Multiplatform | Days 56β75 | KMP setup, shared logic, platform APIs, CMP | Shared business logic across Android + iOS |
| Phase 5 β Expert Android/KMP | Days 76β90 | Performance, CI/CD, advanced Compose, production | Staff-level mobile engineering |
β‘ The Android/KMP Engineering Decision Framework
Ask these questions in order for every feature you build:
- Where does this logic live? β shared module (pure Kotlin, no platform) or platform module?
- Who owns the state? β ViewModel, Repository, or UI local state?
- How does it survive configuration change? β ViewModel survives rotation. Composable state does not.
- How does it survive process death? β
SavedStateHandleor persistence layer. - How is it tested? β unit test (pure Kotlin), integration test (Android), or UI test (Compose)?
- What is the threading model? β which coroutine dispatcher? Is it safe to call from the main thread?
π My progress
- Current phase: Phase 1
- Current day: Day 1 of 90
- Apps shipped: 0
- KMP modules built: 0
π Quick links
- βοΈ Phase 1 β Kotlin Foundations
- π± Phase 2 β Android Core
- ποΈ Phase 3 β Architecture & Patterns
- π Phase 4 β Kotlin Multiplatform (KMP)
- π§ Phase 5 β Expert Android/KMP
π» Tech stack this roadmap builds on
| Layer | Technology |
|---|---|
| Language | Kotlin 2.x |
| UI (Android) | Jetpack Compose |
| UI (iOS via KMP) | Compose Multiplatform |
| Architecture | MVI + Clean Architecture |
| DI | Koin or Hilt |
| Async | Kotlin Coroutines + Flow |
| Networking | Ktor Client (KMP) |
| Local DB | SQLDelight (KMP) or Room (Android) |
| Build | Gradle Kotlin DSL + Convention Plugins |
| CI/CD | GitHub Actions + Fastlane |
| Testing | JUnit5, Turbine, Paparazzi, XCTest |
π Android/KMP Daily Tracker