Agent Wranglers

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

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.