MyFamilyTracker
Real-time family location sharing — Firebase Realtime DB for sub-second propagation, WorkManager + ForegroundService for OS-compliant background collection, geofencing via Google Maps API.
Maintaining 20+ live Android apps alone sounds impossible. Here's the architecture, tooling, and workflow decisions that actually make it manageable — without sacrificing quality or mental health.
On this page
People always ask: how do you maintain 22 apps alone?
The honest answer is that most of the work is architecture decisions made years ago. If every app is a snowflake with its own patterns, dependencies, and release process, managing 20 is impossible. If they share 80% of their structure, managing 20 is manageable.
Here's what actually works.
Every app I build follows the same structure:
app/
├── data/ # Room DAOs, API clients, repositories
├── domain/ # Use cases, domain models
├── presentation/ # ViewModels, Compose screens
└── di/ # Hilt modulesSame package structure. Same layer names. Same patterns for state management (StateFlow), DI (Hilt), navigation (Compose Navigation), and async (Coroutines + Flow).
When I context-switch between apps, the mental model doesn't change. I know where the repository is. I know how state flows from the ViewModel to the UI. There's no "wait, how does this one work?"
This isn't about being dogmatic. It's about reducing cognitive overhead.
Common build configuration:
All apps use a version catalog (
libs.versions.toml[versions]
kotlin = "2.1.20"
compose-bom = "2025.05.00"
hilt = "2.51"
room = "2.6.1"
[libraries]
compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" }
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "kotlin" }
room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }When Hilt releases a new version, I update one file and run
cross-sdk-update.shCommon scripts:
dependency-check.shrelease-status.shversion-bump.shconfig/version.propertiesThese live in
~/.claude/22 apps can't all release in the same week. I maintain a simple release calendar:
| Week | App | Target |
|---|---|---|
| W1 | App A | Patch (bug fixes) |
| W2 | App B | Minor (new feature) |
| W3 | App C | Patch |
| W4 | App D + App E | Patch |
Most apps release on a 4-6 week cycle. Critical bug fixes release immediately on any app that needs it.
The calendar prevents the "everything is due this week" panic.
Every app has the same GitHub Actions configuration:
# Triggered on every PR
- Run unit tests
- Run lint
- Build debug APK
# Triggered on tag v*.*.*
- Build signed release AAB
- Upload to Play Store internal trackA release is: merge PR → create tag → CI builds and uploads automatically. No manual build steps.
This removes the cognitive burden of "did I build with the right signing config?" and "did I upload to the right track?"
With 22 apps, bugs and feature requests come in constantly. Without a triage system, everything feels urgent and nothing gets done.
My priority system:
Each app has a GitHub Issues board. Weekly I spend 30 minutes reviewing all boards and assigning priorities. Daily I work on whatever P0/P1 items exist.
Switching between apps is the hidden productivity killer. A 10-minute task becomes 25 minutes when you spend 15 minutes re-orienting.
What I do:
Keep one app per day as primary. Don't jump between 5 apps in one day unless there's a P0.
Leave a "breadcrumb" when switching. Before stopping work on an app, write one sentence in the commit message or a TODO comment: "Next: add input validation to task title field before implementing the sync logic."
Git stash before switching. Don't context-switch with uncommitted changes — you'll forget which app they're for.
Things I've automated that solo devs often do manually:
dependency-check.shsync-common-files.sh.gitignoreIf a task is done more than once a month the same way, it should be a script.
22 apps means 22 potential P0 incidents at any time. Burnout is a real risk.
What helps:
The goal isn't to be maximally productive. It's to be sustainable across years.
Sudarshan Chaudhari
AI Systems Builder / Product Engineer
Bangkok, Thailand
Solo Android developer with 13+ years in QA, building Android apps, AI automation systems, and developer tools at SudarshanTechLabs.
Related Posts
Related Apps
Real-time family location sharing — Firebase Realtime DB for sub-second propagation, WorkManager + ForegroundService for OS-compliant background collection, geofencing via Google Maps API.
Building something? Available for Android dev and QA consulting.
Work with meComments — powered by Giscus