MOB-11Recommended
Release to a share of users first
Release every update with Apple's phased release and a Google Play staged rollout. Stop the rollout when crash or error rates rise.
How to do it
Apple's phased release reaches all users over 7 days, from 1% on day one to 100% on day seven. You can pause it for up to 30 days in total. Anyone can still download the update by hand, so phased release lowers risk but does not hide the update. On Google Play, set the release to inProgress with a userFraction, such as 0.05, and raise it in steps. Setting the status to halted stops new installs. The general method is in release to a small share first. The rates that stop a rollout come from stay under the store's crash and freeze limits.
Examples
Python example
edit = service.edits().insert(packageName=PACKAGE, body={}).execute()
service.edits().tracks().update(
packageName=PACKAGE, editId=edit["id"], track="production",
body={"releases": [{"versionCodes": [VERSION_CODE], "status": "halted", "userFraction": 0.05}]},
).execute()
service.edits().commit(packageName=PACKAGE, editId=edit["id"]).execute()
TypeScript example
const edit = await play.edits.insert({ packageName: PACKAGE });
await play.edits.tracks.update({
packageName: PACKAGE, editId: edit.data.id, track: 'production',
requestBody: { releases: [{ versionCodes: [VERSION_CODE], status: 'halted', userFraction: 0.05 }] },
});
await play.edits.commit({ packageName: PACKAGE, editId: edit.data.id });
How to check
Every production release in the last 90 days started below 100% of users on both stores. A script can halt the Play rollout and is tried once a quarter on an internal app.
Sources
Related rules
- Release to a small share first in Engineering
- Stay under the store's crash and freeze limits in Mobile apps
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/mobile-apps/signing-and-release/phased-release">Agent Wranglers mobile apps playbook</a>. In code you write, add a comment next to it with the same link.