Реализуйте возможность отмены действия, вместо диалогов подтверждения
Aza Raskin, 18 июля 2007
Вы когда-нибудь испытывали неприятные чувства, осознав через долю секунды, что не должны были отвечать «OK» на вопрос «Вы уверены, что хотите выйти из программы».
Да? Тогда вы не одиноки, практически каждый хоть раз попадал в такую ситуацию, и это не ваша вина, это вина программного обеспечения.
Почему? Потому что разработчики должны знать о привычках пользователей и понимать, что бесконечное количество раз отвечая «OK» на различные вопросы, мы привыкаем делать это, не задумываясь, а результатом может стать потеря нескольких часов работы.
Почему они должны об этом думать? Потому что наши привычки формируются независимо от того, хотим мы этого или нет.
Привычки очень полезны, они помогают нам быстро и без лишних размышлений реагировать на действия программ, уменьшают вероятность того, что вы забудете то, что изучали. В случае с вопросом: «Вы уверены, что хотите выйти из программы», привычки объединяют нажатие на кнопку «Закрыть» и «OK» в одно действие. Это хорошо, потому что в большинстве случаев мы уверены, что все делаем правильно и не хотим думать о вопросе. К несчастью, привычки иногда подводят нас, и мы понимаем, что ошиблись только тогда, когда ничего нельзя исправить.
Как дизайнеры мы должны сделать очень важный вывод, и, по сути, главное правило разработки интерфейсов: Хороший интерфейс должен учитывать привычки пользователей.
Возможные решения
А что если сделать предупреждение трудно игнорируемым? Если ненавязчивые предупреждения недостаточно эффективны, давайте остановим программу, поморгаем экраном и подадим громкий и протяжный сигнал, чтобы наверняка обратить внимание пользователя. Можете попробовать, это тоже не работает, чем более навязчиво предупреждение, тем быстрее его закрывает раздраженный пользователь (кликом на кнопку «OK»), и тем больше ошибок будет допущено.
Тогда может быть сделать так, чтобы предупреждение нельзя было проигнорировать? Если привычки пользователей создают проблемы, давайте сделаем интерфейс так, чтобы нельзя было выработать привычку, тогда пользователю придется остановиться и подумать, прежде чем ответить на вопрос, что гарантирует сознательность ответа.
Мысль не новая, в духе, «Введите n-ное слово этого предложения, чтобы продолжить». В игре Guild Wars, например, при удалении персонажа нужно не просто нажать «OK», а ввести его имя. К несчастью это не всегда работает:
- Из-за необходимости думать над непривычными задачами, скорее всего решения станут обдуманными, и мы перестанем терять несохраненные документы (преодолеем первый по тяжести грех программного обеспечения).
- Это быстро начнет раздражать, потому что требует внимания и отвлекает от работы (получим второй по тяжести грех программного обеспечения).
- Это очень медленно и более трудоемко, чем стандартный подход (третий по тяжести грех программного обеспечения — требовать больше работы, чем необходимо).
Удаление персонажа в Guild War очень редкая задача, поэтому пункты 2 и 3 для нее не актуальны, но требовать ввести имя документа, чтобы выйти из программы, не сохраняя его, будет слишком обременительно.
Так что же мы решили? Хороший интерфейс должен учитывать привычки пользователей. Делая предупреждения большими, громкими и усложняя их игнорирование, едва ли можно добиться положительного результата, это только ухудшает положение. Может быть, стоит совсем убрать предупреждения?
Отмена действий, путь к решению проблемы
Никакие предупреждения не могут гарантировать безопасность ваших данных, а развитая возможность отмены действий может. Вы могли бы спокойно закрывать программу, не беспокоясь о сохранении документов, и быть уверенными в том, что не потеряете результаты своей работы.
Чтобы пользователь не попал в неприятную ситуацию из-за привычек, разработчики должны учитывать их и давать возможность исправить любую ошибку пользователя.
Это приводит нас к еще одному важному выводу: Никогда не используйте предупреждения, если есть возможность отмены действия.
Google Mail отличный пример следования этому правилу, при удалении писем, мы не получаем никаких предупреждений, но всегда есть возможность отменить наше решение. При этом большое внимание уделяется информированию пользователя о выполненном действии и заметности кнопки отмены. Хорошо работающая отмена действий позволяет пользователям меньше беспокоиться и увереннее работать.
Конечно, это только первый уровень защиты, даже после того как вы удалили сообщения, они не удаляются безвозвратно, а остаются в корзине, если окажется, что они удалены ошибочно, это всегда можно исправить.
По неизвестным причинам Google Calendar не усвоил этот полезный урок, событие легко удалить по ошибке, а на предупреждение ответить по привычке, использование отмены действия в этом случае было бы очень удобным решением.
На самом деле даже Gmail не совсем усвоил этот урок, если вы захотите удалить метку, то увидите стандартное предупреждение, почему Google не сделал так, чтобы они перемещались в корзину, из которой их можно было бы восстановить? Возможно потому, что стереотипы о том, где использовать корзину, а где предупреждение достаточно силен и нужна смелость, чтобы преодолеть его. Даже компании, которые славятся хорошим дизайном, такие как 37Signals, часто допускают эту ошибку.
Использование предупреждений вместо отмены действий, это путь наименьшего сопротивления для программистов, который не требует значительных затрат и размышлений, но это не лучший выбор с точки зрения удобства и безопасности использования приложений.
Заключение
Предупреждения — это одна из причин потери документов, недоверия к компьютеру и самообвинений. Есть простой и надежный метод решения этих проблем — используйте отмену действий, вместо предупреждений.
Следующий раз, когда увидите предупреждение вместо возможности отмены действий, пошлите разработчику сайта или приложения, приятное письмо с предложением реализовать отмену действий, приложите к нему ссылку на эту статью.
Сделаем веб удобнее, объявим войну предупреждениям!
Translated with the permission of A List Apart Magazine and the author[s].

















Sam 18 июля, 2007 18:04 #
Спасибо
Отличный перевод. Специально прорпустил заметку на ALA, чтобы почитать на русском ;)
Pashka R. 18 июля, 2007 18:24 #
Отличная статья. Спасибо за перевод.
Александр А. Реушкин 18 июля, 2007 19:27 #
А как же приложение?
Т.е в случае работы с вордом это будет выглядеть как появляющееся сообщение после закрытия программы? Тогда это будет обычное окно, по крайней мере с одной кнопкой "Закрыть". И её можно нажать по привычке. Если я понял, то что закрыл ворд с не сохранённым документом не сразу после закрытия, а на следующий день?, когда стал искать документ, который печал вчера?
Лучше было бы просто при закрытии программы сохранять документ в резервную папку, а при запуске программы показывать окно с документами.
Игорь 18 июля, 2007 20:16 #
Сегодня обсуждал заметку c ALA с диром. Его идея не вдохновила, но я дам ему Ваш перевод. Спасибо
Pashka R. 18 июля, 2007 21:30 #
Александр, имхо, при открытии ворда (в случае, если предыдущий сеанс был прерван ошибочно), можно об этом сообщать и давать возможность открыть последний вариант (заранее где-то сохранённый).
Tokolist 18 июля, 2007 22:38 #
Ага, Вы передвинули указатель мыши. Вы хотите чтобы изменения вступили в силу? [OK, Cancel] Вы действительно этого хотите? [Yes, No] Вы точно не передумали? [Abort, Ignore] :)))
Давайте юзьверя заставим развязать кроссворд дабы подтвердить свои действия :))
> Может быть, стоит совсем убрать предупреждения?
Это один из самых правильный вариантов. Тут главное шоковая терапия :) Один раз обжегся, второй и уже будешь трижды думать: "Стоит ли мне тыкать пимпочку с крестиком?". К стати, у многих прог так и есть, или хотябы есть возможность отключить подобные сообщения.
Если это действительно критично, то ИМХО самый удачный вариант придумали разработчики ФФ. Там при установке аддона есть некоторая задержка, прежде чем станет активной кнопка "Установить":
1. рефлекторно ее никогда не нажмешь
2. задержка не большая, поэтому сильно не раздражает
3. заставляет обратить внимание на сообщение
Такое не трудно сделать и в веб-интерфейсе.
ЗЫ в Ворде есть удобная вещь "Версии документа". Если есть параноидальная неуверенность сохранять документ или нет, то сохраняйте его версию.
Neutrino 18 июля, 2007 22:44 #
to Александр А. Реушкин
На пример в EditPlus реализован подобный функционал. Если включить эту настройку заранее, то при закрытии приложения все открытые на этот момент файлы, включая не сохраненные, сохранятся и откроются автоматически в следующий раз.
Все это хорошо для web-приложений, а для сайтов можно использовать onBeforeUnload, сохраняя к примеру данные формы, чтобы при случайном переходе на другую страницу не терять их.
ziplip 19 июля, 2007 0:26 #
вовремя
на прошлой неделе насчёт этого и думал. как сделать так, чтобы пользователь не видел всех этих надоедливых OK Cancel и пришёл к выводу, что лучше всего сделать как у Gmail'а -> написать что произошло и как это исправить. теперь вот переделываю.
п.с. автор, Вы отлично переводите, красочно и сочно ;-)
drak 19 июля, 2007 13:48 #
хорошая статься
Правда таким методом пользуюсь уже давно и стараюсь внедрять везде где нужно)
smmurf 21 июля, 2007 12:15 #
Правильное решение
Отлично, как раз недавно получил пищу для размышлений о том, как бороться с вырабатываемыми привычками в интерфейсах, продуманная система возможных отмен выглядит оптимальным решением, так как понять, что действие было выполнено по ошибке можно все равно с опозданием.
Задержка выглядит не лучшим решением по нескольким причинам.
-это так или иначе "крадет" внимание пользователя, оно вынуждено переключиться с выполняемой работы на посторонний раздражитель.
-программа должна относиться к результатам работы пользователя и к его времени как к самому ценному, задержка заставит потерять больше времени еще и на то, чтобы вернуться к прерванной работе, таковы особенности человеческого внимания.
Возможность отмены выглядит оптимальным выходом из ситуации.
Tokolist 23 июля, 2007 22:25 #
> Задержка выглядит не лучшим решением по нескольким причинам.
ИМХО там где критично спрашивать разрешения, то все-таки это - наилучшее решение. Повторяю еще раз: задержка (отвлечение внимания) не большая и поэтому Ваш шеф (или Вы) много денег не потеряете, а наоборот помимо денег на восстановление (если вообще такое возможно) сохраните и нервные клетки ;)
> Возможность отмены выглядит оптимальным выходом из ситуации.
Оптимальным:
1. где это возможно
2. где это не связано с большими затратами ресурсов
3. где программист получает соответствующую ЗП, ибо запрос подтверждения сделать намного проще и быстрей (но не всегда так)
Алексей Embedded 31 июля, 2007 18:37 #
Очень размыто все это...
Не могу понять выводы, сделанные автором статьи. Написано можно сделать так, а можно сделать иначе - в любом случае плохо.
Объявлять войну предупреждениям - очень неблагодарное занятие. Господи дай мне силы принять то, что я не могу изменить. Единственной адекватной причиной пойти против привычки пользователя - если привычка очень груба и подсознательно пользователь не принимает её, каждый раз испытывая дискомфорт при "привычном" действии.
Приложение должно реагировать на действия пользователя так, как он ожидает. А что ожидает пользователь это, как я себе представляю, должен выяснить специалист по юзабилити.
Просить пользователя ввести что-нибудь для подтверждения вещь хорошая, если изменения очень критические и масштабные. В таких случаях пользователь должен отвлечься пусть даже и потерять время.
То, что Google не усвоил урок звучит очень пафосно. На сколько я знаю, компания Google создала Gmail, Google Calendar - купила. Посмотрите на стиль графического расположения элементов управления в Microsoft Office и Microsoft Visio, тогда Вы поймёте о чем я. У Microsoft было намного больше времени чтобы сделать свой офис однородным, а такое не случилось.
А как же история удаления писем в Gmail? Удал письмо №1, потом - письмо №2 - как восстановить не залезая в Корзину. Удалил из корзины - восстановить уже нельзя.
Не лучше ли попытаться классифицировать все действия пользователя и попытаться подыскать (подобрать) адекватное решение: в каком случае использовать подтверждение, в каком возможность отмены, а в каком, вообще, вести журнал восстановления. Может у кого-то есть варианты такой классификации?
p.s. Пока писал свой комментарий, пришла идея: почему бы не сохранять вместе с документом историю действий для отмены. Изменили документ, закрыли программу. На следующий день пришли, открыли - и имеете возможность отменить несколько своих вчерашних действий.
Евгений 31 июля, 2007 19:46 #
Вы считаете привычку автоматически нажимать OK недостаточно опасной? Конечно, проблемы от этого не каждый день, а только в самом неподходящем случае.
Возможность очищения корзин это очень серьезная проблема. Несколько раз испытал ее на себе с корзиной в Windows, когда оказывалось, что в ней были нужные файлы. Проблему решил удалением корзины с рабочего стола, теперь уверен, что разработчикам Windows нужно либо убрать из контекстного меню пункт «Очистить корзину», либо убрать корзину с рабочего стола, возможность удаления мимо корзины тоже нужно исключить, то же самое касается корзин в остальных приложениях.
Отмена действий может быть очень ресурсоемкой для некоторых типов документов, для других, ресурсоемкость отмены может сильно зависеть от количества данных, над которыми проводились операции, в результате размер файлов может значительно увеличиться, хотя сама возможность очень привлекательна.
Мне кажется, такая классификация будет специфичной для каждого приложения.
Алексей Embedded 31 июля, 2007 20:40 #
Нет я считаю эту привычку опасной. Но выработалась она вследствие необдуманного нагромождения бесполезных диалоговых вопросов приложений. Это решается убиранием всех ненужных вопросов, а оставшиеся - те, которые действительно важны, должны использовать задержку (как в Firefox). На мой взгляд это единственное решение.
Полностью согласен. Надо спрятать функцию очистки корзины (усложнить ручное удаление), и удалять автоматически по времени или нехватке дискового пространства. Над безопасностью ещё надо подумать.
Реализовать отмену там где возможно сделать это малой кровью, а где нельзя, а очень надо - большими потерями, тем более сейчас ресурсоемкость приложений в современных ПК не самая большая проблема.
Не согласен. Все приложения манипулируют данными. Этих манипуляций не так уж и много. Они все типичны для каждого приложения. Если нельзя классифицировать, то нельзя понять саму область.
Евгений 31 июля, 2007 21:14 #
Мне кажется, такую возможность можно реализовать, сохраняя данные для востановления не в самом файле документа, а во временных файлах приложения, при открытии документа проверять редактировался ли недавно этот файл (например, с помощью хеша файла) и доставать для него данные восстановления. Преимущество этого метода в том, что можно будет использовать новую возможность для файлов старых форматов, таких как html, txt и другие в которых нет возможности хранить данные для отмены. Есть, конечно и недостаток заключающийся в том, что при переносе на другой компьютер, данные для отмены переноситься не будут, хотя это не всегда недостаток, а для существующих форматов выбора нет в принципе.
smmurf 31 июля, 2007 23:53 #
Ничто из этого не помешает вырабатыванию привычки.
Если убрать "лишние" запросы, возможно, привычка будет вырабатываться дольше, но в принципе вырабатыванию это не помешает. Как не спасет и задержка, привычка все равно будет выработана (сужу по себе), но до нажатия на кнопку пройдет больше времени, вот и вся разница.
Абсолютно согласен с тем, что возможность отмены должна быть многоуровневой, хотя наличие корзины само по себе - уже шаг в правильном направлении, который еще можно усовершенствовать.
И еще, естественно, возможность отмены не должна теряться между сессиями работы с документом.
Tokolist 1 августа, 2007 1:17 #
ИМХО ни какая это не прблема... тут два варианта:
1. отключаем корзину вообще (шоковая терапия о которой я говорил выше)
2. активно используем Shift+Del (как я) и только в оччеень редких случаях (когда нет уверенности) - Del. Здесь есть и третий случай, когда файл не обязательно удалять, а достаточно просто переименовать.
вот я о том же :)
еще и какая :) разленились программисты до предела :)
хм.. у меня такая привычка не выработалась :) видимо это субективно
Алексей Embedded 1 августа, 2007 9:37 #
У меня нет слов. Мы обсуждаем проблему с точки зрения доктора, а не пациента. Мы говорим не о себе, а о пользователях. И почему вообще я должен запоминать кучу всякой фигни чтобы сохранить файлы свои файлы в целости.
Ресурсоемкость приложений в современных ПК, при грамотном подходе, совсем не большая проблема. То, что некоторые программы потребляют много ресурсов, не значит что программисты ленивые или им мало платят. Это значит что ресурсоемкость ставиться заказчиком не на первое место.
.wpal » Blog Archives » Функция отмены последнего действия (Undo) - это просто (Часть 1) 24 сентября, 2007 11:36 #
[...] статье Never Use a Warning When You Mean Undo ( перевод этой статьи - Реализуйте возможность отмены действия, вместо диалог... ). Undo - это отличный спасательный круг, придающий [...]
Ruzzz 4 марта, 2008 20:47 #
C реализацией корзины, вроде просто, добавляем поле deleted. Далее выбираем, то что deleted=false, а если идем в корзину то deleted=true. Восстановление/удаление это изменение поля deleted.
Но вот как сделать Undo для команд Вставить/Изменить/Удалить? Еще бы добавить Redo.