Kotlin Intermediate
From Code Structure to Secure, High-Performance Android Apps - 3 days
Stop building apps that only work in the lab!
Modern Android development is no longer about making screens light up or APIs return data—it’s about building apps that survive real-world conditions. Apps that don’t choke under network stress, apps that stay secure when users’ devices are rooted or compromised, apps that can be maintained by teams for years without collapsing under technical debt.
Kotlin has become the standard language for Android, but knowing the syntax isn’t enough. The difference between “functional code” and “production-ready architecture” is what separates junior developers from professionals who deliver at scale. That means clean MVVM layering, modular design, bulletproof security practices, and performance tuning that actually moves the needle.
Over three focused days, this course takes you from simply writing Android code to engineering apps that are fast, safe, and maintainable. With over 30 years of industry experience behind the instruction, you’ll learn real-world techniques that teams use in production - not theory, not outdated patterns, and not surface-level demos.
This is where good Kotlin developers become great Android engineers.
Learning Outcomes
By the end of the course, participants will be able to:
- Define and implement clean, modular, maintainable Android project architectures (MVVM, clean separation of concerns, proper layering).
- Use ViewModel patterns correctly, including for non-UI state, lifecycle management, and handling configuration/folding/multiple devices.
- Identify and apply best practices for security: secure communication, data storage, obfuscation, permission management, rooting/jailbreak detection, etc.
- Perform performance tuning: find and fix bottlenecks, manage resource usage (memory, CPU, GPU), optimize asynchronous tasks (coroutines, flows), reduce app size, etc.
- Write code suitable for industrial quality: testing, CI/CD considerations, code reviews, maintainability, versioning.
Prerequisites
Participants should have:
- Working experience with Kotlin (self-taught or otherwise), including coroutines.
- Professional Android development experience: activities/fragments or composables, views, basics of lifecycle.
- Familiarity with REST APIs and JSON.
- Access to a development setup: Android Studio latest, emulator or device, ability to install dependencies, etc.
Detailed Training Guideline
Structure & Code Architecture
- Clean architecture versus more ad-hoc architecture
- Layers: Presentation, Domain, Data
- Repositories, Use Cases / Interactors
- Models vs DTOs vs Entities
- Dependency inversion, interface segregation
- Modularization
- Feature modules, core modules (e.g. network, util)
- Gradle module dependencies: api vs implementation vs compileOnly etc.
- Reuse, sharing code, versioning of modules
- Project & Package Organization
- Best practices for folder/package structure
- Consistent naming conventions, visibility modifiers, internal vs public APIs
- Avoiding God classes; keeping code decoupled
- MVVM Pattern Deep Dive
- Role of Model, View, ViewModel; responsibilities
- State management: “single ViewState” vs many mutable LiveData/StateFlow etc.
- Handling UI events, side-effects, navigation cleanly in MVVM
- Data binding (if using XML) vs Compose (if using Jetpack Compose)
- ViewModel Best Practices
- Scoping correctly to screens, not holding onto references to Context, Views, Resources.
- Using viewModelScope, structured concurrency; cancellation.
- Managing state, new APIs (SavedStateHandle, lifecycle awareness).
- Non-display / non-UI state: background tasks, data fetches, caching etc.
Security
- Fundamental security guidelines (Android best practices)
- Secure communication (HTTPS, TLS, certificate pinning)
- Limiting permissions; runtime permissions; minimal permissions principle
- Data storage: secure storage for sensitive data (EncryptedSharedPreferences, SQLCipher, files)
- Obfuscation / Code protection
- ProGuard / R8 usage (shrinking, obfuscation, resource shrinking)
- Avoiding metadata exposure; handling Kotlin metadata issues.
- Root / Jailbreak detection, tampering detection
- Secure authentication & authorization
- Token storage, refresh, session management
- Avoiding exposing secrets in code / assets
- Keeping dependencies up to date; using safe cryptography libraries
- Secure error handling, logging (avoid logging secrets), crash reporting considerations
Performance Tuning
- Kotlin language and code level optimizations
- Use of val over var, avoiding !!, avoiding unnecessary object allocations, use of inline functions carefully etc.
- Coroutine best practices: dispatchers (Main vs IO vs Default), structured concurrency, avoiding blocking operations on main thread
- Efficient view rendering, using Compose optimally if using it; avoiding over-recomposition; use of keys, remember, derivedState etc.
- List rendering (RecyclerView optimizations or Compose lazy lists), diffing, paging
- Memory usage, profiling
- Detecting leaks, use of leak detection tools
- Reducing memory footprint of bitmaps, caching strategies, avoiding large allocations
- App size reduction
- Shrinking, resource optimization, splitting APKs or using Android App Bundle
- Threading and concurrency
- Async task patterns; avoiding race conditions; proper error propagation
- Startup performance, cold & warm starts
Testing, Quality & Maintenance
- Testing strategies
- Unit tests for ViewModels, Use Cases, data repositories
- Integration tests (e.g. API + parsing)
- UI tests (Espresso or Compose UI tests)
- Continuous Integration / Deployment considerations
- Automated builds, code style enforcement (linters), static code analysis
- Code review practices; architecture review; performance regression tests
- Logging, Monitoring & Debugging
- Using Android Profiler, memory, CPU, GPU, network profiling
- Crash reporting, analytics, handling user error reports
- Versioning and backward/forward compatibility
- Handling different device configurations: foldables, various densities, locales
Practical, connected learning
My wider training approach brings hands-on implementation and systems thinking together, connecting technology with real operational needs.