Skip to content

One configuration field changed. How do you roll it out to 1,000 services?

The Config Changed. Who Told the Fleet? · Part 3 of 6 · 6 min read

Read the worked explanation ↓

A company wants to change default client timeouts across 700 microservices. Some run old SDK versions and some perform once-a-day settlement. Design typed configuration, compatibility, canary selection, measurement, stop conditions, and reliable rollback.

Think first

A company wants to change default client timeouts across 700 microservices. Some run old SDK versions and some perform once-a-day settlement. Design typed configuration, compatibility, canary selection, measurement, stop conditions, and reliable rollback.

Take a few minutes to form an approach, then compare it with the worked explanation.

Reveal the worked explanation

Interview question. A platform team manages configuration for 1,000 independently deployed services. A new policy is valid JSON and passes unit tests, but a previous company-wide push caused an outage. Design the authoring, validation, staged rollout, observation and rollback workflow without assuming that config changes are safer than code releases.

Someone changes requestTimeoutMs from 2,000 to 200 in a central repository. The diff is one line, the parser accepts it, and an approval bot checks that the value is positive. A bulk publisher then broadcasts the new setting to all services within seconds. An hour later the incident report calls it a deployment failure even though no application binary changed. This should not surprise us. Configuration modifies runtime behavior. A timeout, route, certificate trust root or concurrency limit can alter every request as decisively as code.

The first design decision is ownership. Who is allowed to change a setting, and who can approve a setting that affects a thousand services? Treat configuration as an immutable, versioned artifact with an author, reason, expected impact, schema version, rollback target and authorization record. Avoid an unconstrained string-key database where different services reuse timeout to mean different things. Namespaces or strongly typed schemas make changes inspectable. Some keys should be owned by the service team, others by a security team or platform operator. A service must know exactly which bundle and revision it applied.

A configuration change moves through validation, canary cohorts, regional waves, fleet acknowledgment, and rollback checkpoints.
A configuration change moves through validation, canary cohorts, regional waves, fleet acknowledgment, and rollback checkpoints.

Static validation catches more than malformed JSON. Check ranges and types, required fields, mutually exclusive options, deprecations and identity references. A value requestTimeoutMs=200 may be syntactically valid but below measured p99 for a payment gateway. Semantic validation needs service-specific constraints and, for some changes, a shadow evaluation against realistic workloads. A route table can be a well-formed document that sends 80% of tenants to one small cell. The routing lesson later in this series examines that failure in detail, but the general pipeline must reserve a place for those deeper checks.

Compatibility is another trap. Assume 1,000 services do not all run the same binary version. A new config field might be ignored by old binaries, rejected by strict parsers, or interpreted differently by new code. Include a minimum compatible binary version or capability declaration in the bundle. For an incompatible setting, deploy consumers able to read both formats before publishing the new field. When rollback is needed, keep the previous version readable by the binaries that remain. A configuration rollback that points new code to an unreadable old format is not recovery.

Now publish gradually. Start with an offline validation and a test cohort, then one low-risk instance or cell, then a small production cohort, then wider regional waves. The actual cohort sizes should reflect risk, customer impact and how quickly useful metrics appear, not a ritual of exactly 1%, 10%, and 100%. For latency-sensitive request settings you may observe changes quickly. For a daily payroll task, a 15-minute canary reveals almost nothing. Define the observation period by the operation's execution and failure cycles.

Make versions immutable and promotions explicit. Suppose release cfg-184 is approved and cfg-183 is last known good. A rollout controller tells service A to activate 184. A fetch error is not a successful activation. A successful fetch is not necessarily a successful parse. A successful parse is not necessarily a safe live activation. Track target_revision, downloaded_revision, validated_revision, and active_revision separately. The service should record activation only after local validation and atomic swap. A rollback command should target a known-approved prior artifact, not recompute settings from today's mutable repository state.

What should halt promotion? At minimum, monitor customer-facing error rates, latency, useful request volume, crash loops, rollback availability, and the fraction of expected instances on each revision. Add config-specific invariants, such as payment declines, policy denials, queue timeouts or traffic distribution, because generic HTTP success can conceal a wrong business decision. Compare a canary cohort with an appropriate control group. Avoid blaming the config for a coincident global incident or ignoring a local issue because fleet averages look fine.

A numerical example: 1,000 services each run 20 instances, making 20,000 processes. If every process independently polls a 500 KB bundle every 30 seconds, the fleet transfers about 20,000 × 500 KB / 30, roughly 333 MB per second in decimal units, before headers, TLS and retries. Use ETags, delta updates, local fanout agents, coalescing and jitter. More importantly, do not force every process to refetch at once when the rollout begins. The control plane can publish a version pointer through a scalable channel, and a local distributor can fetch content once for many workers. This is a capacity example, not a requirement to use a particular vendor.

Rollback needs rehearsal. If a setting changes only request routing or limits, switching the active snapshot back can often reverse the behavior. If a setting caused irreversible writes, schema changes or external side effects, flipping the revision cannot undo those effects. Define whether rollback is safe, whether an operator must reconcile produced data, and whether the system must temporarily pause writes. Keep operator access and rollback channels independent of the same faulty route or auth decision being changed. A bad global policy that locks administrators out is particularly dangerous.

Finally test the actual blast radius. Simulate an invalid value that passes syntax checks, a client stuck on an old revision, a region that cannot reach the distributor, an incompatible binary version, and an operator attempting rollback while the primary control plane is down. The publish workflow should halt safely, preserve known good service behavior where permitted, and tell operators which processes are on which revision. The best answer describes configuration deployment as software delivery with a stricter emphasis on version visibility, semantic safety and the ability to stop a bad push before it becomes global.

Go deeper

A configuration system can separate immutable artifact storage from desired-revision pointers. Artifacts may be addressed by content hash and verified before activation. Use transactional publication of a manifest if several values must change together. Approval can include code-owner rules and two-person authorization for security-critical fields. For experiments that change traffic assignment, stickiness and assignment version also matter. A rollback of a versioned configuration bundle is not equivalent to rolling back arbitrary external state mutated while that bundle was active.

Check your reasoning

  • Version and authorize configuration with typed schemas and compatible consumption contracts.
  • Use static and semantic preflight checks, including shadow or replay validation where useful.
  • Build meaningful canary cohorts and business-outcome stop conditions.
  • Track desired, downloaded, validated and active revision distinctly for the entire fleet.
  • Rehearse rollback and explicitly handle irreversible side effects and loss of operator control.

Common mistake: Successful downloads from every instance prove that a configuration change was activated and is safe.

Which evidence should govern promotion of a fleet-wide configuration change?

Read the answer explanation

Measure actual activation and production outcomes before progressive promotion. — Download is different from validation and atomic activation. Safe rollout needs cohort-level evidence and recoverable previous artifacts.

Apply it elsewhere

An encryption-key identifier changes in a config bundle but the old key cannot immediately be removed. Explain why a simple version rollback is insufficient and design the overlap window.

Compare your approach

Establish ownership and immutable versions, validate semantic and compatibility constraints, design meaningful promotion cohorts, distinguish desired from active revisions, and provide tested stop and rollback paths for bad changes.

One more constraint

If a config was downloaded by all instances, can the rollout controller declare it fully applied?

Quick revision

Configuration is executable behavior, so deploy it like code. Use typed, approved, immutable bundles with compatibility metadata. Validate syntax, relationships and production semantics. Roll out through cohorts whose observation windows match the workload, measuring application outcomes and per-instance active revision. Separate downloaded from activated state. Stop automatically on meaningful regressions, and roll back to a known-approved artifact, while recognizing that external side effects may require reconciliation.

References