Back home

ANDROID
ENGINEERING NOTES

Short, actionable technical notes on building production-grade Android apps. Focus: Compose, Performance, Security.

Get these daily on X

Latest Notes

Evolving Architecture: Refactoring Legacy Apps Toward Clean + Modular

2026-03-09
androidarchitectureclean-architecturemodularizationrefactoringkotlin

A practical, beginner-friendly guide to migrating a legacy Android codebase to clean, modular architecture without stopping feature delivery.

Architecture for Security-Critical Features: Keystore, Biometrics, and Secret Boundaries

2026-03-06
androidarchitecturesecuritykeystorebiometricsgde

A beginner-friendly architecture guide for security-critical Android features using Keystore, biometrics, and strict secret boundaries.

Scalable Navigation Architecture: Nested Graphs, Type-Safe Routes, and Feature Isolation

2026-03-05
androidarchitecturenavigationcomposemodularizationgde

Learn a scalable Navigation Compose setup with nested graphs, type-safe routes, and feature-isolated navigation contracts.

Offline-First Architecture: Room + Network Sync + Conflict Resolution

2026-03-04
androidarchitectureoffline-firstroomsyncgde

Build resilient Android apps with an offline-first data flow using Room, background sync, and clear conflict resolution rules.

Modularization 101: Feature Modules, Core Modules, and Gradle Strategy

2026-03-03
androidarchitecturemodularizationgradlegde

Learn how to split an Android app into feature and core modules, avoid common modularization mistakes, and set up a Gradle strategy that scales.

MVVM Done Right: ViewModel Contracts, Side Effects, and Lifecycle

2026-03-02
androidkotlinjetpack-composemvvmarchitectureviewmodel

A beginner-friendly guide to building robust MVVM screens in Android with clear UI contracts, one-off side effects, and lifecycle-safe collection in Compose.

Data Layer Foundations: Repository Pattern (Single Source of Truth)

2026-03-01
androidarchitecturerepository-patternclean-architecturekotlinroomnetworking

Learn how to structure your Android data layer with the Repository pattern, avoid common anti-patterns, and build a reliable Single Source of Truth with Room + network.

Domain Layer Basics: Use Cases, Business Rules, and Testability

2026-02-28
androidarchitectureclean-architecturedomain-layertesting

Learn what the Android Domain layer does, how to write focused Use Cases, and how BAD vs GOOD patterns improve clarity and testability.

UI Layer in Practice: State, Events, and UDF in Compose

2026-02-27
androidjetpack-composearchitectureudfmvvm

Learn how to structure a Compose UI layer with clear state, one-off events, and unidirectional data flow using practical BAD vs GOOD examples.

Android Architecture Fundamentals: Layers, Boundaries, and Data Flow

2026-02-26
AndroidArchitectureClean ArchitectureComposeKotlin

A practical and detailed guide to Android app architecture: layer responsibilities, dependency boundaries, data flow, and real Kotlin examples with comments.

Baseline Profiles for Android: Faster Startup (Bad vs Good Patterns)

2026-02-25
AndroidPerformanceBaseline ProfilesJetpackKotlinGDE

A beginner-friendly Baseline Profiles guide with practical BAD vs GOOD Kotlin examples to improve startup and scrolling performance.

Android Testing: Unit + Compose (Bad vs Good Patterns for Real Apps)

2026-02-24
AndroidTestingUnit TestingJetpack ComposeKotlinTDD

Learn beginner-friendly Android testing with practical BAD vs GOOD examples for ViewModel unit tests and Jetpack Compose UI tests.

Compose retain vs ViewModel: Practical Guide, Trade-offs, and Real Examples

2026-02-24
ComposeAndroidArchitectureState ManagementViewModel

A detailed guide to Compose retain: what it solves, what it does NOT replace, and concrete scenarios where retain is better than creating a ViewModel.

Glance Widgets: Building Your First Android App Widget with Jetpack Compose

2026-02-23
AndroidJetpack GlanceWidgetsJetpack ComposeTutorial

Learn how to create modern Android widgets using Jetpack Glance — the declarative way to build app widgets with Compose.

Android Security: Biometric Authentication & Keystore Mastery

2026-02-22
AndroidSecurityBiometricsKeystoreKotlin

Learn how to implement biometric auth and secure key storage in Android with practical code examples

Navigation Compose 3: Type-Safe Routing Done Right

2026-02-21
AndroidJetpack ComposeNavigationNavigation Compose 3Type-Safe

Master Navigation Compose 3 with type-safe arguments, Serializable support, NavigationSuite for tablets, and the new routing patterns that make navigation effortless.

Material 3 Theming in Jetpack Compose

2026-02-21
AndroidJetpack ComposeMaterial 3ThemingGDE

Learn how to properly implement Material 3 theming in your Compose apps with dynamic colors, custom color schemes, and best practices.

Room + SQLCipher Deep Dive: Encrypted Database for Android

2026-02-20
AndroidRoomSQLCipherDatabaseSecurityKotlin

Master Room database with SQLCipher encryption: entities, DAOs, migrations, encrypted storage, and production patterns for secure Android apps.

Navigation Compose: Stop Fighting Your Router

2026-02-20
AndroidJetpack ComposeNavigationBest Practices

A practical guide to Navigation Compose that will make your app flow feel natural. No more argument passing nightmares or navigation graph spaghetti.

Stop Recomposing Your List! LazyColumn Keys That Actually Work

2026-02-19
AndroidJetpack ComposePerformanceLazyColumnKotlin

Learn how to use stable keys in LazyColumn to prevent unnecessary recompositions and boost your Compose UI performance.

Coroutines + Flow Deep Dive: From Basics to Production Patterns

2026-02-19
AndroidKotlinCoroutinesFlowAsyncPerformance

Master Kotlin Coroutines and Flow: suspend functions, structured concurrency, StateFlow, SharedFlow, error handling, and real-world patterns for Android.

Jetpack Compose: The One Mistake That's Killing Your LazyColumn Performance

2026-02-18
Jetpack ComposeAndroidPerformanceLazyColumnKotlin

Stop unnecessarily recomposing your LazyColumn items! Learn how to use keys properly and avoid the most common performance pitfall in Compose lists.

Hilt Dependency Injection Deep Dive: From Basics to Custom Scopes

2026-02-18
AndroidHiltDependency InjectionKotlinClean Architecture

Master Hilt in Android: custom scopes, navigation scopes, qualifiers, component dependencies, and real-world patterns for clean architecture.

WorkManager Deep Dive: Background Jobs That Actually Work

2026-02-17
AndroidWorkManagerBackgroundKotlinPerformance

Master WorkManager for Android: periodic sync, constraints, chaining, retry policies, and real-world patterns for robust background processing.

Compose LazyColumn Stability Budget for User Directories

2026-02-17
Jetpack ComposePerformanceLazyColumnKotlinAndroid

Teach Compose to skip useless work by stabilizing your user list models, derived filters, and side effects.

Compose LazyColumn Without Leaks: Stabilize Side Effects

2026-02-16
Jetpack ComposePerformanceLazyColumnKotlinAndroid

How to keep a user directory fast by taming LazyColumn recomposition, stability, and coroutine side effects.

Stabilizing LazyColumn User Lists for Skip-Friendly Recomposition

2026-02-15
Jetpack ComposePerformanceLazyColumnAndroidKotlin

How to structure user lists in Jetpack Compose so LazyColumn can skip work and stay memory-safe.

remember vs rememberSaveable in Compose: When to Use Each

2026-02-14
Jetpack ComposePerformanceStateAndroidKotlin

Learn the difference between remember and rememberSaveable in Jetpack Compose and when each one prevents state loss during configuration changes.

Compose StateHolder vs ViewModel: When to Use Which

2026-02-13
ComposeArchitectureState Management

Stop putting everything in ViewModel. Learn when to use local StateHolder (remember { ... }) vs when you need a ViewModel for proper lifecycle awareness.

Why Your LazyColumn Recomposes Everything: Understanding Item Stability in Compose

2026-02-13
Jetpack ComposePerformanceLazyColumnAndroidKotlin

Learn why your LazyColumn items keep recomposing and how to fix stability issues for smooth scrolling performance.

Compose Performance: It's Probably a Leak

2026-02-12
ComposePerformanceMemory

When 'Compose is slow' is actually GC jank: how to find and fix memory leaks with LeakCanary (and correct side-effect cleanup).

Jetpack Compose LazyColumn Performance: Stability, Keys, and Recomposition You Can Predict

2026-02-12
AndroidJetpack ComposePerformanceLazyColumn

A beginner-friendly guide to speeding up Compose lists by fixing unstable models, adding stable keys, and avoiding accidental recompositions and side effects.

Compose Performance: Skipping & Stability (User List Edition)

2026-02-11
ComposePerformance

Why your User List janks: unstable lambdas break skipping. Learn the fix with remember + method references, with beginner-friendly comments.