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 — сервис Amazon для управления «переключателями» без изменения кода и перезапуска приложения. Он даёт централизованный способ хранить, управлять и развёртывать фича‑флаги и другие конфигурационные данные.
Как это устроено
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
Подход Flags as Code обеспечивает лучшую типобезопасность и поддержку IDE по сравнению с строковыми фича‑флагами. Это упрощает рефакторинг кода, поиск ссылок на флаги и обнаружение ошибок на этапе компиляции, а не во время выполнения.
Итоги
Фича‑флаги — мощный инструмент для более гибкой и безопасной разработки. Они позволяют:
- Безопасно тестировать новые функции на реальных пользователях
- Быстро реагировать на проблемы
- Проводить эксперименты с интерфейсом и функциональностью
- Управлять поведением приложения без релизов новых версий
Реализация через AWS AppConfig особенно удобна, если вы уже используете AWS. Это позволяет централизованно управлять функциональностью и быстро реагировать на изменения. Для тех, кто не использует AWS, есть множество альтернатив — от open‑source до коммерческих сервисов с продвинутыми возможностями.
Современный подход "Flags as Code" выводит фича‑флаги на новый уровень, делая их более поддерживаемыми, типобезопасными и интегрированными в рабочий процесс разработки. Это снижает ошибки, улучшает опыт разработчиков и упрощает управление флагами по мере роста приложения.
С чего начать
Начните с простой реализации в вашей кодовой базе. По мере освоения концепции можно изучать более сложные системы управления и продвинутые техники, такие как таргетинг пользователей и эксперименты. Главное — начать с малого и постепенно расширять стратегию по мере развития потребностей.