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.
There's no team to hand off to when you're solo. Here's the complete end-to-end release process: final testing, building the AAB, signing, uploading, writing release notes, and monitoring after launch.
On this page
When you're a solo developer, "release day" is every phase of the process: QA, build, sign, upload, monitor. No handoffs. No DevOps team. Here's how to do it efficiently without cutting corners.
Monday-Wednesday: Feature freeze and bug fixing.
No new features after Monday. Everything goes into fixing what's broken and polishing what's rough. This is hard to enforce on yourself — the temptation to add "just one more thing" is always there. Resist it.
Thursday: Full regression pass.
Run through every major user flow manually:
Friday: Build and internal test.
Build the release AAB, install on your personal device (not a debug build — the release build), and test for another 30-60 minutes. Release builds behave differently from debug:
# Clean build to avoid stale cache issues
./gradlew clean
# Build signed release AAB
./gradlew bundleRelease
# Or, if using CI (preferred):
git tag v2.3.0
git push origin v2.3.0
# CI builds, signs, and uploads automaticallyVerify the output:
# Check the AAB was created
ls -la app/build/outputs/bundle/release/
# Verify the signing
./gradlew validateSigningReleaseBefore clicking "Upload" in Play Console:
Bad release notes:
- Fixed crash
- Performance improvements
- Various bug fixes
Good release notes:
- Fixed a crash that occurred when completing tasks with long titles
- Task list now loads 40% faster on older devices
- Improved reliability when syncing tasks while offline
Users read release notes. Vague notes communicate "we don't care enough to tell you what changed." Specific notes build trust.
In Play Console → Production → Create new release:
Before promoting to production, check:
Never release to 100% immediately:
| Stage | Percentage | Wait Time |
|---|---|---|
| Internal testing | 0.01% (your testers) | 1 day |
| Closed testing | 0.1-1% | 24-48 hours |
| Production (staged) | 10% → 50% → 100% | 24 hours between each step |
At each step, check Android Vitals:
To pause a rollout in Play Console: Production → Manage release → Halt rollout.
Immediately after release:
24 hours later:
48 hours:
If a critical crash appears after release:
[!WARNING] Never resume a halted rollout with the same build that caused the crash. Always fix and re-upload.
After every release, spend 10 minutes writing:
## Release 2.3.0 — Post-Mortem
**Release date:** 2026-03-31
**Rollout completed:** 2026-04-02
**Crash-free rate at 100%:** 99.7% (baseline: 99.6%)
**New critical bugs:** 0
**User reviews this week:** 4.1 avg (prev: 4.0)
**What went well:**
- CI automated the build and upload — no manual steps
- Regression pass caught a form validation bug before release
**What to improve:**
- Release notes were vague — improve specificity next time
- Internal test period was only 1 day — extend to 2 days for major releasesSudarshan 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