Legacy и миграции

5 мин чтения

Feature Flags: почему новую функцию не обязательно включать всем сразу

Код можно уже доставить в продукт, но функцию оставить выключенной. Feature Flags разделяют технический релиз и бизнес-запуск — и дают больше контроля над риском изменений.

Обычный релиз часто выглядит бинарно: новая функция либо уже в продакшене и доступна всем, либо её там нет.

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

Feature Flag добавляет переключатель: код уже может находиться в системе, но доступ к функции определяется отдельно.

Какую проблему мы решаем

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

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

Это делает запуск более управляемым и уменьшает размер ставки в каждом отдельном изменении.

Что получает бизнес

Главная выгода — меньше риска при запуске изменений.

Вместо сценария «включили всем и надеемся» компания может постепенно расширять аудиторию и смотреть на реальные показатели, обращения и ошибки.

Вторая выгода — бизнес-момент запуска можно отделить от технического релиза. Команда заранее доставляет код, а функция включается тогда, когда готовы маркетинг, поддержка или партнёры.

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

Что получает команда

Команда получает более безопасный способ интегрировать большие изменения частями и раньше доставлять код в рабочую среду.

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

Но каждое условие создаёт ещё один вариант поведения системы. Если флаги не удалять, количество комбинаций быстро становится трудно контролировать.

Что получает клиент

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

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

Чем мы за это платим

Цена — временная сложность, которая очень легко становится постоянной.

Для каждого флага нужен владелец, понятная цель и дата удаления. Иначе через год никто не понимает, почему условие ещё существует и можно ли его удалить.

Флаги также не заменяют нормальный rollback и тестирование. Они уменьшают радиус ошибки, но не делают плохой код безопасным автоматически.

Когда feature flags не нужны

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

Не каждую кнопку стоит превращать в конфигурацию. Флаг оправдан, когда действительно нужно независимо управлять моментом включения или аудиторией.

Что стоит спросить перед решением

В итоге

Feature Flags превращают релиз из одного большого переключателя в управляемый процесс.

Для бизнеса ценность в том, что новую функцию можно выпускать маленькими ставками. Цена — необходимость потом убрать временные переключатели, пока они сами не стали частью legacy.