Как управлять фичами на фронтенде: от хардкода до тоглов
Вчера стоял в Дикси около зависшего терминала самообслуживания. Пять минут. Просто стоял и смотрел, как касса перезагружается.
История простая: интернет тормозил, карту лояльности решил добавить по номеру. Касса зависла. Кнопки «Отмена» нет. Кассирша развела руками: «Эту функцию нам запретили использовать, но отключить не можем». Перезагрузка. Честный знак в чеке. Я — с телефоном в руках, фотографирую этот цирк.
И вот пока стоял, думал: а ведь ноги у этой проблемы растут из двух мест — непродуманного UI и отсутствия механизмов частичной раскатки. Сейчас объясню.
Три способа управлять доступностью функций для пользователя
1.
Хардкод Прописать состояние функции is_enabled = true явно в коде.
Самый жёсткий вариант. Функция либо есть в коде, либо её нет. Хотите выключить? Правьте код, деплойте заново. Это как вкрутить лампочку без выключателя — работает, но если что-то пошло не так, придётся лезть в проводку.
Когда годится: совсем базовые вещи, которые точно не будут меняться (например, кнопка «Войти»).
2. Холодные фичетоглы (server-side)Настройки хранятся на сервере. При загрузке страницы сервер решает: показывать фичу или нет. Изменили настройку — пользователь увидит изменения только после перезагрузки страницы. Или при сборке собирать информацию из .env, та же история, только новая сборка.
Когда годится: для фич, которые не нужно включать/выключать моментально (новый дизайн карточки товара, экспериментальный раздел).
3. Горячие фичетоглы (client-side)Настройки прилетают с сервера в реальном времени или подтягиваются через API. Можно включить/выключить фичу прямо сейчас — без перезагрузки, без деплоя. Это как пульт от телевизора: нажал — переключил.
Когда годится: для критичных фич, которые нужно быстро откатить при проблемах (оплата, новый алгоритм рекомендаций, A/B-тесты).
Что пошло не так в Дикси?Проблема #1: UI без права на ошибкуКнопки отмены нет. Видимо, сценарий «пользователь передумал» просто не предусмотрели. Итог: если что-то пошло не так — только перезагрузка. А это 5 минут простоя кассы, очередь, нервы, кассирша вообще начала причитать, что ее уволят из-за этих терминалов...
Проблема #2: нет механизма частичной раскаткиФункция добавления карты по номеру есть в коде. Но для конкретной точки её «запретили на словах». Система об этом не знает. Нет тогла, чтобы отключить фичу для одного магазина или региона.
Если бы был горячий фичетогл — админ мог бы за 30 секунд выключить проблемную функцию для этого терминала. Без перезагрузки, без апдейта кода, без очередей.
А какие выводы?Хардкод — для базы. Холодные тоглы — для экспериментов. Горячие тоглы — для всего, что может сломаться или требует гибкости.
И, пожалуйста, добавляйте кнопку «Отмена». Всегда. Иначе будете стоять в очереди, пока касса перезагружается, а кто-то будет фотографировать этот момент для поста в канале.
Дополнительные
видео в комментариях)analyst.exe |
чат