# When Feature Flags Weren't Enough

DevFeed: [When Feature Flags Weren't Enough](<https://devfeed.tech/articles/when-feature-flags-weren-t-enough-23984.md>)

Original publisher: [Read original article](<https://medium.com/mcdonalds-technical-blog/when-feature-flags-werent-enough-91a441e5cabd?source=rss----3bac42476d27---4>)

Author: Global Technology

Published: 2026-06-09T13:33:43Z

Content type: article

Language: en

Sources: [McDonald's Technical Blog - Medium](<https://devfeed.tech/sources/mcdonald-s-technical-blog-medium.md>)

Topics: [configuration](<https://devfeed.tech/topics/configuration.md>), [feature flags](<https://devfeed.tech/topics/feature-flags.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [version-control](<https://devfeed.tech/topics/version-control.md>), [pull-requests](<https://devfeed.tech/topics/pull-requests.md>), [ci](<https://devfeed.tech/topics/ci.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>)

Tags: [backend](<https://devfeed.tech/tags/backend.md>), [ci](<https://devfeed.tech/tags/ci.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [configuration-management](<https://devfeed.tech/tags/configuration-management.md>), [devops](<https://devfeed.tech/tags/devops.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [feature-flags](<https://devfeed.tech/tags/feature-flags.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [software](<https://devfeed.tech/tags/software.md>), [software-architecture](<https://devfeed.tech/tags/software-architecture.md>), [tooling](<https://devfeed.tech/tags/tooling.md>), [version-control](<https://devfeed.tech/tags/version-control.md>)

## AI overview

McDonald's engineers describe replacing a third-party feature-flag platform with a remote configuration system for structured, hierarchical restaurant settings. The system treats configuration like code through version control, pull requests, CI validation, peer review, and auditable live delivery to running backend services without redeployment.

## Source excerpt

We rebuilt remote configuration because tooling must match the problem and working like code with review, validation, and live delivery without redeploys. By: Mikhail Baranov, Software Engineer III, & Erick Lopez, Software Engineer III Quick Bytes: Feature flags worked for tracking changes, but they fell short when we needed richer configuration across thousands of restaurants We rebuilt remote configuration to work like code -- version-controlled, validated in CI, and delivered live to running services without redeploys Teams now manage configuration by exception, ship changes safely in real time, and operate with far more confidence and control Runtime configuration carries real weight in a restaurant technology environment. Thresholds get tuned. Features roll out region by region. One location needs a special rule; another needs a noisy signal dialed down. These aren't hypotheticals -- they're everyday decisions that shape how our backend fleet behaves across thousands of restaurants. For a long time, we managed these decisions through a third-party feature-flag platform. It gave us auditability and a clear record of who changed what. But over time, an uncomfortable truth emerged: the tool wasn't built for the shape of our problem. We didn't need toggles and targeting rules. We needed rich, structured configuration -- hierarchical defaults, per-restaurant overrides, clear environment promotion, and real-time delivery to distributed backend services. Forcing that model into a flags-first product created friction: awkward workarounds, unnecessary cost, and extra operational steps for changes that should have felt routine. We wanted configuration changes to feel as safe and controlled as code changes, while still reaching running services immediately. So, we set out to build exactly that. Treating configuration like a managed product Our solution treats configuration with the same rigor as production code. Structured configuration lives in version control. Changes move