Skip to content

How do we run a fleet change and independently verify the result?

A fleet change is complete when the resulting device state is correct, not when the job runner says the command was sent.

Use a bounded cohort, define the expected outcome before execution, and verify that outcome through an independent signal such as version, process state, telemetry, Pulse, logs, or a product health check.

Define success before you run anything

For every fleet operation write down:

  • target cohort;
  • command/change;
  • preconditions;
  • expected resulting state;
  • acceptable failure rate;
  • stop/rollback condition;
  • independent verification signal.

Example:

Restart northstar-agent on 25 tagged staging devices. Success means all 25 reconnect, the process is active, and the expected binary checksum/version is visible within the verification window.

That is much stronger than “run systemctl restart on 25 devices.”

Start with the smallest meaningful cohort

A normal rollout shape is:

  1. one representative device;
  2. a small staging tag/cohort;
  3. one site/customer/product generation;
  4. a wider production cohort;
  5. remainder of compatible fleet.

Do not make the first production test the entire fleet because the command appears simple.

Check preconditions

Before executing, confirm facts that change the risk:

  • devices are the intended product generation;
  • required storage/memory is available;
  • devices are sufficiently online;
  • current software/configuration is known;
  • dependencies are healthy;
  • maintenance window/customer impact is acceptable;
  • rollback path exists where required.

Pulse and inventory data can help reveal unexpected variation before action.

Execute through a bounded mechanism

Use Fleet Jobs or another supported orchestration path that gives you explicit target scope and progress rather than running an uncontrolled shell loop from an engineer's laptop.

For scripts/actions:

  • make them safe to retry where possible;
  • fail clearly;
  • avoid unbounded loops;
  • avoid interactive assumptions;
  • emit structured/useful output;
  • respect local safety and product ownership boundaries.

Do not use job completion as the only verification

A command can exit successfully while the intended outcome is wrong.

Examples:

  • package command succeeds but old process is still running;
  • restart succeeds but application immediately crashes;
  • config file writes but application rejects it;
  • container starts but reports unhealthy;
  • device reboots but never reconnects.

Verify the outcome through a separate path.

Good independent verification signals

Depending on the change:

  • process/service active state;
  • binary checksum;
  • package/application version;
  • container image/version;
  • product telemetry value;
  • reported configuration;
  • health/dependency test;
  • expected log event;
  • Device Class Pulse conformity;
  • reconnect after reboot.

Prefer a signal that represents the actual customer/product outcome rather than merely another view of the same command execution.

Treat non-reporting devices explicitly

After a change, separate:

  • succeeded and verified;
  • command failed;
  • command succeeded but verification failed;
  • device went offline;
  • device never participated because it was offline;
  • result unknown.

“98% successful” can hide the two devices you most need to investigate if the unknowns are folded into the percentage.

Stop conditions matter

Define when the rollout stops automatically or operationally.

Examples:

  • more than 2% fail verification;
  • any device fails to reconnect after reboot;
  • a safety/product health signal degrades;
  • unexpected product generation appears in the cohort;
  • customer-facing error rate increases.

Do not continue merely because the job engine is capable of targeting more devices.

Rollback is another fleet change

A rollback should have its own expected state and verification signal.

If the change cannot be rolled back, make that explicit before execution and use a smaller cohort accordingly.

Record enough evidence for incident review

After the maintenance window retain:

  • who initiated the change;
  • target selection;
  • command/version/configuration;
  • timestamps;
  • failures/unknowns;
  • verification result;
  • follow-up actions.

This turns “we pushed something last night” into an auditable operational event.