Mobile app development · 5 stages · about 44 weeks
Android developer (Kotlin) roadmap
0/25 tasks done (ticks are kept on this device)
- 1
Beginner · about 6 weeks
Kotlin and programming basics
What to learn
Variables and types: Every program stores and works with values.
In Kotlin you use val for a value that never changes and var for one that can change. Each value has a type, like Int for whole numbers, Double for decimals, String for text and Boolean for true or false. Prefer val unless you really need to change the value.
Conditions and loops: Programs need to make choices and repeat work.
if/else and when choose what to do based on a condition. for and while loops repeat code, for example to add up a list of prices. Kotlin's when is like a cleaner switch, and you will use it a lot in Android code.
Functions: Functions keep code small, named and reusable.
A function takes inputs (parameters), does one job and can return a result. Kotlin also has lambdas, which are small functions you can pass around, for example to say what happens when a button is clicked. Name functions by what they do, like calculateTotal.
Null safety: Null crashes are one of the most common app bugs.
Null means "no value". Kotlin marks types that may be null with a question mark, like String?, and forces you to handle that case. Learn the safe call (?.), the Elvis operator (?:) and why you should almost never use !!.
Classes and data classes: Apps model real things like users, products and orders.
A class groups data and behaviour together. A data class is a short way to hold data, like data class Product(val name: String, val price: Int). Learn constructors, properties, interfaces and inheritance at a basic level.
Collections: Most screens show lists of things.
Learn List, Set and Map, and the difference between read-only and mutable versions. Practise filter, map, sortedBy and sumOf on lists. These make code short and clear, for example finding all products under ₹500.
Git and GitHub: Git saves your work and GitHub shows it to employers.
Git records changes as commits so you can go back when something breaks. GitHub stores your projects online. Android Studio has Git built in, but also learn the basic commands.
Tasks
Project
A command-line expense tracker in Kotlin: add expenses with a category and amount in rupees, list them, and show the total per category.
Free resources
- 2
Beginner · about 8 weeks
Android Studio and Jetpack Compose basics
What to learn
Android Studio: It is the official place to write, run and debug Android apps.
Learn to create a project, run it on the emulator and on your own phone with USB debugging, and read Logcat for errors. Learn the project files: the app module, the manifest and the Gradle build files. Most early problems are solved by reading the error in Logcat carefully.
Jetpack Compose basics: Compose is the modern, recommended way to build Android screens.
In Compose you build the screen with Kotlin functions marked @Composable, like Text, Button and Image. You describe what the screen should look like for the current data, and Compose redraws it when the data changes. Older apps use XML layouts, so learn to read them a little too.
Layouts and modifiers: Every screen is built from rows, columns and spacing.
Column stacks items top to bottom, Row places them side by side and Box layers them on top of each other. Modifiers add padding, size, background and click handling. Test your screens on small and large phones.
State in Compose: State is how the screen remembers what the user did.
remember and mutableStateOf keep a value, like the text in a box or a counter. When the state changes, Compose redraws only what is needed. Learn state hoisting, which means keeping state in a parent and passing it down, so components stay simple.
Lists: Most apps show long scrolling lists.
LazyColumn shows only the items on screen, so even 10,000 rows scroll smoothly. Give each item a stable key. Build list items as small composables, like a ProductRow.
Material Design 3 and theming: Users expect apps to look and behave like Android apps.
Material 3 gives you ready components like buttons, cards, top bars and dialogs, plus rules for colour and type. Set your theme once and use its colours everywhere. Support dark theme from the start.
Activity lifecycle and resources: Android can pause or close your app at any time.
An Activity moves through states like created, started, resumed and stopped. Rotating the phone can recreate it, so data kept only in the screen may be lost. Keep text in strings.xml so you can translate the app into Hindi or other languages later.
Tasks
Project
A business-card app for a local shop: name, photo, address, a Call button and a WhatsApp button that open the right apps, with light and dark theme.
Free resources
- 3
Intermediate · about 10 weeks
App architecture: ViewModel, navigation, Room, Retrofit and coroutines
What to learn
ViewModel and UI state: A ViewModel keeps screen data safe when the phone rotates.
The ViewModel holds the data and logic for a screen and survives configuration changes like rotation. It exposes one UI state object that the screen draws. This keeps your composables simple and easy to test.
Navigation: Real apps have many screens.
Navigation Compose moves between screens using routes, like home or product/42. Learn to pass ids between screens and handle the back button. Keep one clear navigation graph so the app flow is easy to follow.
Coroutines: Slow work must not freeze the screen.
A coroutine is a light way to run work in the background, like a network call, without blocking the main thread. suspend functions can pause and continue later. In a ViewModel, use viewModelScope so the work stops when the screen closes.
Flow and StateFlow: Flow sends a stream of updates to the screen.
A Flow gives you values over time, like new rows from the database. StateFlow always holds the latest value and is the usual way a ViewModel shares UI state. In Compose, collect it safely with collectAsStateWithLifecycle.
Room database: Apps must work offline and remember data.
Room is the official library for saving data in a local SQLite database. You define entities (tables), DAOs (functions that run queries) and the database class. Room can return a Flow, so the screen updates by itself when data changes.
Retrofit and REST APIs: Most apps load data from a server.
Retrofit turns a Kotlin interface into real network calls to a REST API. A converter such as Kotlinx Serialization or Moshi turns JSON into Kotlin data classes. Always handle no internet, slow networks and server errors with clear messages.
Repository pattern and dependency injection: Clean structure makes apps easy to change and test.
A repository is one class that decides whether data comes from Room or from the network. Dependency injection with Hilt creates and passes these classes to where they are needed. Follow the official guide to app architecture: UI layer, data layer and, if needed, a domain layer.
DataStore: Small settings need a simple, safe home.
DataStore saves small values like the chosen language, dark mode or whether onboarding is done. It replaces the older SharedPreferences. Use Room for real lists of data and DataStore for settings.
Tasks
Project
An offline-first expense tracker: add expenses in rupees with category and date, see monthly totals, search, and back up a summary as a shareable text; built with Compose, ViewModel, Room, Navigation and Hilt.
Free resources
- 4
Intermediate · about 8 weeks
Firebase, testing and publishing on the Play Store
What to learn
Firebase Authentication: Login with phone OTP or Google is common in Indian apps.
Firebase Authentication handles sign-in with email, phone number (OTP) or Google, without you building a login server. You get a user id that you can use to keep each user's data separate. Learn to handle logout and expired sessions.
Cloud Firestore: Firestore gives you an online database without writing a backend.
Firestore stores data as documents in collections and can send live updates to the app. Security rules decide who can read or write each document, and they are your main protection. Never leave the database open to everyone, even for testing.
Push notifications and Crashlytics: Notifications bring users back, and crash reports show what to fix.
Firebase Cloud Messaging (FCM) sends notifications to phones. On new Android versions you must ask the user for permission first. Crashlytics reports crashes from real users with the line of code, so you fix the biggest problems first.
Unit tests: Tests catch bugs before your users do.
Unit tests check small pieces of logic, like a ViewModel or a price calculator, with JUnit. Use fake repositories instead of real servers so tests are fast. Test the edge cases: empty lists, zero amounts and errors.
UI tests in Compose: UI tests check what the user actually sees.
Compose testing lets you find elements by text or tag, click them and check the result. Add a few tests for your most important flows, like adding an item. Keep UI tests few and focused because they are slower.
Permissions and privacy: Users and Google Play both care about data.
Ask for permissions like camera or location only when needed, and explain why. Fill the Data safety section in Play Console honestly. Collect as little personal data as possible.
Publishing on Google Play: Publishing is how real people get your app.
You build a signed Android App Bundle (AAB) and upload it in Google Play Console, which needs a one-time developer registration fee. You add screenshots, a description, a privacy policy and content rating. Use internal or closed testing first, and check the current rules for new developer accounts in Play Console.
Tasks
Project
A tuition or coaching class app: students log in with phone OTP, see the timetable and notices from Firestore, get a push notification for new notices, with tests and Crashlytics, released to testers through Play Console.
Free resources
- 5
Expert · about 12 weeks
Performance, modular architecture and leading mobile work
What to learn
App performance: Many Indian users have low-cost phones and slow data.
Measure start-up time, janky frames and memory with Android Studio profilers and Macrobenchmark. Baseline Profiles help the app start faster. Keep images small, avoid work on the main thread and test on a cheap phone, not only your own.
Compose performance: Unneeded redraws make screens slow.
Learn recomposition, which is Compose redrawing a part of the screen. Use stable data, keys in lazy lists and remember to avoid extra work. Layout Inspector shows how often each part redraws.
Modular architecture: Big apps with many developers need clear boundaries.
Split the app into Gradle modules, for example core, data and one module per feature. This makes builds faster and stops one team breaking another team's code. Follow the official modularisation guide and keep dependencies pointing one way.
Background work: Some work must happen even when the app is closed.
WorkManager runs tasks that must finish, like uploading a photo or syncing data, even after a restart. Android limits background work to save battery. Choose the right tool and respect these limits.
Security: Apps handle logins, payments and personal data.
Never put secret API keys inside the app, because anyone can read them from the APK. Use HTTPS only, store tokens safely and shrink and obfuscate release builds with R8. Learn the OWASP mobile risks.
CI/CD for Android: Teams build, test and release automatically.
Run lint, unit tests and a build on every pull request with GitHub Actions. Automate uploads to a Play testing track. Use staged rollouts so a bad release reaches only a few users first.
Kotlin Multiplatform awareness: Some teams share code between Android and iOS.
Kotlin Multiplatform lets you share business logic, like networking and data rules, with an iOS app. You do not need to master it, but you should know what it is and when it helps. Learn it after your Android basics are strong.
Code review and mentoring: Senior engineers grow the whole team.
Give reviews that are kind, specific and explain why. Write short design notes before big changes. Pair with juniors and share what you learn.
Tasks
Project
A multi-module shop app for a local store: product catalogue from an API with offline cache, cart in rupees, order history, phone login, notifications, background sync, tests, CI and a staged release on a Play testing track, with a README that explains the architecture.
Free resources