<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блог Михаила Озорнина: заметки с тегом handoff</title>
<link>https://mikeozornin.ru/blog/tags/handoff/</link>
<description>Главная · Блог · Работы ·</description>
<author>Михаил Озорнин</author>
<language>ru</language>
<generator>E2 (v3798; Aegea)</generator>

<itunes:owner>
<itunes:name>Михаил Озорнин</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Главная · Блог · Работы ·</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Как выглядит хороший макет</title>
<guid isPermaLink="false">164</guid>
<link>https://mikeozornin.ru/blog/all/what-is-a-good-handoff/</link>
<pubDate>Tue, 11 May 2021 10:19:02 +0300</pubDate>
<author>Михаил Озорнин</author>
<comments>https://mikeozornin.ru/blog/all/what-is-a-good-handoff/</comments>
<description>
&lt;p class="lead"&gt;В продолжении тредов Романа Шамина про дружбу дизайнеров и фронтендеров решил вытащить в блог одну из статей наших гайдов — про то, что такое «хорошо переданный макет». Все вытащенные из гайдов статьи доступны по тегу &lt;a href="http://mikeozornin.ru/blog/tags/guidelines/"&gt;гайдлайны.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Треды Романа Шамина:&lt;br /&gt;
&lt;a href="https://teletype.in/@romanshamin/what-design-want-from-frontend"&gt;teletype.in/@romanshamin/what-design-want-from-frontend&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://teletype.in/@romanshamin/what-frontend-want-from-design"&gt;teletype.in/@romanshamin/what-frontend-want-from-design&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Дальше привожу статью из наших командных договоренностей.&lt;/p&gt;
&lt;h2&gt;О чем эта статья&lt;/h2&gt;
&lt;p&gt;Если макет сделан не очень удобно для разработчиков, это плохо: разработчику будет сложно понять как сделать правильно, он потратит больше времени и где-то ошибется. Дизайнеру придется писать больше замечаний, люди будут менее довольны друг другом.&lt;/p&gt;
&lt;p&gt;Эта статья описывает как хорошо передать макет в разработку.&lt;/p&gt;
&lt;h2&gt;Хранение и состав макетов&lt;/h2&gt;
&lt;h3&gt;Список самих экранов&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Всем членам команды продукта понятно где и как искать макеты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;где найти макеты по нужной фиче,&lt;/li&gt;
&lt;li&gt;где найти старый макет,&lt;/li&gt;
&lt;li&gt;как понять актуальная версия или нет.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Договоренности команды о процессе выкладывания макетов записаны.&lt;/p&gt;
&lt;p&gt;При обновлении макетов уведомляется проектная команда (аналитик, фронтенд, тех. писатель, QA).&lt;/p&gt;
&lt;h3&gt;Состав экранов&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Для фичи понятен набор экранов, на которые вносятся изменения: какие экраны новые, какие экраны дорабатываются.&lt;/p&gt;
&lt;p&gt;Если экранов несколько, то понятны переходы между экранами.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
Доступна актуальная схема экранов продукта (карта сайта).&lt;/p&gt;
&lt;p&gt;Если в фиче несколько экранов, то для них сделан кликабельный прототип с переходами между экранами.&lt;/p&gt;
&lt;h2&gt;Экраны&lt;/h2&gt;
&lt;h3&gt;Структура экранов&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Понятна структура экрана: из каких блоков состоит экран, какие между ними соотношения по размерам и отступам.&lt;/p&gt;
&lt;p&gt;Как ведут себя блоки экрана при прокрутке и ресайзе.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
У продукта есть понятная сетка, описаны типовые лейауты страниц: список, дашборд, форма редактирования, страница просмотра и т. д.&lt;/p&gt;
&lt;h3&gt;Элементы на странице&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
По каждому визуальному элементу на макете понятно, что это такое: текст, компонент, иконка, паттерн.&lt;/p&gt;
&lt;p&gt;По каждому компоненту понятно, что это за компонент, какой его режим используется, понятно, если в коде нет этого компонента или функции существующего компонента.&lt;/p&gt;
&lt;p&gt;Понятны размеры элемента, его взаимоотношения с соседними элементами.&lt;/p&gt;
&lt;p&gt;Понятно как элемент тянется, что будет, если в элементе будет меньше или больше контента.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
Все элементы описаны, разработчик знает где искать документацию на каждый используемый тип элемента: текст, компонент, иконку, паттерн.&lt;/p&gt;
&lt;p&gt;Размеры элементов и отступы между элементами логичны, ожидаемы и понятны.&lt;/p&gt;
&lt;p&gt;Примеры:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-1@2x.png" width="600" height="88" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;b&gt;Плохо:&lt;/b&gt; Случайные размеры блоков, фронтендерам сложно понять отступы&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-2@2x.png" width="595" height="330" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;b&gt;Плохо:&lt;/b&gt; Случайные размеры блоков, фронтендерам сложно понять отступ&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-3@2x.png" width="600" height="88" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;b&gt;Хорошо:&lt;/b&gt; Размеры блоков понятны&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-4@2x.png" width="600" height="96" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;b&gt;Хорошо:&lt;/b&gt; Размеры блоков понятны, блоки расположены предсказуемо по сетке&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Кегли&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Для каждого текста на странице понятен стиль или mixin, который нужно взять, эти стили и mixin’ы однозначно определяются из самого макета.&lt;/p&gt;
&lt;p&gt;Эти mixin’ы не противоречат компонентам, паттернам или аналогичным элементам других экранов продуктов.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
Есть актуальная таблица миксинов, описаны общие принципы их использования.&lt;/p&gt;
&lt;p&gt;Примеры:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-5@2x.png" width="453" height="168" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;b&gt;Плохо:&lt;/b&gt; Кегль не замапплен, неясно какой типографический миксин взять&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-6@2x.png" width="453" height="206" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;b&gt;Хорошо:&lt;/b&gt; Кегль и цвет замапплен, понятно что указать&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Цвета&lt;/h3&gt;
&lt;p&gt;Речь идет про цвет любого интерфейсного элемента: текста, иконки, рамки, фона, блока, линии.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Не используются цвета не из палитры проекта.&lt;/p&gt;
&lt;p&gt;Переменные цветов подписаны, разработчику легко понять, какую переменную использовать (копировать hex-код не норм).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
Составлена таблица цветовых токенов: default text, disabled text, error icon для всех используемых в проекте тем.&lt;/p&gt;
&lt;p&gt;В макетах прилинкованы цвета из этой таблицы (не error-500, а validation-text-color).&lt;/p&gt;
&lt;p&gt;Примеры:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-7@2x.png" width="453" height="168" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;b&gt;Плохо:&lt;/b&gt; Цвета не замаплены, неясно какой цвет выбирать&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-8@2x.png" width="453" height="206" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;b&gt;Хорошо:&lt;/b&gt; Цвета замаплены, понятно что указать&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Отступы&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Понятны сами отступы между всеми блоками на странице и их внутренняя логика.&lt;/p&gt;
&lt;p&gt;Отступы на макете не противоречат компонентам (например, в компоненте «кнопка» отступы 6 16, а на макете 6 12).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
Описана интерфейсная микросетка и описание модулей.&lt;/p&gt;
&lt;p&gt;Логика отступов описана, есть типовые отступы и их завязка на сетку.&lt;/p&gt;
&lt;h3&gt;Пиктограммы&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Разработчик знает, как вообще подключаются пиктограммы в проект.&lt;/p&gt;
&lt;p&gt;Понятно, что это за конкретная пиктограмма, как ее подключить и вставить.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
Есть общий список пиктограмм, их коды, параметры вставки в код продукта и документацию.&lt;/p&gt;
&lt;p&gt;&lt;aside class="aside-margin-right"&gt;Чтобы не мучиться со сборкой пакетов иконок, &lt;a href="http://mikeozornin.ru/blog/tags/icon-font/"&gt;почитайте как собирать их автоматически&lt;/a&gt;&lt;/aside&gt;&lt;/p&gt;
&lt;p&gt;Иконки версионируются, к продукту или в документацию можно подключить нужную версию пакета иконок.&lt;/p&gt;
&lt;p&gt;Примеры:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-9@2x.png" width="453" height="310" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;b&gt;Плохо:&lt;/b&gt; Иконка не замаплена, нужно искать её в наборе самостоятельно&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-10@2x.png" width="453" height="267" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;b&gt;Хорошо:&lt;/b&gt; Указано какая иконка и из какого набора. Примечание: mc — префикс одного из наших наборов иконок.&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Текст&lt;/h2&gt;
&lt;p&gt;См. также &lt;i&gt;Правильный процесс вычитки&lt;/i&gt; (ссылки нет, статья не вытащена наружу).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Рыба в макете правильная с точки зрения состояний, смысла и точная с точки зрения чисел и значений.&lt;/p&gt;
&lt;p&gt;Нет никаких Значение-1, Значение-2, Значение-3 и Лорем ипсумов.&lt;/p&gt;
&lt;p&gt;Из текста понятно, о чем он: это важно, чтобы техписатели могли его понять и улучшить.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
Текст в состоянии production-не стыдно, техписатели только полируют его.&lt;/p&gt;
&lt;h2&gt;Состояния&lt;/h2&gt;
&lt;h3&gt;Другие состояния&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Понятно, как сделать все остальные состояния: переключенные вкладки, переключатели, чекбоксы и радиокнопки (если они влияют на компоновку интерфейса).&lt;/p&gt;
&lt;p&gt;Отрисованы или описаны (если этого достаточно) все варианты дропдаунов, селектов и других выпадаек.&lt;/p&gt;
&lt;p&gt;Кроме самих этих состояний описаны переходы между ними.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
Если блоки меняются значительно, то лучше не пытаться описать отдельные выпадайки, а нарисовать блоки целиком, чтобы было меньше путаницы&lt;/p&gt;
&lt;p&gt;Пример:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-11@2x.png" width="750" height="1220" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Хорошо: Нарисованы альтернативные состояний экрана&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Загрузка&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Понятно как загружаются элементы экрана, в какой последовательности, как отображается процесс загрузки.&lt;/p&gt;
&lt;p&gt;Как должен вести себя продукт, если загрузка медленная, элементов много, или загрузка не удалась.&lt;/p&gt;
&lt;h3&gt;Пустое состояние&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Понятно, как выглядит пустое состояние всех блоков и элементов, когда в них нет данных.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
Пустые состояния систематизированы, используются типовые решения.&lt;/p&gt;
&lt;p&gt;Пример:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/what-is-a-good-handoff-12@2x.png" width="398.5" height="1000" alt="" /&gt;
&lt;/div&gt;
&lt;h3&gt;Валидация&lt;/h3&gt;
&lt;p&gt;См. &lt;a href="https://mosaic.ptsecurity.com/components/validation/overview"&gt;Валидация данных&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Понятно, когда и как срабатывает валидация.&lt;/p&gt;
&lt;p&gt;Как и когда показывается.&lt;/p&gt;
&lt;p&gt;Все сообщения об ошибках проходят через дизайнера, для каждой из возможных ошибок дизайнер придумывает способ предотвращения ошибки или способ отображения, если её нельзя предотвратить&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Уровень «Хорошо»&lt;/b&gt;&lt;br /&gt;
Валидация соответствует общему гайдлайну.&lt;/p&gt;
&lt;p&gt;Валидация способствует не попаданию с ситуацию срабатывания валидации.&lt;/p&gt;
&lt;h3&gt;Много данных&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Уровень «Минимально достаточный»&lt;/b&gt;&lt;br /&gt;
Понятно как работает экран, когда во всех потенциальных местах (текст, списки, таблицы) будет много данных.&lt;/p&gt;
&lt;p&gt;Все вытащенные из гайдов статьи доступны по тегу &lt;a href="http://mikeozornin.ru/blog/tags/guidelines/"&gt;гайдлайны.&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;См. также&lt;/h2&gt;
&lt;p&gt;Гайд Контура: &lt;a href="https://guides.kontur.ru/principles/layouts/"&gt;guides.kontur.ru/principles/layouts/&lt;/a&gt;&lt;br /&gt;
Чек-лист &lt;a href="https://twitter.com/Prit4er1"&gt;Prit4er1&lt;/a&gt;: &lt;a href="https://www.notion.so/5c03c7554ff542da9c77a6f420935282"&gt;notion.so/5c03c7554ff542da9c77a6f420935282&lt;/a&gt;&lt;/p&gt;
</description>
</item>


</channel>
</rss>