GuideEmbedded DevOps · Introduction~7 min read

What is embedded DevOps?

Friday, 5:40 pm

The release is supposed to be the easy part. The firmware works. All that is left is the routine: a pristine build from a clean checkout, a version number bumped by hand, the signing step, the zip file, a careful file name so the right one gets uploaded, and a note somewhere recording what was actually sent. Six small jobs, every one of them done by a tired human, in the right order, with no mistakes.

Every firmware engineer has been that human. And every firmware engineer knows the smell of the two failures that follow. Either something in the routine quietly differed from last time, a setting, a step skipped, a file from the wrong folder, and nobody can say what exactly shipped. Or the routine simply eats the evening, because a release that takes one careful hour takes it every single time, forever.

Embedded DevOps is what happens when that routine stops belonging to a person.

The idea, in one paragraph

DevOps means a machine owns the routine. Every time a change lands in the code, the same pipeline runs: the same build, in the same frozen environment, followed by the same automated tests, the same signing, the same packaging, ending in a report a human reads instead of a ritual a human performs. The pipeline is not a script someone runs when they remember. It triggers itself, it runs identically on a Tuesday morning and a Friday night, and it keeps the evidence. If any stage fails, the line stops and says why, in writing, before anything reaches a device.

That is the whole idea. The rest of this guide is why the embedded version of it has its own shape, and what that shape looks like.

Why embedded is not web DevOps

DevOps came from the web world, and the idea travels. The details do not, for three reasons that shape everything about the embedded version.

The build is a cross-compile, not an install. A web service mostly runs where it is built. Firmware is built on a PC and runs on a microcontroller with a fraction of the resources, using a cross toolchain whose exact version changes the output. If the toolchain drifts between the build on your laptop and the build on a colleague's, the two firmwares are not the same firmware, and neither of you can prove which one a customer is running. So the embedded pipeline starts by freezing the build machine itself: one pinned toolchain, identical for every build, on every computer, forever.

The output must be signed, or devices refuse it. A web deploy can push files to a server with a password. A modern microcontroller checks a cryptographic signature before it accepts new firmware, and rejects anything unsigned or signed with the wrong key. Signing is therefore not paperwork at the end of the embedded pipeline. It is a stage inside it, with the key guarded like the asset it is, because whoever holds that key decides what a million devices will run.

The pipeline ends at hardware that can be bricked. A bad web deploy gets rolled back by restarting a service. A bad firmware deploy can leave a device in a customer's home permanently dead, fixed only by a site visit or a product recall. The cost of a mistake is physical, which is why the embedded pipeline insists on proving an update on real hardware, and on updates that can retreat to the previous version, before anything is called a release.

Same idea as the web. Higher stakes at every stage.

The pipeline, stage by stage

Here is the whole map. One commit goes in one end; a release comes out the other.

Sniffer (second dongle)IKEA bulbRouter bulb (DK)Coordinator (dongle, shell)Sniffer (second dongle)IKEA bulbRouter bulb (DK)Coordinator (dongle, shell)bdb role zc, set key, bdb start: network existsJoin: association, then Device Announcezdo discovery: endpoints and clusters, read livezcl cmd: On/Off Toggle, Level ControlJoin after its reset ritual, same ceremonyzcl cmd: Toggle a real bulb in a real lampThe same frames again, with the sniffer listening and the key in Wireshark

What each stage is quietly catching:

  • Build in the frozen toolchain catches "works on my machine". The build environment is identical every time, so a green build means the code built, not that your laptop is special.
  • Automated tests catch regressions while they are still cheap. The firmware's logic is compiled for the host computer and exercised there, hundreds of checks in seconds, on every commit.
  • Sign and verify catches process mistakes and worse. The signing key never sits in the code repository or on a laptop; it lives in the pipeline's credential store, signs there, and every signature is verified before the artifact is allowed to exist.
  • The real board test catches what simulation cannot. A physical board, cabled to a test machine, is flashed with the exact signed firmware the pipeline just made, and then questioned over its serial line: did you boot, what version are you, does the headline feature answer. This is called hardware-in-the-loop, and it is the stage that turns "the tests pass" into "the product works".
  • Human approval and release catch the last class of error, which is timing. Automation prepares everything and then stops: a person reviews the report and the version, and only then does the release publish, with every artifact named, versioned, and traceable back to the exact commit and build that produced it.

Notice what is not on the list: heroics. A good pipeline makes the correct release the boring release.

What changes for you

For the engineer, the shift is bigger than the tooling. Releases stop being evenings. "It worked on my machine" stops being an argument anyone can make. When a customer reports a strange unit, the question "what firmware is it running" has an exact answer, because every shipped artifact carries its version and its ancestry.

And there is a career fact worth being plain about. Firmware engineers who can only write firmware are competing with everyone who can write firmware. The engineer who can also build the path that builds, tests, signs, and ships it is visibly more senior, because that is the path every real product eventually needs. Teams feel the absence of this skill as pain, in releases, in recalls, in Friday evenings, which is exactly why it is worth having.

Where to learn it properly

We built the course we wanted for this: Embedded DevOps, Engineered: one real Zigbee product, taken from a hand-built release to a pipeline that builds, tests, signs and flashes it. It is on sale now on the course page, and the first chapter is free to read before you decide. And if you already work as an embedded engineer, this is the kind of training employers are usually happy to pay for, because it ends with an exam and a verifiable certificate, which is the paperwork training budgets ask for.

One email when a new Guide or course lands. Nothing else.

← All guides