5.2

Смотреть на английском

5.2 Дизайн интерфейсов и дизайн-системы

Обзор и мотивация

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

Для большой организации дизайн-система единственное вложение наибольшего рычага в качество UI и скорость поставки. Без неё каждая команда заново изобретает кнопки, формы, модальные окна и обработку ошибок, каждое слегка иное, каждое сопровождаемое отдельно, каждое ломающееся отдельно. Пользователи платят за это путаницей и недоверием; бизнес платит дублированными усилиями и неравным качеством. Дизайн-система превращает разовые проектные решения в повторно используемый капитал: решите доступность, отзывчивость и брендинг один раз в компоненте, и каждая команда унаследует результат.

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

Ключевые принципы

  • Согласованность снижает когнитивную нагрузку; кнопка должна выглядеть и вести себя одинаково везде.
  • Проектные решения это активы: фиксируйте их один раз как повторно используемые компоненты и токены.
  • Токены источник истины для визуальных решений; компоненты потребляют токены, а не зашитые значения.
  • Доступность и отзывчивость встроены в компоненты, а не прикручены на каждом экране.
  • Дизайн-система это продукт с пользователями (разработчиками и дизайнерами), а не разовая поставка.
  • Визуальная иерархия направляет внимание: шрифт, цвет и пространство должны делать важность очевидной.
  • Управление держит систему связной; вклады держат её живой.

Рекомендации

Структурируйте систему слоями: токены, компоненты, шаблоны

Токены дизайна это именованные, независимые от платформы значения цвета, отступов, типографики, радиуса, возвышения и движения: атомарные решения. Стройте их ярусами: примитивная палитра (сырые значения), семантические токены (color-action-primary, space-inset-md), несущие смысл, и токены уровня компонентов там, где они нужны. Компоненты потребляют семантические токены, так что одно изменение распространяется повсюду. Над компонентами стоят шаблоны: проверенные композиции вроде таблицы данных, многошаговой формы или пустого состояния. Документируйте все три слоя в одном месте с живыми примерами и руководством по использованию.

Правильно усвойте визуальные основы

Задайте типографическую шкалу с ясной иерархией и щедрым межстрочным интервалом для читаемости и держитесь ограниченного набора размеров и начертаний. Определяйте цвет как систему, с достаточным контрастом для доступности (см. главу о доступности) и семантическими ролями, а не как сырые оттенки, разбросанные по UI. Используйте шкалу отступов и сетку компоновки, чтобы выравнивание и ритм оставались согласованными без догадок на каждом экране. Визуальная иерархия должна делать главное действие и самую важную информацию очевидными с первого взгляда.

Проектируйте отзывчиво и сначала для мобильных

Проектируйте сначала для наименьшего разумного окна просмотра, затем улучшайте для больших экранов. Это вынуждает приоритизировать существенное содержимое и элементы управления. Используйте текучие компоновки и относительные единицы, чтобы интерфейсы адаптировались к любому экрану, а не перескакивали между несколькими фиксированными точками перелома. Делайте цели касания достаточно большими и убедитесь, что взаимодействия работают с касанием, мышью и клавиатурой. Особенно в государстве предполагайте, что значимая доля ваших пользователей на малых, старых или бюджетных устройствах.

Сделайте передачу от дизайна к разработке и паритет заботой первого порядка

Дизайн-система окупается, только когда поставляемый UI соответствует задуманному дизайну и продолжает соответствовать. Стремитесь к единому источнику истины: токены, экспортируемые из инструмента дизайна, питают код напрямую, так что дизайнеры и инженеры ссылаются на одни и те же значения. Предоставьте библиотеку компонентов в коде, которой инженеры действительно будут пользоваться, с теми же именами и свойствами, что у дизайн-компонентов. Используйте визуальное регрессионное тестирование (автоматическое сравнение отрисованного UI с утверждёнными эталонными изображениями) и проверки рецензии дизайна, чтобы ловить дрейф. И измеряйте «паритет дизайна и кода» как явную метрику здоровья: долю UI, построенного из компонентов системы, против разового кода.

Поддерживайте темы и «белую марку» в корпоративном масштабе

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

Управляйте системой как продуктом

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

Компромиссы: плюсы и минусы

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

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

Вопросы для обсуждения с командой

  1. Как ярусно устроена наша архитектура токенов и запрещено ли компонентам использовать зашитые значения? Вся отдача от дизайн-системы (дешёвая смена бренда, темы для многих брендов, доступность, решённая один раз) зависит от того, что компоненты потребляют семантические токены вроде color-action-primary, а не сырые оттенки и значения пикселей, разбросанные по коду. Решите ярусы сейчас: примитивная палитра, семантические токены, несущие смысл, и токены уровня компонентов только там, где они действительно нужны. Чрезмерная абстракция реальный риск, поэтому договоритесь, сколько слоёв слишком много и как разработчик быстро находит нужный токен. Принесите grep зашитых цветов и отступов по вашей кодовой базе как свидетельство дрейфа. Если логика бренда запечена в компонентах, смена бренда становится переписью кода вместо изменения конфигурации, а это именно та катастрофа, которую призвана предотвратить токенизация.

  2. Как мы измеряем и защищаем паритет дизайна и кода и какие инструменты автоматически ловят дрейф? Дизайн-система, существующая только как файл дизайна, лист наклеек: инженеры всё равно перестраивают всё, а поставляемый UI медленно расходится с замыслом. Договоритесь о явной метрике паритета (доля UI, построенного из компонентов системы, против разового кода) и подключите визуальное регрессионное тестирование к CI, чтобы отрисованные экраны сравнивались с утверждёнными эталонами. Это важно в корпоративном и государственном масштабе, потому что сотни приложений, многие построены поставщиками или унаследованы слияниями, все должны ощущаться как одна организация. Принесите текущее число паритета и список главных заказных компонентов, которые команды продолжают перестраивать. Если никто не владеет метрикой или регрессионным набором, дрейф уже тихо побеждает.

  3. Как мы управляем вкладами, устареванием и миграцией, чтобы система не создавала узких мест и не дробилась? Строгий центральный контроль гарантирует связность и доступность, но может превратить команду дизайн-системы в узкое место, которое команды обходят; открытые вклады держат систему живой, но рискуют расходящимися вариантами без рецензии. Решите путь вклада: как команда предлагает новый компонент, кто его рецензирует и как он продвигается. Равно договоритесь, как вы сообщаете о ломающих изменениях, потому что устаревание без поддержки миграции и запаса времени заставляет потребляющие команды застревать или делать форк. Принесите примеры компонентов, которые команды построили вне системы, и спросите, почему они не внесли их обратно. Ответ обычно раскрывает, ваше управление сервис или препятствие.

  4. Как мы гарантируем, что доступность решается один раз внутри компонентов, и что мешает команде выпустить недоступное разовое решение? Сильнейший аргумент в пользу дизайн-системы в том, что цветовой контраст, состояния фокуса, управление с клавиатуры и семантика программ чтения с экрана решаются один раз и наследуются повсюду, но это обещание рушится в миг, когда команды собирают элементы управления вручную. Для большой организации именно здесь сидит наибольший юридический и репутационный риск, потому что одна недоступная платёжная форма или выбор даты может заблокировать реальных пользователей и вызвать жалобы по каждому продукту, который её скопировал. Взвесьте центральное принуждение (доступные компоненты плюс линтер или барьер рецензии, отвергающий сырую разметку) против автономии команд и решите, где проходит жёсткая линия. Принесите результаты аудита доступности, список компонентов с их статусом соответствия и число заказных элементов управления, которые команды перестроили вне системы. В корпоративной и государственной среде это не любезность: обязательства вроде WCAG, Section 508 и EN 301 549 делают соответствие требованием закупок и аудита, поэтому библиотека компонентов с документированным соответствием сама по себе актив соответствия.

  5. Скольким брендам, арендаторам и темам должна служить эта система и спроектировали ли мы слой токенов под это сейчас, а не дооснащаем позже? Темы дёшевы, если вы проектировали под них, и жестоки, если нет, потому что не предвиденный бренд или арендатор вынуждает вернуть логику бренда в компоненты и сводит на нет весь смысл токенизации. Для большой команды это решение формирует годы работы: платформе, которая должна обслуживать несколько брендов, светлую и тёмную темы, режим высокой контрастности и брендинг на арендатора, нужен слой семантических токенов, достаточно чистый, чтобы тема была просто другим набором значений. Балансируйте эту гибкость против чрезмерной абстракции, поскольку дерево токенов, по которому никто не может ориентироваться, само по себе отказ. Принесите дорожную карту брендов и арендаторов, которые вы можете предвидеть, число тем в игре сегодня и любые компоненты, уже протекающие логикой конкретного бренда. В корпоративной и государственной среде слияния, поглощения и реорганизации ведомств регулярно добавляют бренды, которых вы не планировали, поэтому проектирование под многобрендовость с самого начала разница между изменением данных и многолетней переписью.

  6. Как мы перенесём унаследованные и построенные поставщиками приложения на систему и как финансируется команда дизайн-системы, чтобы пережить следующий бюджетный цикл? Дизайн-система возвращает вложения, только когда настоящие продукты её принимают, однако труднее всего конвертировать старые и аутсорсные приложения, которым она нужнее всего, а команду, сопровождающую систему, нередко первой режут при сжатии бюджета. Для большой организации нужно решить между миграцией «большим взрывом» и поэтапной и как заставить поставщиков строить на ваших компонентах, а не в обход. Принесите опись приложений с их текущим показателем паритета, оценку усилий миграции на приложение и договорные рычаги, которые вы держите над поставщиками. В корпоративной и государственной среде записывайте соответствие дизайн-системе в условия закупок, чтобы новая работа поставщиков по умолчанию ложилась на систему, и финансируйте сопровождающую команду как долговечную общую инфраструктуру, потому что система, теряющая своих хранителей в реорганизации, дрейфует обратно в фрагментацию в течение года.

Взгляд по секторам

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

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

Крупная организация. Проблема связность между многими командами и долгоживущими продуктами, поэтому воспринимайте дизайн-систему как управляемую общую инфраструктуру с выделенной командой, версионированием и дорожной картой. Отслеживайте паритет дизайна и кода как реальную метрику, подключите визуальное регрессионное тестирование к CI и проектируйте слой токенов под несколько брендов и тем с самого начала. Бюджетируйте цену управления и миграции явно и управляйте принятием как портфелем, а не предполагайте, что команды сами сползут на систему.

Государственный сектор. Правила закупок, прозрачность и публичная подотчётность определяют каждый выбор. Соответствие доступности стандартам вроде WCAG, Section 508 и EN 301 549 юридическое требование, а не предпочтение, поэтому библиотека компонентов с документированным соответствием становится активом соответствия. Предпочитайте или расширяйте общую публичную дизайн-систему, чтобы граждане встречали те же шаблоны по услугам, записывайте использование дизайн-системы в контракты поставщиков и публикуйте ваши компоненты и руководство открыто, чтобы ведомства и их поставщики могли их принять и отвечать по ним.

Примеры

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

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

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

Бизнес-обоснование: мотивы, ROI и TCO

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

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

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

Антипаттерны и ловушки

  • Дизайн-система как лист наклеек: статический файл дизайна без компонентов в коде, так что инженеры всё равно перестраивают всё.
  • Зашитые значения повсюду: цвета и отступы, разбросанные по коду, делающие темы и смену бренда невозможными.
  • Нет управления: система дробится, когда команды добавляют расходящиеся варианты; согласованность размывается.
  • Управление без вкладов: центральная команда становится узким местом, а команды обходят её.
  • Игнорирование паритета: UI в коде дрейфует от замысла дизайна, и никто не измеряет разрыв.
  • Чрезмерная абстракция: столько токенов и слоёв, что никто не может найти или использовать нужный.
  • Логика бренда, запечённая в компоненты: делает многобрендовость и темы переписью кода вместо изменения конфигурации.
  • Ломающие изменения без поддержки миграции: потребляющие команды застревают или делают форк системы.

Модель зрелости

Уровень 1: Начальный. Каждая команда строит свой UI стихийно и реактивно. Нет общих компонентов, непоследовательные вид и поведение, цвета и отступы зашиты на каждом экране. Каждая смена бренда ручная работа экран за экраном.

Уровень 2: Развитие. Существуют общий руководящий стиль или библиотека компонентов, но частичные, необязательные и нередко рассинхронизированные между дизайном и кодом. Одни команды ими пользуются, другие нет, а базовые практики сильно различаются от команды к команде.

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

Уровень 4: Управление. Система измеряется и контролируется данными относительно базовых значений. Паритет дизайна и кода отслеживается как явная метрика с целями на продукт, визуальное регрессионное тестирование работает в CI для ловли дрейфа, а соответствие доступности измеряется относительно стандартов, а не предполагается. Панели принятия показывают покрытие компонентами по командам, а цена и длительность смен бренда записываются, чтобы улучшение было видно со временем.

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

Идеи для обсуждения

  • Как сбалансировать центральное управление и автономию команд, не раздробив и не создав узкого места?
  • Какова правильная метрика «паритета дизайна и кода» и как сохранить её честной?
  • Когда команде следует позволить построить разовый компонент вместо использования системы?
  • Как финансировать и комплектовать дизайн-систему, чтобы она пережила бюджетные циклы и реорганизации?
  • Сколько гибкости тем стоит добавленной цены абстракции?
  • Как мигрировать унаследованные и построенные поставщиками приложения на общую систему?

Главные выводы

  • Дизайн-система превращает разовые проектные решения в повторно используемый управляемый капитал.
  • Структурируйте её слоями (токены, компоненты, шаблоны), где компоненты потребляют семантические токены.
  • Встраивайте доступность и отзывчивость в компоненты, чтобы каждая команда их наследовала.
  • Воспринимайте паритет дизайна и кода как измеримую метрику здоровья, а не допущение.
  • Токенизация делает смену бренда и темы для многих брендов изменением данных, а не переписью.
  • Управляйте системой как продуктом с дорожной картой, версионированием и моделью вкладов.
  • В корпоративном и государственном масштабе общая система вложение в UI наибольшего рычага из доступных.

Источники и дополнительное чтение

  • Brad Frost, Atomic Design
  • Alla Kholmatova, Design Systems: A Practical Guide to Creating Design Languages
  • Josef Müller-Brockmann, Grid Systems in Graphic Design
  • Robert Bringhurst, The Elements of Typographic Style
  • Ellen Lupton, Thinking with Type
  • Luke Wroblewski, Mobile First
  • Ethan Marcotte, Responsive Web Design
  • Nathan Curtis, writings on design tokens and design system governance
  • W3C Design Tokens Community Group, format specification
  • Government design systems (e.g., UK Government Design System, U.S. Web Design System) as reference implementations