Что разберём
- Пять состояний одного экранапереключатель
- Пустой экран: что здесь будет и что сделатьдо и после
- Загрузка: когда показывать и какуютренажёр
- Ошибка ввода и ошибка системытренажёр
- Успех: сказать, что получилось
- Найдите недоделанные состоянияпоиск
1Пять состояний одного экрана
Макет обычно рисуют в одном состоянии: данные есть, всё загрузилось, всё получилось. В остальных экран бывает не реже.
Посмотрите на «Мои заказы» глазами покупателя:
- у нового покупателя заказов нет;
- при плохой связи список грузится несколько секунд;
- сервер иногда не отвечает;
- после нажатия «Повторить» в списке появляется новый заказ.
Вместе с обычным видом, где заказы есть, это пять разных экранов, и каждый кто-то должен нарисовать. Если его не нарисует дизайнер, его придумает разработка — на ходу и без текста.
Обычное
Загрузка
Пусто
Ошибка
Успех
Сначала список состояний
Чтобы не пропустить ни одно состояние, перечислите их до того, как рисовать. Помогают четыре вопроса:
| Вопрос | Состояние | «Мои заказы» |
|---|---|---|
| Что видно, пока данные идут? | Загрузка | Серые строки на месте заказов |
| Что, если данных нет? | Пусто | «Заказов пока нет» и кнопка в каталог |
| Что, если не получилось? | Ошибка | Что случилось и кнопка «Повторить» |
| Что после действия? | Успех | Номер нового заказа и когда его привезут |
Дизайнер Скотт Хёрфф в 2015 году назвал такой набор стеком интерфейса. В его списке пять состояний: идеальное, пустое, ошибка, частичное и загрузка. Частичное — когда данных мало, например один заказ вместо двадцати: экран не пустой, но выглядит не так, как в макете.
2Пустой экран: что здесь будет и что сделать
Пустой экран — не ошибка, но и не повод оставить белое место. Он объясняет, что здесь появится, и показывает первый шаг.
Пустота бывает трёх видов, и в каждом нужно сказать разное.
| Почему пусто | Пример в магазине | Что сказать | Что предложить |
|---|---|---|---|
| Ещё ничего нет | «Избранное» у нового покупателя | Что здесь появится и как сюда попадают | Перейти в каталог |
| Ничего не нашлось | Поиск с фильтром, под который нет товаров | Что искали и что мешает | Сбросить фильтр, показать похожее |
| Всё сделано | Новых уведомлений нет | Что всё в порядке | Обычно ничего: пусто, потому что всё хорошо |
Пустой поиск
Частая пустота — в поиске. Например, покупатель ищет кофе без кофеина, а включённый раньше фильтр «Молотый» оставляет ноль товаров.
Без объяснения
С объяснением и действием
В Nielsen Norman Group советуют для пустых экранов три вещи:
- сообщить, что происходит;
- подсказать, как здесь всё устроено;
- дать прямой путь к главному действию.
Иллюстрация без текста ни одну из них не выполняет: она красивая, но не говорит, что делать.
Какими словами писать такой экран, разобрано в уроке «Тексты ошибок и пустых состояний», Junior.
3Загрузка: когда показывать и какую
Загрузку показывают там, где ожидание заметно. Где оно незаметно, индикатор только мелькает.
Ожидание человек замечает не сразу. Якоб Нильсен описал эти границы ещё в 1993 году:
- ответ быстрее 0,1 секунды кажется мгновенным;
- до секунды задержку уже видно, но мысль не прерывается;
- после 10 секунд внимание уходит на другое.
От этого и зависит, что показывать.
| Сколько ждать | Что показать | Пример |
|---|---|---|
| Меньше секунды | Ничего, кроме отклика на само нажатие | Переключить вкладку, отфильтровать уже загруженный каталог |
| От 1 до 10 секунд | Индикатор на месте того, что грузится: скелет для списка или экрана, крутилку для кнопки или одного блока | Открыть список заказов, отправить отзыв |
| Больше 10 секунд | Прогресс с долей выполненного и возможность заняться другим | Отправить фото чека, выгрузить историю покупок за год |
Скелет или крутилка
Скелет — это серые блоки на месте будущего содержимого. Он лучше крутилки там, где грузится целый экран или список.
Крутилка на весь экран
Скелет на месте списка
Проверьте себя
Восемь случаев ожидания в приложении. Что показать, пока ждём?
Фильтр «Зёрна» в уже загруженном каталоге. Список меняется за десятую долю секунды.
НичегоОтвет мгновенный. Индикатор мелькнул бы и сбил с толку.
Список заказов открывается, обычно за 2–3 секунды.
СкелетГрузится весь список, и его форма известна заранее. Серые строки показывают, что будет, и экран не прыгает.
Кнопка «Отправить отзыв»: отправка идёт около 2 секунд, экран остаётся тем же.
Индикатор на местеЖдёт одна кнопка, а не экран. Крутилка в самой кнопке, и кнопка на это время неактивна, чтобы отзыв не ушёл дважды.
Фото чека для возврата отправляется 20–40 секунд.
Прогресс с долейДольше 10 секунд. Человеку нужно видеть, сколько уже сделано, и знать, что можно пока заняться другим.
Вкладки «Кофе» и «Чай»: содержимое обеих уже в телефоне.
НичегоЖдать нечего, вкладка открывается сразу.
Карточка товара открывается из каталога: фото и описание приходят за 1–2 секунды.
СкелетГрузится весь экран, и его устройство известно: фото, название, цена, кнопка.
Выгрузка истории покупок за год в файл, около минуты.
Прогресс с долейМинуту без понятного хода никто не ждёт. Доля показывает, что дело движется.
Кнопка «Применить» у промокода: проверка идёт 1–3 секунды.
Индикатор на местеПроверяется одно поле. Крутилка у кнопки, остальной экран работает как работал.
4Ошибка ввода и ошибка системы
Ошибку ввода человек исправляет сам, ошибку системы — нет. Поэтому показывают их по-разному.
Ошибка ввода — человек ввёл то, что нельзя принять: в телефоне не хватает цифры, не указан дом. Причина в поле, и исправить её можно в этом же поле.
Ошибка системы — не получилось по причине, которую в поле не исправить: пропала связь, не ответил сервер, не ответил платёжный сервис.
Ошибка ввода
Ошибка системы
| Вопрос | Ошибка ввода | Ошибка системы |
|---|---|---|
| Кто исправит | Человек, в этом же поле | Не человек: остаётся повторить, подождать или выбрать другой путь |
| Где показать | У поля с ошибкой | Там, где было действие: у кнопки или на месте списка |
| Что сказать | Что вписать: «Укажите номер дома» | Что не получилось и что с данными: «Адрес не сохранился, введённое осталось в полях» |
| Когда показать | Когда человек закончил с полем или нажал кнопку, а не на каждой букве. Пустое поле, из которого человек просто ушёл, — ещё не ошибка | Сразу, как стало ясно, что не получилось |
| Что сохранить | Всё, что человек ввёл. Заставлять вводить заново — худшее, что можно сделать после ошибки | |
Когда проверять поле, большие системы решают по-разному. В Nielsen Norman Group советуют показывать ошибку сразу, как человек закончил с полем. GOV.UK проверяет только по кнопке «Продолжить»: так человек не видит ошибок, пока заполняет форму. Оба способа лучше, чем проверка на каждой букве. Подробно этот спор разобран в уроке «Формы», Middle.
То же с кодами и общими словами. «Ошибка 500» ничего не говорит покупателю, а «Что-то пошло не так» не говорит, что делать дальше.
Проверьте себя
Восемь ситуаций в приложении. Чья это ошибка?
В номере телефона девять цифр после +7.
Ошибка вводаИсправляется в том же поле. Текст у поля: «В номере 10 цифр после +7, сейчас 9».
Список заказов не загрузился: сервер не ответил.
Ошибка системыПокупатель тут ни при чём. Сказать, что не загрузилось, и дать кнопку «Повторить».
По запросу «без кофеина» с фильтром «Капсулы» ничего не нашлось.
Не ошибкаЭто пустой результат. Объяснить, что мешает фильтр, и предложить его сбросить.
Промокод введён верно, но его срок закончился 1 сентября.
Ошибка вводаЭтот код принять нельзя, а другой можно ввести в то же поле. Текст у поля: «Срок промокода закончился 1 сентября».
Оплата не прошла: платёжный сервис не ответил за 30 секунд.
Ошибка системыДанные карты верные, дело не в них. Сказать, списаны ли деньги, и предложить повторить.
В корзине нет товаров.
Не ошибкаПустое состояние: сказать, что корзина пуста, и дать путь в каталог.
В поле «Дата доставки» набрано 31.09.
Ошибка вводаТакой даты нет. Сказать у поля, а ещё лучше дать выбрать дату в календаре, где её не выбрать.
Фото к отзыву не отправилось: пропала связь.
Ошибка системыФото хорошее, дело в связи. Сохранить отзыв и предложить отправить, когда связь вернётся.
5Успех: сказать, что получилось
После действия человек должен знать, что оно удалось. Насколько заметным сделать подтверждение, зависит от важности действия.
| Действие | Как подтвердить | Пример |
|---|---|---|
| Результат видно сразу на месте | Ничего дополнительно | Нажали «+», и на кнопке стало «2 пачки» |
| Результат в другом месте экрана или приложения | Короткая плашка, которая уходит сама | «Добавлено в корзину» внизу экрана |
| Важное действие или такое, которое не отменить | Экран или блок с подробностями: что сделано, номер, что будет дальше | «Заказ № 1043 оформлен, привезут завтра» |
Общее слово
Результат и что дальше
6Найдите недоделанные состояния
Листы состояний четырёх экранов, которые команда магазина отдала в разработку. Пять мест в них недоделаны.
Нажимайте на куски экранов, которые вы бы переделали. Под каждым куском написано, когда он появляется. В разборе будет, что с ним не так.
Мои заказы
Поиск
Адрес доставки
Оплата
- Скелет списка при первом открытии.Оставить. Ждать 2–3 секунды, грузится весь список. Серые строки показывают его форму, и экран не прыгает, когда заказы пришли.
- Крутилка на весь экран при переключении вкладок, 0,2 секунды.Убрать. Ответ быстрее секунды. Крутилка мелькнёт и закроет весь экран, будто что-то сломалось. Вкладка должна открываться сразу.
- «Заказов пока нет» и кнопка «Выбрать кофе».Оставить. Сказано, что здесь будет, и есть путь к первому заказу.
- Запрос остался в поле поиска.Оставить. Видно, что именно искали, и запрос можно поправить, не набирая заново.
- «Ничего не найдено» — и больше ничего.Дописать. Непонятно, опечатка это, товара нет или мешает фильтр. Скажите, что мешает, и дайте действие: сбросить фильтр, показать похожее.
- Поле «Телефон» с красной рамкой и без текста.Дописать. Цвет не все различают, а заметивший не поймёт, что не так. Под полем нужен текст: «В номере 10 цифр после +7, сейчас 9».
- Поле «Дом» с текстом «Укажите номер дома».Оставить. Ошибка у поля, текстом, и сказано, что вписать.
- Кнопка «Идёт оплата…» неактивна, пока нет ответа.Оставить. Видно, что нажатие принято, и второй раз не нажать — деньги не спишутся дважды.
- Плашка «Что-то пошло не так» пропадает через 3 секунды.Переделать. Это ошибка системы, и в ней самое важное: списаны ли деньги и что делать. Сообщение остаётся на экране, пока человек не решит, что дальше, и в нём есть «Повторить оплату».
- «Успешно!» и кнопка «ОК».Дописать. Непонятно, что успешно: оплата, заказ, доставка? Назовите результат — «Заказ № 1043 оплачен», — сумму и что будет дальше.
Все пять найдены. Почти везде состояние нарисовано, но человеку не сказано, что случилось и что делать дальше. А крутилка стоит там, где ждать не приходится.
7Задание
Возьмите свой экран и нарисуйте все его состояния. Выпишите, какого из них раньше не было в макете.
Часть 1 · Составить список, 15 минут
- Выберите экран с данными: список, поиск, форму, корзину. Экран, где ничего не грузится и ничего не вводят, для задания не подойдёт.
- Ответьте на четыре вопроса из начала урока: что видно, пока данные идут; что, если их нет; что, если не получилось; что после действия.
- Разберите пустоту по видам: бывает ли здесь «ещё ничего нет», «ничего не нашлось», «всё сделано».
- Разберите ошибки: по каждому полю — что можно ввести не так, и отдельно — что может не получиться у системы.
ЭКРАН: ______________________ Дата: __.__.____ ОБЫЧНОЕ: что видно, когда всё есть: ______________________ ЗАГРУЗКА сколько обычно ждать: ___ с в худшем случае: ___ с что показать: ничего / индикатор на месте / скелет / прогресс с долей ПУСТО ещё ничего нет: текст ______________ действие ______________ ничего не нашлось: текст ______________ действие ______________ всё сделано: текст ______________ ОШИБКА ВВОДА (по полям) поле ______________: что не так ______________ текст у поля ______________ поле ______________: что не так ______________ текст у поля ______________ ОШИБКА СИСТЕМЫ что не получилось: ______________ что с данными: ______________ что предложить: повторить / подождать / другой путь: ______________ УСПЕХ как подтвердить: видно на месте / плашка / экран с подробностями текст: ______________________ РАНЬШЕ НЕ БЫЛО В МАКЕТЕ: ______________________
Часть 2 · Нарисовать, 45 минут
- Скопируйте основной экран столько раз, сколько состояний в списке. Шапка и навигация общие, меняется середина.
- Нарисуйте каждое состояние по списку: загрузку по длительности, пустоту по виду, ошибку ввода у поля, ошибку системы у действия.
- Впишите настоящие тексты, а не «Текст ошибки». Пустое состояние без слов — недоделанный экран.
- Положите состояния рядом и подпишите, когда какое появляется.
Часть 3 · Проверить, 10 минут
- Пройдите каждое состояние двумя вопросами: понятно ли, что случилось; понятно ли, что делать.
- Покажите лист разработчику или коллеге и спросите, чего не хватает. Каждое «а что здесь показывать?» — пропущенное состояние.
Что должно получиться
- Лист состояний экрана: обычное, загрузка, пусто, ошибки, успех.
- Заполненный шаблон с текстами для каждого состояния.
- Строка о том, какого состояния раньше не было в макете.
План работы: 15 минут на список, 45 на макеты, 10 на проверку. Всего — чуть больше часа.
Частые сложности
- «Пустое состояние бывает раз в жизни». Зато это первое, что видит новый человек. По нему он решает, понятно ли здесь хоть что-то.
- «Текст ошибки напишет разработка». Разработка напишет то, что знает: код и слово «Ошибка». Что человеку делать дальше, знает тот, кто проектировал сценарий.
- «Не знаю, сколько будет грузиться». Спросите разработку, сколько обычно и сколько в худшем случае. Нарисуйте состояние для худшего, а рядом допишите: показывать, только если ответа нет дольше секунды.
- «Состояний слишком много». Большинство отличаются только серединой экрана. Нарисуйте середину, остальное скопируйте.
8Чек-лист и ошибки
Экран готов, если
- Состояния перечислены до макета: загрузка, пусто, ошибка, успех
- Пустое состояние говорит, что здесь будет и что сделать сейчас
- Загрузка показана там, где ждать дольше секунды
- Для ожидания дольше 10 секунд есть прогресс с долей
- Ошибка ввода стоит у поля и описана текстом
- Ошибка системы говорит, что не получилось, что с данными и что делать
- После ошибки введённое не пропадает
- Подтверждение называет результат, а не «Успешно»
Что мешает
- «Нарисую потом». Потом состояние рисует разработка — как успеет и без текста.
- Картинка вместо объяснения. Пустой экран красивый, но непонятно, что делать.
- Крутилка на всё. Даже там, где ответ приходит за долю секунды.
- «Что-то пошло не так». Человек не знает, что именно, и не знает, что делать.
- Ошибка одним цветом. Красную рамку видят не все, и непонятно, что исправить.
9Три ступени темы
В этом уроке учимся рисовать основные состояния экрана. На следующих ступенях — проверять экран на крайних случаях и описывать поведение элементов, а потом собирать общие паттерны для всего продукта.
| Ступень | Что нужно уметь | Как проверить результат |
|---|---|---|
| Junior — этот урок | Перечислять состояния до макета; рисовать пустой экран с объяснением и действием; выбирать индикатор загрузки по длительности; отличать ошибку ввода от ошибки системы; называть результат в подтверждении | У экрана нет состояния, про которое разработка спросит «а что здесь показывать» |
| Middle | Проверять экран на длинном тексте, сотнях строк, пустых полях, отсутствии прав и медленной сети; отличать состояние элемента от состояния экрана; описывать поведение словами | Разработка задала по макету меньше трёх вопросов о поведении |
| Senior | Находить задачи, которые в продукте решены по-разному, собирать из них общий паттерн, заменять разнобой и выводить устаревшее | Новый экран с этой задачей собран по паттерну кем-то другим |
Что почитать дальше
- Designing Empty States in Complex Applications: 3 GuidelinesТри правила для пустых экранов: сообщить, что происходит, подсказать, как здесь всё устроено, и дать путь к главному действию. Там же — почему нельзя показывать «Нет записей», пока данные ещё грузятся. Статья 2021 года, примеры из сложных рабочих приложений.
- Skeleton Screens 101Когда показывать скелет, когда крутилку, а когда полосу прогресса: меньше секунды — ничего, до 10 секунд — скелет для целого экрана и крутилка для одного блока, дольше — прогресс. Там же — почему скелет из одной шапки и подвала не помогает.
- Error-Message GuidelinesКак показать ошибку, чтобы её заметили, как написать, чтобы поняли, и как сберечь силы человека — в том числе не стирать то, что он ввёл. Уточнение к уроку: человек ушёл из пустого поля — это ещё не ошибка.
- Empty statesТри вида пустоты в дизайн-системе IBM: данных ещё нет, пусто после действия человека (поиск без результатов, всё сделано) и пусто из-за ошибки или прав, — что сказать и что предложить в каждом. Справка дизайн-системы для рабочих приложений.
- Refactoring UIГлава «Don’t overlook empty states» из раздела «Finishing Touches»: пустой экран как место для первого действия. Три страницы, текст закрыт.