July 23

Как выживать с мультибрендовой дизайн‑системой

Дизайн-система: начало

Дизайн-системы — это непросто, и в больших компаниях они могут превратиться в семь кругов ада и оставить после себя вьетнамские флешбеки. Особенно если других устоявшихся систем в компании нет и всё приходится делать с нуля. Нужно постоянно балансировать: скорость и качество, гибкость и консистентность, «как в коде» и «как в дизайне».

Тем не менее, дизайн-система должна помочь вашей команде. Дизайнеры будут играться не пером и фреймами, а настройками в правой панели. Разработчики не будут писать код, а будут писать код из компонентов. Все части вашего продукта будут похожи друг на друга. Это ли не мечта?

Это мечта. Мечты должны сбываться, так что впёред: от первой переменной до десятков компонентов, сотен итераций и тысяч свойств. Допустим, что самое сложное позади. Дизайн-система собрана в фигме и в коде. Разработчики начали быстрее программировать, для дизайнеров она не стала ночным кошмаром, а вы её поддерживаете, любите и думаете о ней по ночам.

Если дизайн-система оказалась хороша, а в компании есть другие продукты и команды, они точно захотят попробовать ваши компоненты на вкус. Сначала нужно порадоваться и погордиться собой, пока не придёт осознание: всё стало сложнее.

Помогите

Обращений за помощью стало в пять раз больше. Программисты жалуются, что дизайнеры рисуют что хотят. Дизайнеры жалуются, что не могут нарисовать то, что хотят. К вам начинают приходить продакты. Разработчик, когда-то в соло делавший дизайн-систему вошёл в ступор и не вышел. Брендам хочется, чтобы компоненты выглядели по-разному. Появляется колоссальная нагрузка на команду системы, вы понимаете, что даже новые ресурсы не помогут.

Это всё зелёные флаги — ваша система выросла и встала на ноги, просто столкнулась с очередным кризисом перед героическим скачком в развитии.

Нет, без кризисов ничего развиваться не будет

Расширение системы

Пришла пора думать, как расширять систему на несколько команд.

Создать разные системы? Смело, но обмен опытом будет сомнительным, продукты будет сложно объединить даже идеалогически, дизайнеры и разработчики не будут взаимозаменяемыми. А ещё каждый продукт потратит кучу времени (а значит денег) на изобретение своего велосипеда.

Нанять побольше людей? Из-за кросс-командного взаимодействия с каждым продуктом количество запросов единую в дизайн-систему будет увеличиваться нелинейно, поэтому кадров нужно будет очень много. В целом, это выход, но для всех онбордингов, обучений и менеджментов нужно будет довольного много ресурсов.

Отдать всё на откуп самим продуктам? Это может сработать — продукты берут компоненты из базовой дизайн-системы (кнопочки и менюшки), а на своей стороне делают то, что нужно им (плеер и карту). Держатели системы смогут сосредоточиться на самом важном, а продуктовые дизайнеры смогут реализовать свои заветные желания. Из минусов — какие-то ресурсы придётся выделить на ревью продуктовых наработок, чтобы они соответствовали базовым принципам дизайн-системы.

Мы выбрали последний подход. Он позволяет нам заниматься базовой дизайн-системой относительно небольшой командой, в то же время любой продукт может сделать её лучше. Расширяемая дизайн-система держится на двух столпах: продуктовые компоненты и продуктовые токены.

Продуктовые компоненты

Первый принцип: любая команда может создать компоненты, и если они пройдут нужные ревью, то они становятся частью мета-дизайн-системы. Команда базовой системы может забрать их к себе, если компоненты пригодятся и другим продуктам.

В нашей фигме есть папка с «китами», где каждый файл является набором компонентов для конкретного продукта. Вот компоненты мессенджера, здесь лежат компоненты музыки, а это мы нашли компоненты маркета. Продуктовые компоненты часто содержат элементы из базовой дизайн-системы, например, кнопки для баннера. Некоторые продукты создают надстройки над базовыми компонентами, например, меняют форму, добавляют обводки или дают возможность вносить другой контент.

Продуктовые токены

Второй принцип: команды могут изменить дизайн-систему под свой бренд и нужды. С этим помогают постоянные спутники дизайн-системы — токены: цвета, скругления, отступы, шрифты. Очень круто, когда у вас в фигме всё живёт на переменных и стилях. Ещё круче, когда они синхронизируются с кодом.

Цвета, шрифты и числа попадают к нашим разработчикам через систему VKUI Tokens, она же помогает нам расширять дизайн-систему на разные продукты. Каждый продукт может создать свою тему, импортировать туда токены из базовой темы (или из другого продукта), а также переопределить часть переменных или добавить свои. Так получается мультибрендовая дизайн-система.

Если продукт очень похож но другой, но только фирменный цвет — не синий, а фиолетовый, то он может просто взять к себе их токены, и переопределить акцентный цвет. Если он строгий и квадратный — можно переопределить скругления. Если в нём крупные отступы, достаточно просто увеличить токены размеров.

Но как организовать продуктовые токены в фигме? В каком виде хранить, как между ними переключаться? Как покрасить кнопку в цвета своего бренда?

Первая мысль: использовать моды переменных. Если у вас не самый дорогой Enterprise план, вы ограничены всего четырьмя модами. Допустим, у каждого продукта есть светлая и тёмная тема. Тогда вы ограничены... двумя продуктами! Переключаться можно будет через моды — это удобно.

Другой вариант: создать одну большую коллекцию, которая будет ссылаться на продуктовые переменные (у которых в свою очередь будут светлые и тёмные темы). В таком случае получится вместить 4 продукта. Либо делать ещё больше и больше вложенностей, создавая древовидную структуру. Переключаться тоже можно будет через моды.

Придётся делать много ссылок, но зато это нативное решение.

Третий подход — хранить токены в отдельных коллекциях или файлах. Сделать нормальное наследование будет сложно из-за того, что фигма не даёт привязаться к переменной в тёмной теме, поэтому встаёт вопрос синхронизации базовых и продуктовых токенов. Переключаться между темами можно будет с помощью плагина Swap Variables. Достаточно выделить нужные элементы и выбрать исходную и целевую коллекции с переменными. Если у переменных одинаковые названия, они заменятся. Если что-то пойдёт не так, плагин расскажет об ошибках и даст выделить проблемные элементы.

Если всё правильно организовать, перекрашивать кнопки и макеты станет легко и адаптация страницы авторизации под десятки продуктов в разных стилях станет базовой задачей

Мультибрендовость — популярный принцип для крупных компаниях, а для дизайн-системы это всегда большой вызов. Но все сложности решаемы. Ваши главные помощники — смекалка, автоматизация и продуктовые дизайнеры.

Принципы мультибрендовости нужны не только для компании с несколькими продуктами. Они помогут создать расширяемую и удобную дизайн-систему, если вы хотите подарить (или продавать) своё творение миру. Потому что если она не будет расширяемой, вряд ли она кому-то пригодится.

Помните, что Земля стоит на UI-китах, и удачи с экспансией вашей дизайн-системы на разные бренды ✊