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

- 🔥 7
- ❤ 3
- 👏 2