Введение
Feature Flag (Feature Toggle, Feature Switch) – техника разработки ПО, при которой код новой функциональности обёртывается в условный блок, управляемый конфигурационным флагом. Флаг хранится во внешнем хранилище (БД, конфиг-сервис) и может быть изменён без перезапуска или деплоя приложения.
Простейший вид: if (featureFlags.isEnabled("new-checkout")) { ... }. В production-системе значение флага вычисляется на лету – с учётом целевой аудитории, окружения и процента пользователей.
История и контекст
Практика условной компиляции и конфигурационных переключателей существовала давно, но Feature Flag как дисциплина оформилась с распространением непрерывной доставки (CI/CD) и Trunk-Based Development. LaunchDarkly (основан в 2014 году) стал ведущей SaaS-платформой управления флагами. Термин «Feature Toggle» популяризировал Мартин Фаулер. Стандарт OpenFeature (CNCF, 2022) стремится унифицировать API управления флагами.
Как это работает
Компоненты системы управления флагами:
- Feature Flag Store – хранилище состояния флагов (LaunchDarkly, Redis, БД);
- SDK – библиотека в приложении, обращающаяся к store для получения значения флага;
- Targeting Rules – правила определения значения флага для пользователя (процент, атрибуты, среда).
Типы флагов:
- Release toggle – управление выпуском нового кода (временный, удаляется после 100% rollout);
- Ops toggle – операционный переключатель: kill switch для аварийного отключения;
- Experiment toggle – A/B-тест: разные варианты для разных сегментов;
- Permission toggle – платные/beta-функции для отдельных пользователей.
LaunchDarkly гарантирует доставку изменений флага всем SDK-клиентам за 200 мс через CDN и streaming-соединение.
Где применяется
- Поэтапный выпуск (progressive delivery) – rollout на 1%, затем 10%, затем 100%;
- Canary releases – новая версия для небольшой группы пользователей;
- Dark launch – код в production, но недоступен пользователям до готовности;
- A/B-тестирование UI и алгоритмов;
- Kill switch – мгновенное отключение проблемного кода без hotfix-деплоя.
Преимущества и ограничения
Преимущества: разделение деплоя и выпуска (deploy != release); снижение риска релизов; возможность тестировать в production; мгновенный откат без нового деплоя; нет долгоживущих feature-веток.
Ограничения: накопление неудалённых флагов – «feature flag debt»; усложнение кода условными ветками; сложность тестирования всех комбинаций флагов; необходимость мониторинга и управления жизненным циклом флагов.
Связь с другими понятиями
Feature Flag – ключевой инструмент CI/CD и Trunk-Based Development: позволяет всем разработчикам работать в одной ветке, скрывая незаконченные фичи за флагами. Serverless-функции удобно управляются через флаги без переразвёртывания. Техдолг возникает при накоплении устаревших флагов. Паттерн тесно связан с практиками DevOps и практикой экспериментирования в production.