Gymterview
middle

Что такое Feature Flags (флаги функциональности)?

Feature Flags (Feature Toggles) – техника, позволяющая включать и выключать функциональность без повторного развёртывания приложения. Код новой функции присутствует в production, но активируется по условию. Это как выключатель света в комнате – провода проложены, лампа на месте, но свет горит только когда щёлкнешь переключатель.

Пример
@Service
public class PaymentService {

    private final FeatureFlagService featureFlags;

    public PaymentResult processPayment(PaymentRequest request) {
        if (featureFlags.isEnabled("new-fraud-check")) {
            // Новая логика проверки на мошенничество
            fraudCheckV2.check(request);
        } else {
            // Старая логика
            fraudCheckV1.check(request);
        }
        return executePayment(request);
    }
}

Типы Feature Flags

Тип Цель Время жизни Пример
Release Toggle Скрытие незавершённой функциональности Короткое (до релиза) Trunk-based development: код в main, но фича выключена
Experiment Toggle A/B-тестирование Среднее Часть пользователей видит вариант A, часть – вариант B
Ops Toggle Оперативное управление Длительное Отключение тяжёлой функции при деградации производительности
Permission Toggle Доступ по группам Длительное Функциональность только для beta-тестеров или VIP-клиентов

Инструменты

  • Togglz – Java-библиотека для Feature Flags.
  • Unleash – open-source сервер Feature Flags с SDKами для разных языков.
  • LaunchDarkly – облачный SaaS с расширенной аналитикой.
  • Самописное решение на Spring + БД/Redis.

Лучшие практики

  • Удалять флаги после полного включения функции. Иначе код засоряется ветвлениями, и через полгода никто не знает, какие флаги ещё актуальны.
  • Логировать состояние флагов для отладки – при расследовании инцидента важно знать, какой путь выполнялся.
  • Тестировать обе ветки (включено и выключено) в автоматических тестах.
  • Вести реестр активных флагов с указанием владельца и плановой даты удаления.

Итог

Feature Flags критичны при постепенном раскатывании новой функциональности: можно включить фичу для 1% пользователей, убедиться в стабильности, и постепенно увеличить до 100%. Если что-то пошло не так – мгновенный откат через выключение флага, без необходимости деплоя.

На собеседовании: Интервьюер хочет услышать типы флагов и понимание их жизненного цикла. Частая ошибка – не упоминать необходимость удаления флагов после полного включения, что приводит к техническому долгу.