Что такое фича‑флаги

Фича‑флаги (Feature Toggles) — это «переключатели» в коде, которые позволяют включать или выключать определённые функции без новой сборки и релиза. По сути это условные конструкции, определяющие, выполнять ли конкретную ветку кода.

В простейшем виде это обычные условия. Но вместе с системой управления флагами они превращаются в мощный инструмент поставки, тестирования и эксплуатации. Флаги могут жить в конфиге, а могут управляться распределённой системой с UI для множества приложений и окружений.

Не только вкл/выкл

Современные системы поддерживают таргетинг сегментов, постепенный роллаут, правила на основе атрибутов пользователя, времени суток, географии и т.д.

Зачем они нужны

Безопасный релиз

Включайте новую функцию только части аудитории (например, 10%), проверяйте метрики и ошибки — и лишь затем расширяйте охват.

Мгновенный откат

Что-то пошло не так? Просто «выключите» флаг — без хотфиксов и нового выката.

A/B‑тесты

Показывайте разным пользователям разные варианты интерфейса и измеряйте, какой работает лучше.

Гибкая конфигурация

Меняйте поведение приложения без релизов — под отклики пользователей и бизнес‑задачи.

Непрерывная поставка

Код незавершённых фич можно мёржить в main, пряча их за флагами до готовности. Деплой отделяется от включения функциональности.

Как это работает: практический пример

Допустим, вы делаете новый дашборд. Вместо того чтобы сразу показывать его всем, управляйте раскаткой через фичи‑флаги.

Шаги внедрения

  1. 1
    Поддерживайте в коде старую и новую версии
  2. 2
    Добавьте условие: «если флаг new_dashboard включён — показываем новую версию, иначе — старую»
  3. 3
    Оставьте флаг выключенным по умолчанию
  4. 4
    Для прогона включите флаг лишь для 5% пользователей
  5. 5
    Постепенно увеличивайте долю, если всё стабильно
  6. 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

Demo Application
Feature flags in action

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» выводит флаги на новый уровень: они легче поддерживаются, становятся типобезопасными и естественно встраиваются в процесс разработки.

С чего начать

Начните с простого: добавьте пару флагов в кодовую базу. Со временем подключите систему управления и продвинутые техники — сегментацию пользователей, экспериментирование и аналитику.

Нужна помощь с фича-флагами?
Помогу внедрить фича-флаги в ваши приложения, настроить систему управления и разработать стратегию безопасных релизов и экспериментов. Давайте обсудим, как применить это под ваши задачи.