Что такое фиче-флаг — и почему код в проде ещё не значит «включено»

Выложить код в прод и показать фичу пользователям — два разных события. Новичок думает, что это одно: залил — значит включилось. На деле между ними может быть неделя.
Секрет — маленький выключатель в коде, фиче-флаг. Код уже в проде, лежит и ждёт. А увидят его пользователи или нет — решает не новый релиз, а щелчок этого выключателя.
Что такое фиче-флаг
Фиче-флаг (feature flag, ещё «фича-тумблер») — это условие в коде: «показывать новую штуку или нет». По сути одна проверка if.
if (флаг «новая-лента» включён) {
показать новую ленту
} else {
показать старую
}
Значение флага живёт не в коде, а снаружи — в конфиге, базе или спец-сервисе. Поэтому его можно переключить, не трогая код и не выкатывая новую версию.
Зачем разделять «выкатить» и «показать»
Пока это одно событие, каждый релиз — прыжок с завязанными глазами. Залил код — и он сразу у всех. Баг вылез — откатывай весь релиз.
Флаг разрывает связку. Ты спокойно выкатываешь код в прод выключенным. Он там, задеплоен, прошёл проверки — но пользователи видят старое. Включаешь, когда сам готов: не в два часа ночи после мержа, а утром на трезвую голову.
Как это работает: одна проверка
Механика примитивна, и в этом сила.
- Оборачиваешь новую фичу в
if (флаг включён). - Значение флага держишь снаружи кода — в файле-конфиге или в базе.
- Меняешь значение — приложение читает его и ведёт себя иначе. Кода не касался.
Это не отдельная технология. Флаг можно сделать из обычной переменной окружения на старте, а позже — из строки в базе, которую меняешь на лету.
Что это даёт на практике
Три приёма, ради которых флаги и придумали.
- Постепенный раскат (canary). Включаешь фичу сначала себе, потом 5% пользователей, потом всем. Что-то не так — откатил на выключателе, а не на релизе.
- Аварийный рубильник (kill switch). Фича начала ломать прод — гасишь её одним щелчком, за секунды, без пересборки и деплоя.
- A/B-проверка. Половине показал вариант A, половине B — смотришь, что заходит. Один код, два поведения.
Бонус для одиночки: можно вливать в главную ветку недоделанную фичу — выключенной. Она не мешает, потому что скрыта за флагом. Это спасает от долгоживущих веток, которые потом больно сливать.
Одна ловушка: флаги накапливаются
У флагов есть тёмная сторона. Каждый — это развилка if/else, две дороги в коде. Три флага — восемь возможных состояний. Забыл убрать десяток старых — и уже не понимаешь, в какой ветке живёшь.
Правило простое: флаг временный. Фича раскатана на всех и прижилась — удали флаг и мёртвую ветку. Флаг — строительные леса, а не часть здания.
Фиче-флаг и переменная окружения — это одно и то же?
Не совсем. Переменная окружения — это способ хранить значение снаружи кода. Фиче-флаг — это идея включать и выключать фичу без релиза. Простой флаг часто делают именно из переменной окружения, но флаг может жить и в базе, и меняться на лету — а переменную обычно задают один раз при старте.
Нужен ли фиче-флаг, если я один?
Один хороший флаг — да, стоит. Даже соло полезно уметь выкатить MVP с выключенной сырой частью и включить её, когда дошли руки. Только не строй систему из двадцати флагов на пет-проекте — это сложность на ровном месте. Один-два выключателя на реально рискованные куски.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





