Feature Flags (Feature Toggles) простыми словами
Безопасные релизы, быстрые откаты, A/B‑тесты и гибкая конфигурация — без перекомпиляций и выката кода
Что такое фича‑флаги
Фича‑флаги (Feature Toggles) — это «переключатели» в коде, которые позволяют включать или выключать определённые функции без новой сборки и релиза. По сути это условные конструкции, определяющие, выполнять ли конкретную ветку кода.
В простейшем виде это обычные условия. Но вместе с системой управления флагами они превращаются в мощный инструмент поставки, тестирования и эксплуатации. Флаги могут жить в конфиге, а могут управляться распределённой системой с UI для множества приложений и окружений.
Не только вкл/выкл
Современные системы поддерживают таргетинг сегментов, постепенный роллаут, правила на основе атрибутов пользователя, времени суток, географии и т.д.
Зачем они нужны
Безопасный релиз
Включайте новую функцию только части аудитории (например, 10%), проверяйте метрики и ошибки — и лишь затем расширяйте охват.
Мгновенный откат
Что-то пошло не так? Просто «выключите» флаг — без хотфиксов и нового выката.
A/B‑тесты
Показывайте разным пользователям разные варианты интерфейса и измеряйте, какой работает лучше.
Гибкая конфигурация
Меняйте поведение приложения без релизов — под отклики пользователей и бизнес‑задачи.
Непрерывная поставка
Код незавершённых фич можно мёржить в main, пряча их за флагами до готовности. Деплой отделяется от включения функциональности.
Как это работает: практический пример
Допустим, вы делаете новый дашборд. Вместо того чтобы сразу показывать его всем, управляйте раскаткой через фичи‑флаги.
Шаги внедрения
- 1Поддерживайте в коде старую и новую версии
- 2Добавьте условие: «если флаг
new_dashboard
включён — показываем новую версию, иначе — старую» - 3Оставьте флаг выключенным по умолчанию
- 4Для прогона включите флаг лишь для 5% пользователей
- 5Постепенно увеличивайте долю, если всё стабильно
- 6Если обнаружились проблемы — просто выключите флаг и вернётесь к стабильной версии
Пример кода
1// Конфигурация фича‑флагов
2const featureFlags = {
3 newDashboard: false, // Сначала выключен
4 betaFeatures: false,
5 darkMode: true
6};
7
8// В коде приложения
9function renderDashboard() {
10 if (featureFlags.newDashboard) {
11 return renderNewDashboard();
12 } else {
13 return renderOldDashboard();
14 }
15}
16
17// Включение флага позже (например, из панели управления)
18function enableNewDashboard() {
19 featureFlags.newDashboard = true;
20 // Перерисовать дашборд с новой версией
21 updateUI();
22}
Интерактивная демо‑зона
Пощёлкайте переключатели ниже и посмотрите, как приложение реагирует в реальном времени.
Feature Flag Controls
Application Preview
This is a classic design with light mode.
How This Demo Works
This interactive demo shows how feature flags can control different aspects of an application:
- New Design - Changes the header style and button colors
- Dark Mode - Toggles between light and dark color schemes
- Beta Features - Shows additional UI elements and functionality
- Animations - Enables subtle animations on interactive elements
In a real application, these flags would typically be controlled from a central management system and could be targeted to specific users or user segments.
Как это делается в продакшене
Обычно значения флагов не хранят в коде, а получают из центральной системы управления. Это позволяет обновлять конфигурацию удалённо без релизов.
AWS AppConfig для управления флагами
AWS AppConfig — сервис для централизованного хранения и доставки конфигураций, в том числе фича‑флагов, без перезапуска приложений и выката кода.
Как это устроено
1. Создание конфигурации
В AWS AppConfig вы создаёте JSON с флагами:
1{
2 "features": {
3 "new_dashboard": true,
4 "beta_mode": false
5 }
6}
2. Интеграция в приложение
Приложение периодически запрашивает эти настройки и применяет их:
1# Проверяем, включена ли новая версия дашборда
2if feature_flags["features"]["new_dashboard"]:
3 # Показываем новую
4 show_new_dashboard()
5else:
6 # Показываем старую
7 show_old_dashboard()
3. Управление флагами
Чтобы включить или выключить фичу, просто поменяйте значение в консоли AWS — без релиза.
Плюсы AWS AppConfig
Удобный интерфейс
Управление флагами через AWS Console
Поштучный/постепенный раскат
Постепенно увеличивайте охват пользователей
Авто‑роллбэк
Возврат к предыдущей конфигурации при проблемах
Мониторинг и аудит
Все изменения логируются для соответствия требованиям
На что обратить внимание
Продумайте кеширование (чтобы не долбить API), права IAM и обработку ошибок при недоступности сервиса конфигурации. Решите, как часто приложение проверяет обновления.
Альтернативы AWS AppConfig
Если вы не в AWS или нужны другие возможности — есть достойные варианты:
LaunchDarkly
Коммерческий сервис с широкими возможностями таргетинга и экспериментов. SDK для множества платформ.
Unleash
Open‑source решение, которое можно развернуть у себя. Есть UI и API для интеграции.
Flagsmith
Облако и self‑hosted вариант. Таргетинг, A/B‑тесты, удалённые конфиги.
Firebase Remote Config
Решение от Google для флагов и удалённой конфигурации — особенно удобно на мобиле.
ConfigCat
Простой и приятный интерфейс. Фичи‑флаги, таргетинг и A/B‑тестирование с SDK для разных платформ.
Split.io
Платформа доставки фич с развитым таргетингом и аналитикой.
Как выбрать
Оцените размер команды, требования, бюджет и необходимость продвинутого таргетинга/экспериментов/аналитики. Для простых кейсов подойдут лёгкие решения, для сложных сценариев — enterprise‑уровень.
Современный подход: Flags as Code
Всё чаще флаги оформляют как кодовые сущности — типобезопасно и поддерживаемо. Вместо строковых ключей у каждого флага есть функция в кодовой базе.
Пример реализации
1import { flag } from 'flags/next';
2
3export const newDashboardFlag = flag({
4 key: 'new-dashboard',
5 defaultValue: false,
6 decide() {
7 return false;
8 },
9});
10
11// Использование
12const showNewDashboard = await newDashboardFlag();
Преимущества подхода
Единообразные вызовы
Вызываете функцию, а не оперируете строковыми ключами
Значения по умолчанию рядом с флагом
Поведение предсказуемо, даже если флаг не вычислился
Централизованный контекст
Контекст флага задаётся при объявлении, а не в каждом месте вызова
Меньше вендор‑локина
Проще поменять провайдера фич‑флагов
Типобезопасность и поддержка IDE
Легче рефакторить, искать использования и ловить ошибки на этапе сборки.
Итоги
Фича‑флаги — мощный инструмент для гибкой и безопасной разработки. С их помощью вы можете:
- Тестировать новые функции на реальных пользователях
- Быстро реагировать на проблемы
- Проводить эксперименты с UI и логикой
- Управлять поведением приложения без релизов
Если вы уже в экосистеме AWS, AppConfig — удобный способ централизованно управлять функциональностью и быстро реагировать на изменения. Если нет — выбирайте из множества open‑source и коммерческих решений.
Подход «Flags as Code» выводит флаги на новый уровень: они легче поддерживаются, становятся типобезопасными и естественно встраиваются в процесс разработки.
С чего начать
Начните с простого: добавьте пару флагов в кодовую базу. Со временем подключите систему управления и продвинутые техники — сегментацию пользователей, экспериментирование и аналитику.