In theory, updating an app is just uploading a new file to the store. In practice, it is a moment of tension. "Will it break for those who already have it installed?", "Will database migrate correctly?".
This practical guide covers operational best practices to ensure your updates are smooth and invisible (in a good way).
1. Feature Toggles (Controlled Launch)
Never release a new "hardcoded" feature in the update. Use Feature Toggles (remote on/off switches).
- You upload the update with the new functionality hidden (off).
- When the version is stable for 90% of users, you turn on the switch on the server.
- If there's a problem, you turn it off. This decouples "Deploy" (code in the store) from "Release" (available to the user).
2. Staged Rollout
Both Google Play and the Apple App Store allow for gradual rollout.
- Day 1: Release to 1% of users.
- Day 2: Monitor crashes. If everything ok, release to 5%.
- Day 3: 20%.
- Day 7: 100%. If there is a catastrophic bug, it will only affect 1% of your base, not all. You can pause the release and fix it.
3. Automated Regression Testing
Before uploading, run your test suite. Regression testing checks: "What worked before still works?" It is very common to fix the "Profile" screen and break the "Login" screen by accident. Automation (Appium, Maestro) is essential here.
4. Local Data Migration (Realm/CoreData)
If your update changes the structure of the local [mobile database] (e.g. added a column to the task table), you need to write a Migration.
- The app detects that you are on the new version of the bank.
- Runs a script to adapt the old data to the new format.
- Only then let the user enter.
- Danger: If you forget the migration, the app will crash when opening for all old users. Test this thoroughly (install the old version, fill it with data and update to the new one).
5. App Size
Monitor the size of your .apk or .ipa.
Huge updates (100MB+) make the user stop downloading if they are on 4G.
Use techniques like App Bundles (Android), which download only the resources needed for that specific user's screen, reducing the download size.
Conclusion
Updating "in practice" is a risk reduction exercise. Use the tools that stores offer (Staged Rollout) and implement defensive architecture (Feature Flags). The best update is the one that improves the user's life without causing interruption in the service.
