Frontend: от монолита к продуктовым приложениям
В 2016 году публичный сайт был React-монолитом с общим репозиторием, инфраструктурой и релизом. Сначала команда не стала переписывать его целиком: выделила повторяемые блоки, формы и трекинг, сделала общие компоненты и договорилась о контрактах. Новые продуктовые части создавались рядом, а старые постепенно переводились на платформу. Такой путь сохранял поставку бизнес-функций и одновременно проверял будущую архитектуру на реальных пользователях.
По мере роста продуктовые команды получили отдельные приложения, репозитории и ответственность за выпуск. Общие движки стали зависимостями, которые развивала core-команда по модели внутреннего продукта. Микрофронтенды здесь появились не как технология ради технологии, а как совпадение границ кода и ownership. Независимость требовала версионирования, документации, совместимости и понятного пути обновления: без этого общая платформа лишь переносит центральное узкое место в другой репозиторий.
CMS и контент без релиза приложения
Старая CMS была тесно связана с шаблонами и выпуском frontend. Изменение страницы проходило через разработку и общий релиз, поэтому маркетинговые гипотезы ждали инженерного цикла. Новая модель представила страницу как композицию известных блоков с проверяемой конфигурацией. Редакторы смогли собирать и публиковать контент без релиза приложения, а разработчики сосредоточились на развитии блоков, контрактов, безопасности и производительности платформы.
Переход тоже был постепенным: новая система забирала сценарии по одному, пока старая продолжала обслуживать остальные. Важную роль сыграла команда, которая одновременно понимала архитектуру и работала с реальными редакторами и продуктами. Изолированная группа архитекторов могла бы спроектировать чистую, но неудобную систему. Платформа становится полезной только рядом с потребителями, а её roadmap формируется из повторяющихся задач и измеримого сокращения времени публикации.
Персонализация и уроки эволюции
Сначала персонализация строилась на ручных правилах и A/B-тестах: сегмент определял вариант страницы, события связывали показ с заявкой, статистика выбирала победителя. С ростом числа продуктов и одновременных экспериментов понадобилась платформа, способная разрешать конфликты, вести аудит и считать результат. Следующий шаг — предиктор на Vowpal Wabbit, который выбирал вариант по контексту пользователя. ML оказался продолжением надёжного экспериментального контура, а не заменой аналитики.
Главный урок — архитектура и организация меняются вместе. Новые границы приложений потребовали продуктовых владельцев, platform-команды и правил совместимости; самостоятельные редакторы — новых контрактов и контроля; персонализация — общей data-инфраструктуры. Большую систему нельзя улучшить одной революцией: нужно сохранять бизнес-поток, строить новую возможность рядом, переводить потребителей и удалять старое. Каждый этап должен давать пользу до завершения всей целевой картины.
Что стоит унести с собой
- 01Эволюционная миграция сохраняет продуктовую поставку: новое решение сначала доказывает ценность рядом со старым.
- 02Микрофронтенды полезны, когда границы приложений совпадают с ownership и независимым релизом команд.
- 03Безрелизная CMS отделяет скорость контентных гипотез от инженерного цикла, сохраняя проверяемые контракты платформы.
- 04ML-персонализация имеет смысл поверх зрелых событий, экспериментов и аналитики, а не вместо них.