Skip to content

Promoting deployments

The default rollout shape in SimpleOTA is manual ramping. You create a deployment at low percentage, watch the metrics, then raise.

A safe default ramp

Step Percentage Wait for
1 5% At least 24h and a healthy success rate.
2 25% At least 24h, no spike in failed reports.
3 50% A few hours, watching for support tickets.
4 100% Done.

Same rollout_seed throughout. The cohort math means buckets that were already exposed at 5% are still exposed at 25%; you only add buckets, never reshuffle.

What to watch

The deployment detail page surfaces:

  • Eligible: devices in the audience whose hardware matches.
  • Offered: devices that fell inside the cohort cutoff.
  • Succeeded: devices that POSTed state: success to /api/v1/ota/status/.
  • Failed: devices that POSTed state: failed. The error string is surfaced too.
  • Pending: eligible + offered but no terminal status yet.

A typical canary failure pattern: Failed > 2% of Offered within the first hour. That's your cue to pause the deployment (it's a button), investigate, and either roll forward (next build) or cut a revert deployment.

Stopping at 100%: when is it "done"?

A deployment with percentage = 100 and pending = 0 is effectively finished. SimpleOTA marks it completed once a settling timeout has passed. Completed deployments stay in the audit trail; they just don't participate in the offer-decision query path.

See also