Skip to content

Feature Flags

Лотти хочет, чтобы продукт мог “переключать” поведение без нового релиза и без ручных костылей — флаги становятся базовой ручкой управления. Платформа должна позволять продукту получать значения параметров поведения (feature flags) по ключу в момент запроса. Это нужно, чтобы:

  • безопасно включать/выключать функциональность,
  • запускать A/B‑эксперименты и постепенно раскатывать изменения,
  • иметь предсказуемое поведение при отсутствии применимого эксперимента.

В истории: сначала команда заводит простой флаг для новой фичи (например, новый блок рекомендаций). Пока флаг выключен — всё как раньше. Когда включили на 1% — можно безопасно проверить, что ничего не взорвалось. Feature flag — это:

  • ключ: уникальный идентификатор флага, который знает продукт (код/конфиг);
  • значение по умолчанию: значение, используемое, если эксперимент не применяется;
  • тип значения: система должна поддерживать типизированные значения (как минимум string/number/bool).

Флаг — это “точка управления” в продукте: продукт запрашивает значение по ключу и использует полученное значение в логике.

1.3 Правила получения значения флага

Section titled “1.3 Правила получения значения флага”

В истории: продакт бесится, если у одного и того же пользователя “то так, то так”. Поэтому важно, чтобы платформа давала детерминированный ответ: одному пользователю — один вариант (если специально не меняли условия). При запросе значения флага для конкретного пользователя:

  1. Если нет активного эксперимента, влияющего на этот флаг — возвращается «значение по умолчанию».

  2. Если есть активный эксперимент на этом флаге, но он не применился к пользователю (например, пользователь не попал в аудиторию/сегмент) — возвращается «значение по умолчанию».

  3. Если активный эксперимент применился к пользователю — возвращается значение выбранного для пользователя варианта.

В истории: Лотти не хочет править конфиги в проде руками. Флаг должен жить как нормальная сущность: создал → включил на сегмент → посмотрел → откатил, если плохо. Платформа должна предоставлять возможность:

  • создавать новые флаги (с ключом, типом значения и дефолтным значением),
  • просматривать список и детали флагов, при желании — дополнительно хранить описание/владельца/метаданные (необязательно),
  • обновлять только «значение по умолчанию» существующего флага.

Пример для связи с one-pager: флаг button_color может иметь значения green по умолчанию и экспериментальные варианты blue/red.