Раньше релиз почти всегда выглядел так: код вмержен, выкатили в production, все увидели новую функцию сразу. Если что-то ломалось, команда нервно откатывала релиз, выключала сервис или срочно чинила production. В 2026 такой подход выглядит слишком грубым для большинства продуктовых команд.
Поэтому все чаще используют feature flags, или фичефлаги. Они позволяют выпускать код в production, но включать новую функцию постепенно: для части пользователей, для одной страны, для конкретной роли, только внутри компании или вообще в скрытом режиме.
В этой статье: что такое feature flags простыми словами, как выкатывать функции поэтапно, как делать kill switch, как тестировать флаги и почему хороший progressive rollout снижает панику вокруг релизов.
Суть feature flags
Что такое feature flag простыми словами
Feature flag — это переключатель, который позволяет включать или выключать функциональность без нового деплоя.
Код уже лежит в production, но видимость и доступность фичи контролируются отдельным условием.
То есть команда может выкатить код заранее, а саму функцию открыть позже и поэтапно.
Чем feature flag отличается от обычного релиза
| Подход | Что происходит |
|---|---|
| Обычный релиз | Код выкатили — функция доступна всем сразу |
| Релиз с feature flag | Код выкатили, но доступ к функции управляется отдельно |
Это разделяет два события: доставка кода и открытие функциональности. Именно в этом главная ценность feature flags.
Зачем команде нужны фичефлаги
включать функцию не для всех сразу, а постепенно;
проверять новые сценарии на небольшом проценте пользователей;
делать внутренний запуск только для команды или beta-группы;
быстро выключать проблемную функцию без полного отката релиза;
разделять большой запуск на несколько безопасных шагов.
Простой вывод: feature flags не ускоряют код сами по себе. Они уменьшают риск релизного шага и делают rollout управляемым.
Виды флагов и сценарии rollout
Какие виды feature flags бывают
| Тип | Зачем нужен |
|---|---|
| Release flag | Постепенно открыть новую фичу после выкладки кода |
| Experiment flag | Провести A/B-тест или сравнить варианты поведения |
| Ops flag | Быстро выключить опасный или тяжелый участок без нового релиза |
| Permission flag | Включить функцию только для нужной роли, команды или тарифа |
Как выглядит поэтапная выкладка с feature flags
Код функции выкатывается в production в скрытом режиме.
Флаг включается для команды, QA или внутренних пользователей.
Потом функция открывается для 1-5% аудитории.
Если всё стабильно, процент постепенно растет.
После подтверждения метрик и стабильности флаг раскрывается для всех.
Типичный сценарий: новая оплата сначала включается только для сотрудников, потом для 2% пользователей, затем для одного региона, и только потом для всего трафика.
Где живет логика флага
Feature flag может жить в разных слоях:
на фронтенде — чтобы скрывать UI и сценарий;
на бэкенде — чтобы контролировать бизнес-логику и API;
в gateway или edge-слое — чтобы рулить rollout по сегментам и регионам;
в конфигурации jobs и consumers — чтобы управлять фоновыми процессами.
Чем критичнее влияние фичи на данные и бизнес-логику, тем важнее, чтобы контроль был не только на UI, но и на серверной стороне.
Управление риском и инцидентами
Как не превратить feature flags в хаос
Без правил флаги быстро становятся проблемой:
никто не понимает, какие флаги еще актуальны;
условия в коде разрастаются;
часть сценариев тестируется только в одном состоянии;
старые флаги висят месяцами и усложняют систему.
Минимальные правила
у каждого флага есть владелец и цель;
понятно, когда флаг удалить;
название флага отражает бизнес-смысл, а не случайную реализацию;
состояния флага включены в тестовый план и мониторинг.
Как feature flags помогают при инцидентах
Хороший ops-flag часто работает как быстрый kill switch: команда может выключить проблемную функцию без полного rollback.
| Ситуация | Что помогает |
|---|---|
| Новая фича грузит систему | Быстро отключить feature flag |
| Функция ломает часть пользователей | Ограничить rollout или вернуть прошлый сегмент |
| Не готовы внешние зависимости | Оставить код в проде, но не открывать функцию всем |
Тестирование и запуск
Что важно учитывать при тестировании фичефлагов
сценарий с флагом включен;
сценарий с флагом выключен;
переходное состояние во время rollout;
разные сегменты пользователей, роли и платформы;
корректность логов, аналитики и метрик в обоих состояниях.
Частая ошибка: проверить фичу только когда флаг включен и забыть, что код со старым поведением тоже продолжает жить и должен быть стабилен.
Когда feature flag лучше, а когда лучше не усложнять систему
| Ситуация | Стоит ли использовать флаг |
|---|---|
| Большая продуктовая функция с риском для денег и конверсии | Да |
| Инфраструктурная или релизно-опасная доработка | Да, часто особенно полезно |
| Очень маленькая правка текста или стиля без риска | Часто нет |
| Краткоживущий эксперимент | Да, но с жестким сроком удаления |
Технический долг и cleanup
Флаг полезен, пока он временный и управляемый. Когда флагов много и они не убираются, начинается долг:
ветвление логики растет;
тестов нужно больше;
новым разработчикам труднее понимать код;
можно случайно активировать старое поведение;
сложнее рефакторить и удалять legacy-сценарии.
Практика rollout
У флага есть владелец и понятная бизнес-цель.
Известен план rollout: кому включаем и в каком порядке.
Есть stop-метрики: ошибки, latency, деньги, конверсия.
Есть kill switch или быстрый способ отключения.
Понятно, когда флаг должен быть удален из кода.
Тесты покрывают оба состояния флага.
QA, разработка и продукт одинаково понимают сценарий rollout.
Мини-шаблон описания feature flag
Флаг: ...
Цель: ...
Кому включаем сначала: ...
Метрики контроля: ...
Кто владелец: ...
Когда удалить: ...Какие вопросы стоит задать перед созданием нового флага
нужен ли действительно поэтапный rollout или достаточно обычного релиза;
что произойдет с данными, если флаг быстро выключить;
какие сегменты пользователей увидят разное поведение;
кто будет отвечать за cleanup после полного включения.
Как выглядит безопасный rollout по шагам
| Этап | Что обычно делаем |
|---|---|
| Внутренний запуск | Включаем флаг только для команды и QA |
| Малый процент | Открываем 1-5% трафика и смотрим метрики |
| Ограниченный сегмент | Проверяем один регион, платформу или роль |
| Полный rollout | Открываем 100% только после подтверждения стабильности |