Короткий ответ
Feature flag — это условие в коде (часто управляемое внешней конфигурацией), которое включает или выключает часть функциональности без нового деплоя; это позволяет выкатить код в прод «выключенным» и включить его позже отдельной операцией, не связанной с релизом.
Как это работает подробнее
вместо того чтобы напрямую вызывать новый код, приложение проверяет значение флага (из конфиг-файла, базы данных или специализированного сервиса управления флагами) и в зависимости от этого выполняет старую или новую ветку логики.
Пример кода
example.py
if feature_flags.is_enabled("new_checkout_flow", user=current_user):
return render_new_checkout()
else:
return render_old_checkout()Что использовать на практике
- На практике. флаги позволяют выкатывать код чаще и меньшими порциями (даже недоделанные фичи, скрытые за флагом), включать функциональность постепенно для части пользователей и мгновенно выключать проблемную функцию без отката всего деплоя. Это снижает риск и ускоряет deployment frequency, но требует аккуратного управления жизненным циклом флагов.
- Пример. Ожидаемое поведение: код с новой функциональностью уже находится в production-образе, но реально виден только тем пользователям, для которых флаг `new_checkout_flow` включён в системе управления флагами.
Подводные камни
- Частые ошибки. путают feature flag с обычной переменной окружения для конфигурации инфраструктуры (URL базы данных и т.п.) — это разные по смыслу вещи; забывают удалять флаги после полного раскатывания функциональности, из-за чего кодовая база обрастает мёртвыми условиями.