concept

Configuration as Change

also called Config-Code Parity, Data Deployment Rigour, Non-Code Change Control

Applying the review, validation, staging and rollback discipline of code deployment to configuration, content and data updates - because they change production behaviour, ship more often, and are interpreted with the same privilege as code.

crowdstrikeconfigurationrolloutvalidationblast-radius

Organisations invest heavily in the code pipeline: review, tests, reproducible builds, canary deployment, staged rollout, automated rollback, provenance. That investment protects one path into production, and it is frequently not the busiest one.

Configuration pushes, feature-flag changes, routing updates, detection content, model weights, rate-limit values, policy documents and reference data all change production behaviour. They ship more often than code, reach production faster, and typically apply fleet-wide rather than rolling gradually — and they are usually governed by nothing comparable.

The organising principle: the rigour of a rollout should be set by its blast radius and by the privilege of the code that interprets it, not by whether the artefact compiles.

Why it matters

A file parsed by a privileged component can crash that component as effectively as a bug in it. The interpreting code's authority is the change's authority, regardless of the change's format — which means a "data" update to a kernel driver, a network device, a bootloader or an edge proxy carries the risk profile of a code deploy and usually receives none of its controls.

The second reason is arithmetic. Configuration changes vastly outnumber code changes in most organisations, so even at a much lower defect rate they account for a large share of incidents — and they are the share nobody has instrumented.

Implementation patterns

  • Version control and review, identically to code. A change with no diff and no reviewer is an unreviewed production change, and this control is nearly free.
  • Schema validation with bounded value ranges, so a malformed configuration is impossible to publish rather than merely unlikely.
  • Validation against the exact parser that will consume it. A validator that has drifted from the consumer is a subtle, common and serious failure — the validation must exercise the real code path.
  • Simulation against real traffic: apply to a shadow instance, replay production requests, compare responses. This catches behavioural changes that no schema check can.
  • Progressive rollout with automatic health gating — one instance, one cell, one zone, one region — and bake time per wave exceeding the time for the failure mode to appear.
  • Local revert to last known good, on the consuming node, triggered by its own health checks. This is the decisive control, because a configuration that prevents a node from reaching the configuration service means the node can never receive the fix.
  • Two urgency classes. Narrow, schema-constrained, low-expressiveness changes on a fast global path; anything that can alter execution behaviour on the gated path — decided by what the content can do, not by how urgently someone wants it deployed.

Industry example

The July 2024 CrowdStrike incident is the definitive case: a content update — not a code release — distributed to millions of endpoints, where a malformed file caused kernel-level crashes. The technical defect matters less than the distribution property: there was no meaningful staging between publication and universal deployment, and the interpreting component held kernel privilege.

The recovery compounded it. Because the failure prevented machines from booting, remote remediation was impossible and each endpoint required physical intervention, extending a software defect into a multi-day global logistics problem across airlines, hospitals, banks and broadcasters.

The same shape recurs in cloud control-plane incidents and edge-network outages throughout 2023–2025, where an automated configuration change propagated faster than any human could intervene.

Failure scenarios

  • Global configuration push with no waves, the modern equivalent of deploying straight to production everywhere.
  • Validation against a drifted validator rather than the real consumer.
  • Rollback that depends on the failed component — the node cannot reach the service that would fix it.
  • Expressive changes on the urgent path, which is where almost every serious incident in this class originates.
  • Feature flags treated as configuration and exempted from review and staging.
  • Bake times set by convenience rather than by the failure modes being defended against.
  • No inventory of what counts as configuration, so the policy covers some artefacts and misses others.
  • Emergency bypass used routinely, which removes the control in practice while retaining it in documentation.

Trade-offs

The controls slow down configuration changes, and speed is frequently the reason configuration exists as a separate mechanism at all. A security block-list that takes an hour to propagate is useless for its primary purpose, and treating all configuration uniformly produces exactly that.

There is also real implementation cost: validation harnesses, shadow environments, staged distribution and local revert logic are engineering work, and for an organisation whose configuration is a handful of environment variables it is disproportionate.

The trade is change velocity and engineering effort against the severity of the worst configuration-driven day. The resolution is not uniform rigour but classification — most changes go through the gated path, a deliberately narrow and heavily-constrained class goes fast, and the discipline is refusing to widen that narrow class under pressure.

Interview question

"We push detection content to our agents every few hours and it has never gone through a canary. Tell me what you would put in place, in priority order, and then tell me how you would keep the two-hour turnaround for genuinely urgent signatures."