What this is. Opinion + Experience + Fact (25% opinion · 25% experience · 50% fact). Written in collaboration with AI — I discuss, I do not outsource.
Pushing one update to a whole fleet at once is the riskiest way to ship it. The teams who update thousands of devices with confidence treat a rollout as a staged campaign — here is what that campaign looks like, and how to build the device so it is possible.
A single device updates in seconds. You flash it, it reboots, you move on. A fleet of thousands is a different exercise: the update should roll out over days, on purpose, so that a problem shows up on ten devices instead of ten thousand.
That is the whole idea behind treating an over-the-air update as a campaign rather than a button. In twenty-plus years of shipping connected products, the teams who update with confidence all do the same three things: they roll out in stages, they watch each stage before widening, and they keep a clean way back. Let me walk through each — and the device-side design that makes it possible.
1. A fleet update is a staged rollout
Start small. A canary group — a small slice of the fleet — takes the update first. If it behaves, you widen to larger cohorts, and only then to the whole fleet. Each stage is a checkpoint: the update proves itself on real devices, in the field, under real conditions, before the next batch receives it.
The value is simple arithmetic of risk. A regression that reaches a canary group is a small, recoverable event. The same regression shipped to every device at once is a fleet-wide outage. Staging turns the second into the first.
▸ First principle. A safe rollout earns its way to 100% — it never starts there.
2. Watch each stage before you widen
A staged rollout only helps if you can see how each stage is doing. That means health signals reported per cohort: did devices boot successfully after the update, is the crash rate steady, are they still connecting, is battery draw normal. These are the numbers that tell you whether the new build is healthy on real hardware.
With that visibility, widening becomes a decision instead of a hope. While a cohort's numbers hold, you widen to the next. If a cohort dips, you pause the campaign and look before going further. The rollout moves at the speed of evidence.
▸ First principle. An update you can watch rolling is one you can stop early.
3. Always keep a clean way back
Staging limits how far a bad build can travel; a rollback path decides how quickly you recover. The device-side design that makes this clean is a signed A/B image: two firmware slots, so a device boots the new build, confirms it is healthy, and — if it is not — steps back to the last known-good build on its own. Nothing about it requires a hand on the hardware.
With that in place, the campaign gains real controls: pause it, resume it, or roll a specific cohort back, all remotely. A rollout you can reverse is one you can run boldly, because a wrong step is recoverable by design rather than by a field visit.
▸ First principle. An update is only safe when going back is as easy as going forward.
4. What runs the campaign
A campaign like this has two halves, and it helps to name them clearly. The device needs a safe-update path — signed images, A/B slots, self-checked boot, health it can report. That part is open-source in EmbedIQ, the RTOS-agnostic layer I have written about before; it gives each device the honest reporting and clean rollback the campaign depends on. The fleet side needs an orchestrator — the thing that defines cohorts, watches health, and widens or halts the rollout. That is what EmbedIQ Cloud is for.
The point is not the brand. If you already run a device-side updater you trust and a fleet tool that stages and monitors rollouts, you have the same two halves. What matters is that both exist and talk to each other: a device honest enough to report its health, and a campaign smart enough to act on it.
▸ First principle. A good rollout needs two halves — a device that reports the truth, and a campaign that acts on it.
5. A rollout checklist you can adopt
Here is the campaign as a checklist — the stages, what you watch at each, and the action that gates the next:
| Stage | Who gets it | Watch | Widen when… |
|---|---|---|---|
| Canary | A small slice of the fleet | Boot success, crash rate, connectivity | Signals hold over a set soak time |
| Cohort | Larger, representative groups | The same signals, per cohort, plus battery draw | Each cohort stays green |
| Full fleet | Everyone, last | Fleet-wide health and support signals | — |
| Any stage | — | A cohort dipping below your threshold | Pause / roll back to last good |
Adopt that, and a fleet update becomes a routine you run with confidence rather than an event you hold your breath through.
▸ First principle. Ship the rollout the way you ship the product: in stages, measured, and reversible.
An over-the-air update is one of the most valuable things a connected product can do — it lets you improve a device long after it ships. Treated as a campaign that is staged, watched, and reversible, it is also one of the safest. That is how thousands of devices take an update while the product keeps running.
Sources
Staged / phased rollout and canary deployment — established release-engineering practice for updating large populations of devices and services.
A/B (dual-bank) firmware updates with rollback — a standard safe-OTA pattern for embedded devices; see also the device-side write-up "Safe OTA in Three Layers."
EmbedIQ — the open-source, RTOS-agnostic device layer (signed A/B updates, self-checked boot, health reporting); EmbedIQ Cloud — the fleet-side campaign orchestration. Code and links on my profile.
FAQ
What is an OTA update campaign?
An OTA update campaign is a staged rollout of new firmware across a fleet of devices, rather than a single push to everyone at once. The update reaches a small canary group first, then larger cohorts, then the full fleet, with health checks between stages so a problem is caught while it is still small.
What is a canary rollout?
A canary rollout sends the update to a small slice of the fleet first and watches how those devices behave. If the health signals hold, the rollout widens; if they dip, it pauses. The canary group absorbs the risk that would otherwise hit the whole fleet at once.
How do you roll back a firmware update on a fleet?
Each device carries a signed A/B image — two firmware slots — so a device that fails its post-update health check boots back into the last known-good build automatically. On the fleet side, the campaign can pause, resume, or roll a specific cohort back remotely, without physical access to the devices.
What metrics tell you a rollout is healthy?
Per-cohort signals like boot success rate after the update, crash rate, connectivity, and battery draw. Widening to the next stage is gated on these staying within threshold; a cohort dipping below threshold is the trigger to pause and investigate.
What is EmbedIQ Cloud?
EmbedIQ Cloud is the fleet-side layer that runs update campaigns — defining cohorts, monitoring per-cohort health, and widening, pausing, or rolling back the rollout. It pairs with EmbedIQ on the device, the open-source layer that provides the signed A/B update path and health reporting the campaign depends on.
The short version of this is on my LinkedIn. The device-side framework is open source — it's called EmbedIQ — and the architecture, the code, and the links live on my profile.
Stay in the loop
New essays on embedded systems, firmware quality, and engineering craft. No noise.
Discussion
No comments yet. Be the first to share your thoughts.
Leave a comment