Меню
Поиск

Дизайн-системы · Компоненты и варианты

Как вести библиотеку компонентов и менять её, не ломая чужие макеты

Библиотекой пользуются несколько команд, и каждая правка доходит до всех. В уроке разберём, что брать в библиотеку, а что оставить в продукте, как отказать в новом компоненте с причиной и выходом, как найти и свести два компонента об одном, как выпустить заметное изменение по шагам — предупредить, выпустить рядом со старым, перевести, убрать — и как нумеровать версии и писать список изменений. Для практики — библиотека «Лесной обжарки» для приложения, сайта и кабинета: тренажёр и поиск ошибок в сообщении о выпуске.

Пример для всего урока. «Лесная обжарка» выросла: у магазина приложение, сайт и кабинет для офисов, которые заказывают кофе коробками. Три команды берут компоненты из одной библиотеки, а ведёте её вы. Как собрать компонент и продумать его состояния, разобрано в уроках Junior и Middle. Как вывести из продукта устаревший паттерн — в уроке «Паттерны и состояния», Senior. Здесь — сама библиотека: что в неё входит и как её менять.

1Что входит в библиотеку

В библиотеку попадает то, что нужно многим. То, что нужно одной команде, остаётся в её продукте.

Команда сайта просит добавить в библиотеку карточку дегустационного набора.

Команда кабинета — таблицу счетов.

Команда приложения — кнопку-переключатель «Подписаться на сорт», которая, кстати, нужна и сайту.

Что из этого — библиотека?

Критерии GOV.UK

В GOV.UK Design System предложение нового компонента проверяют по двум признакам:

  • Полезен — есть свидетельства, что он нужен многим командам или сервисам.
  • Не повторяет — в системе нет того же самого.

А перед публикацией — ещё по трём:

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

Три места для решения

  • Библиотека — то, что нужно нескольким продуктам: поле поиска, кнопка, переключатель «Подписаться на сорт».
  • Продукт — сборка из компонентов библиотеки для одной команды. Карточка дегустационного набора собирается из карточки сорта, чипов и кнопки в файле сайта.
  • Разово — то, что встретится один раз: баннер распродажи. Это слои в макете.

Брэд Фрост называет эти три места компонентами системы, «рецептами» и «снежинками». А в книге «Atomic Design» советует считать новое разовым, пока похожая задача не появится у второй команды.

Проверьте себя на запросах команд «Лесной обжарки».

Тренажёр · библиотека, продукт или разово
  1. Поле поиска: есть в приложении, на сайте и в кабинете.

  2. Карточка дегустационного набора — только на сайте, из карточки сорта, чипов и кнопки.

  3. Баннер «Чёрная пятница» на главной сайта.

  4. Счётчик количества «− 2 +» в корзине приложения и сайта.

  5. Таблица счетов в кабинете для офисов.

  6. Кнопка-переключатель «Подписаться на сорт» — для приложения и сайта.

  7. Иллюстрация к письму о дне рождения магазина.

Первый вопрос к любому запросу: кому ещё это нужно? Если только одной команде — в библиотеку рано.
Библиотека — для того, что нужно нескольким продуктам и не повторяет имеющееся. Сборки для одной команды живут в её продукте. Разовое — слоями в макете.

2«Добавьте компонент» — как ответить

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

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

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

О чём спросить, прежде чем ответить

  • Кому ещё это нужно? Одна команда или несколько.
  • Нет ли уже такого? Может, это вариант существующего компонента.
  • Это компонент или сборка? Карточка набора — сборка из карточки и чипов.
  • Кто будет его поддерживать? Компонент в библиотеке — это и состояния, и описание, и исправления.

Четыре ответа

Да, берём. Нужно нескольким продуктам, такого нет.

Вариантом существующего. Просят «оранжевую кнопку для акций». Если у неё своя роль — это вариант кнопки с именем по роли, а не новый компонент.

Сборкой в продукте. Карточку набора собирают в файле сайта из компонентов библиотеки.

Разово. Баннер остаётся слоями в макете.

О втором ответе спорят. Натан Кертис советует редкий случай не добавлять вариантом, а собирать из частей: частое настраивают свойствами, редкое собирают. Иначе у зрелого компонента панель свойств разрастается так, что её приходится листать.

Как написать отказ

Например:

«Карточку набора в библиотеку пока не берём: она нужна только сайту и собирается из карточки сорта и чипов. Соберите её в файле сайта. Если такая понадобится приложению — вернёмся к разговору, и я помогу перенести».

В ответе три части: решение, причина и что делать дальше.

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

3Два компонента об одном

Через год в библиотеке находятся «Тег» и «Чип»: оба — короткая подпись в рамке. Один делали для сайта, другой — для приложения.

Пока их два, каждая правка — двойная. А новый дизайнер выбирает наугад.

Как найти двойников

  • Пройдите библиотеку по задачам, а не по названиям. «Показать короткий признак» — и рядом окажутся тег, чип и бейдж.
  • Посмотрите аналитику библиотеки. В Figma она показывает, сколько у компонента экземпляров, в каких командах и файлах он стоит и сколько раз его отвязывали. Она есть на тарифах Organization и Enterprise.
  • Обратите внимание на отвязки. Если экземпляр часто отвязывают, компонент чего-то не умеет, и рядом, скорее всего, появился самодельный двойник.

Как свести

  1. Сравните оба компонента: свойства, состояния, где стоят.
  2. Выберите основу — тот, что используют чаще и что лучше устроен.
  3. Добавьте в основу то, чего ей не хватает, вариантом или свойством.
  4. Пометьте второй устаревшим с указанием, чем заменить.
  5. Переведите места по списку и только потом уберите второй. Как — в следующем разделе.
Что сравниваемТегЧип
Где стоитСайт: признаки на карточке — «Новинка», «Без кофеина»Приложение: фильтры каталога
НажимаетсяНетДа: включает фильтр
СостоянияТолько покойПокой, наведение, фокус, выбран, неактивен
РешениеЭто разные задачи. Тег — признак, чип — фильтр. Свести нужно не их, а два тега: «Тег» сайта и «Бейдж» приложения

Похожий вид — не повод сводить. Сводят то, что делает одно и то же.

Сводят компоненты с одной задачей, а не с одним видом. Основа — тот, что чаще используют. Второй помечают устаревшим и убирают только после перевода всех мест.

4Изменение без поломки — по шагам

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

В Figma обновление библиотеки не приходит в чужие файлы само. Владелец файла видит, что вышло обновление, сравнивает «было — стало» и принимает изменения по одному или все сразу.

Значит, после выпуска старое и новое ещё долго живут рядом. И команды должны знать, что делать.

«Тег» вместо «Бейджа» · четыре шага
  1. ПредупредитьЗа две недели до выпуска: что меняется, зачем, кого касается, что сделать и до какого числа.
  2. Выпустить новое рядом со старым«Тег» получает вариант «Размер=Малая», как у «Бейджа». «Бейдж» помечен устаревшим и указывает на замену.
  3. ПеревестиКоманды меняют экземпляры у себя. Вы смотрите по аналитике, сколько «Бейджей» осталось и где.
  4. Убрать староеКогда мест не осталось или наступила объявленная дата. Удаление — отдельный выпуск.
Сроки — договорённость «Лесной обжарки». Важно не число дней, а то, что срок объявлен заранее.

Шаг «перевести» не везде делают за команды. В ЮMoney сначала добивались, чтобы на новую версию перешли все, — это привело к напряжению, и теперь команды сами решают, когда обновляться. Плата за это — разные версии библиотеки в разных командах.

Как помечают устаревшее в больших системах

В Atlassian вывод из системы идёт в две фазы: сначала «намерение вывести» с предупреждением, потом «устарел». И правило: ничто из стабильной части системы не убирают без ясно объявленного срока.

В Primer, дизайн-системе GitHub, у устаревшего компонента есть описание, чем его заменить, а тому, кто его использует, показывается предупреждение.

Чего не делать

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

Не предупреждайте после выпуска. «Вчера мы всё поменяли» — это не предупреждение, а новость.

Заметное изменение — четыре шага. Предупредить, выпустить рядом со старым, перевести, убрать. Старое помечено устаревшим и указывает на замену.

5Версии и список изменений

Номер версии говорит команде, можно ли обновляться не глядя.

Многие библиотеки нумеруют выпуски по правилам семантического версионирования, semver. Номер из трёх чисел — например, 2.4.1.

  • Первое число, мажорная версия, растёт, когда изменение несовместимо: что-то убрали или переименовали так, что старое перестанет работать.
  • Второе, минорная, — когда добавили новое, ничего не сломав. Пометка «устарело» — тоже минорная версия.
  • Третье, патч, — когда исправили ошибку, ничего не сломав.

В semver есть и правило про вывод устаревшего: прежде чем убрать что-то в мажорной версии, нужна хотя бы одна минорная, где это помечено устаревшим.

Дизайнерская библиотека в Figma не обязана нумеровать выпуски так же, как код. Но если компонент живёт и в коде, удобно, когда номера совпадают: разработчик и дизайнер говорят об одной версии.

Запись в списке изменений

Каждое изменение отвечает на четыре вопроса:

  • что изменилось;
  • кого это касается;
  • что сделать;
  • до какого числа.

Например:

Библиотека «Лесной обжарки» · список изменений
2.0.0 · 10 ноября
Убрано: «Бейдж». Касается приложения (38 мест).
Что сделать: заменить на «Тег», Размер=Малая. Подписи переносятся сами,
цвет фона — проверить на тёмных карточках.

1.6.0 · 27 октября
Добавлено: у «Тега» вариант Размер=Малая.
Устарело: «Бейдж» — используйте «Тег», Размер=Малая. Удалим в 2.0.0, 10 ноября.

1.5.1 · 20 октября
Исправлено: у поля поиска радиус как у остальных полей.
Сначала минорная версия с пометкой «устарело» и датой, потом мажорная, где старое убрано. Между ними — время на перевод.
Номер говорит, сломает ли обновление. Убрали или переименовали — мажорная. Добавили или пометили устаревшим — минорная. Исправили — патч. И у каждой записи: что, кого касается, что сделать, до когда.

6Найдите ошибки в выпуске библиотеки

Коллега выпустил новую версию библиотеки и написал об этом в общий чат. Пять мест в сообщении подведут команды.

Нажимайте на строки, которые стоило написать или сделать иначе. Нормальные строки тоже можно нажать.

Сообщение о выпуске · найдите ошибки
Библиотека 1.5.0 — уже вышла! «Тег» удалён сегодня. Вместо него — «Чип». У «Чипа» новый вариант: Размер=Малая. У кнопки свойство Type теперь называется «Вид». Разберётесь. Исправлено: радиус поля поиска теперь как у остальных полей. Добавлен новый компонент «Кнопка акции» — оранжевая, для распродаж. Старые компоненты из папки «Архив» удалим завтра. Вопросы — в канал #design-system, отвечаю в течение дня.
  1. Номер 1.5.0.Иначе. В выпуске удалён компонент и переименовано свойство — это несовместимые изменения, мажорная версия: 2.0.0. По номеру 1.5.0 команды решат, что обновиться можно не глядя.
  2. «Тег» удалён сегодня.Иначе. Удаление без предупреждения и без минорной версии, где «Тег» помечен устаревшим. И проверьте замену: тег — признак, чип — фильтр, задачи у них разные.
  3. Новый вариант чипа.Нормально. Добавили, ничего не сломав, — минорное изменение.
  4. «Разберётесь».Иначе. Переименование свойства — заметное изменение. Нужна запись: что изменилось, кого касается, что проверить в своих файлах и до какого числа.
  5. Исправлен радиус поля поиска.Нормально. Исправление без поломки — патч.
  6. «Кнопка акции» отдельным компонентом.Иначе. Это та же кнопка другого цвета. Если у неё своя роль — вариант кнопки с именем по роли. Если нет — не нужна вовсе.
  7. Удалим завтра.Иначе. Один день — не срок для перевода. Сначала проверить по аналитике, где эти компоненты ещё стоят, объявить дату и дать время.
  8. Вопросы — в канал.Нормально. Понятно, куда спрашивать и когда ждать ответа.

Все пять найдены. Номер не тот, удаление без предупреждения, «разберётесь», лишний компонент и срок в один день. Каждая из них кончается тем, что команды чинят свои макеты руками.

Нормальные строки тоже можно нажать: вы прочитаете, почему там всё в порядке, а счётчик «Найдено» не изменится.
Сообщение о выпуске читают те, у кого всё сломается. Номер версии, что изменилось, что сделать и до когда — в каждом выпуске.

7Задание

Проведите одно изменение в общей библиотеке по шагам: предупредить, выпустить, перевести, убрать. Запишите, что пошло не так.

Часть 1 · Выбрать и подготовить, 1 день

  1. Выберите изменение: свести два компонента об одном, переименовать свойство или убрать то, чем не пользуются. Если своей библиотеки нет, возьмите «Бейдж» и «Тег» из раздела 3 и распишите все шаги на бумаге.
  2. Посчитайте места, где стоит то, что изменится: по аналитике библиотеки или поиском по файлам.
  3. Напишите предупреждение по шаблону ниже и отправьте до выпуска.
Изменение библиотеки · шаблон
ИЗМЕНЕНИЕ: ______________________        Дата: __.__.____

ЧТО МЕНЯЕТСЯ И ЗАЧЕМ: ______________________
КОГО КАСАЕТСЯ (команды, число мест): ______________________
ЧТО СДЕЛАТЬ КОМАНДАМ: ______________________

ШАГИ
предупредили: __.__   выпустили новое рядом со старым: __.__ (версия ____)
перевели: __ из __ мест   убрали старое: __.__ (версия ____)

ЧТО ПОШЛО НЕ ТАК
______________________
что сделать иначе в следующий раз: ______________________
Раздел «что пошло не так» — главный результат задания. В следующем изменении он превращается в пункт предупреждения.

Часть 2 · Выпустить и перевести, 1–2 недели

  1. Выпустите новое рядом со старым. Старое пометьте устаревшим и укажите замену.
  2. Помогите командам перевести места. Следите по аналитике, сколько осталось.
  3. Отвечайте на вопросы и записывайте их: каждый вопрос — дыра в предупреждении.

Часть 3 · Убрать и записать, 1 день

  1. Уберите старое отдельным выпуском, когда мест не осталось или наступила объявленная дата.
  2. Спросите команды, пришлось ли им что-то чинить руками.
  3. Заполните «что пошло не так» в шаблоне.
Как понять, что задание выполнено. После изменения ни один чужой макет не потребовал ручной починки.

Что должно получиться

  • Предупреждение, отправленное до выпуска.
  • Два выпуска: с пометкой «устарело» и с удалением — и записи о них в списке изменений.
  • Заполненный шаблон с разделом «что пошло не так».

План работы: день на подготовку, одна–две недели на перевод, день на удаление и разбор.

Частые сложности

  • «Команды не переходят, пока не заставишь». Объявленная дата и список мест помогают больше, чем напоминания. Пройдите по списку вместе с командой.
  • «Аналитики нет: тариф не тот». Тогда поиск по файлам и опрос команд: «где у вас стоит «Бейдж»?». Медленнее, но работает.
  • «Изменение маленькое, зачем столько шагов». Не нужно. Исправление без поломки — патч и строка в списке изменений. Шаги — для того, что ломает чужие макеты.
  • «Отказали команде, теперь она делает своё». Вернитесь к ответу: была ли в нём причина и выход? Помогите собрать нужное в продукте.

8Чек-лист и ошибки

Библиотека держится, если

  • В ней то, что нужно нескольким продуктам и не повторяет имеющееся
  • Отказ в новом компоненте — с причиной и выходом
  • Двойники найдены по задачам и сведены в один
  • Заметное изменение идёт по шагам: предупредить, выпустить рядом, перевести, убрать
  • Устаревшее помечено и указывает на замену
  • Номер версии говорит, ломает ли выпуск
  • У каждой записи в списке изменений: что, кого касается, что сделать, до когда

Что мешает

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

9Три ступени темы

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

СтупеньЧто нужно уметьКак проверить результат
Junior Отличать повторяющееся от разового; собирать компонент с вариантами; называть варианты словами; проверять на короткой и длинной подписи; заменять копии экземплярами Изменение вида элемента во всём макете делается в одном месте
Middle Продумывать все состояния: наведение, фокус, нажатие, неактивное, загрузку и ошибку; отличать неактивное от загрузки; описывать, когда компонент применять и когда нет Разработка собрала компонент по макету и не спросила ни про одно состояние
Senior — этот урок Решать, что входит в систему; менять библиотеку, не ломая чужие макеты; отказывать в лишних компонентах с причиной; сводить два компонента об одном; предупреждать об изменениях заранее После изменения ни один чужой макет не потребовал ручной починки
Ориентир по этой теме: команды берут компоненты из библиотеки, а не рисуют свои, и узнают об изменениях до того, как те до них дошли.

Что почитать дальше

  • Раскатываем дизайн-систему: от хаоса к процессамХабр, блог ЮMoney, 2025 · на русском · бесплатноРуководитель фронтенда ЮMoney о дизайн-системе на 70 с лишним микросервисов: как свели разрозненные библиотеки в одну, стали считать использования каждого компонента и перед большим изменением оценивать, во что обойдётся переход командам. В отличие от урока, команды в итоге сами решают, когда обновляться.
  • Design system components, recipes, and snowflakesблог Брэда Фроста, 2021 · на английском · бесплатноБрэд Фрост делит компоненты на три уровня: общие компоненты системы, рецепты (сборки из них внутри одного продукта) и снежинки — разовые решения. Отсюда три ответа на «добавьте компонент». Специфичное держат в продукте и переносят в систему, когда оно пошло в ход широко. На английском, 2021.
  • A Design System Governance Processблог Брэда Фроста, 2019 · на английском · бесплатноПроцесс Брэда Фроста по шагам: команда не нашла компонент → разговор с командой системы → готовое решение, снежинка в продукте или работа в системе → прототип, проверки, документация, список изменений, новая версия. Десять шагов, и автор сам признаёт, что это долго. На английском, 2019.
  • Maintaining Design SystemsAtomic Design, Брэд Фрост, глава 5 · книга на английском · полный текст открыт на сайте книгиПятая глава «Atomic Design» о поддержке системы: новый шаблон считать разовым, пока он не понадобится второй команде, до вывода старого спросить тех, кто им пользуется, и предложить замену. Книга 2016 года, часть инструментов устарела. Глава длинная, для урока нужен раздел «Making changes to patterns».
  • Configuration CollapseНатан Кертис, 2026 · на английском · бесплатноНатан Кертис о том, как свойства и варианты компонента разрастаются до «полосы прокрутки позора» и почему со слотами в Figma их стоит сокращать: частое — настраивать, редкое — собирать из частей. В отличие от урока, для редкого случая он советует не новый вариант, а сборку. На английском, 2026.