В процессе работы над
PersMarket регулярно появляются новые возможности, которые
должны быть видны не сразу или не всем.
Для таких целей придумали специальный подход -
Feature flags (или
feature toggles). Я уже упоминал его ранее, когда
писал про минимизацию рисков и даунтайма при деплое. Заключается подход в том, чтобы была возможность включать, выключать или менять поведение отдельных функций приложения в реальном времени без повторного деплоя.
То есть код и настройки фичи выкатываются очередным релизом, но где-то в базе/конфигах есть переключатель/флаг, по умолчанию выключенный, от состояния которого зависит, работает ли эта функция. И когда приходит момент, флаг просто включают, и пользователи сразу видят новые ништяки.
Например, функция оплаты актуальна только после всех согласований с платежным провайдером и обновления юридических документов, хотя код уже должен существовать, чтобы протестировать процессы.
Кстати, имея опыт работы со Stripe, подключал Робокассу. После современных API-управляемых возможностей Stripe Робокасса выглядит, как что-то из нулевых. В Stripe можно построить полноценный тестовый контур, с автотестами, с подписками, платежами, рефандами и т.д. В Робокассе можно сделать только тестовый разовый платеж без истории. То есть узнать его статус позже нельзя, он не хранится. А возвраты и рекуррентные платежи вообще не поддерживают тестирование. Надо будет попробовать других провайдеров еще для сравнения.
Еще сценарии:
▪️Если в функции есть критичный баг, ее можно отключить мгновенно без передеплоя
▪️Можно сделать канареечный релиз - включать функцию сначала малой аудитории, потом больше и больше
▪️Можно проводить A/B-тестирование
▪️Можно тестировать функцию прямо из мастер-ветки (особенно в trunk-based разработке), не включая ее на проде
Вот и я себе сделал в админке сервиса такой пункт управления, чтобы включать фичи по мере готовности к ним платформы.
А оказывается, есть и готовые решения:
Split,
Flagsmith,
LaunchDarkly,
GrowthBook,
Unleash. А для PHP -
Flagception.
Конечно, не всё коту масленица, есть и минусы.
Во-первых, появляются условия - сценарии для включенной функции и для выключенной, это усложнение.
Во-вторых, если необходимость управления фичей отпадает, появляется технический долг - условия и feature flags надо удалять, а до этого обычно руки не доходят.
Короче, знайте меру.
#process