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

Несмотря на популярность вышеописанного механизма, использование диалогового окна подтверждения действия — это, в 90% случаев, неправильно. Поговорим о том, почему это так.
Вот некоторые проблемы, сопровождающие применение механизмов подтверждения действий пользователей:
Перечисления недостатков диалоговых окон, используемых для подтверждения действий, недостаточно для того чтобы ответить на вопрос о том, почему ими пользоваться не рекомендуется. Поэтому давайте поговорим о плюсах механизмов отмены действий.
Вот некоторые сильные стороны средств, позволяющих отменять действий:
Итак, если возможность отмены изменений — это очень хорошо, давайте подумаем о том, как лучше всего реализовать в приложении подобную возможность. Вот некоторые идеи, касающиеся реализации качественного механизмы отмены изменений:

Предложение об отмене действия в Gmail
Иногда показ диалогового окна подтверждения действия — это всё, что может сделать разработчик, чтобы защитить пользователя от необдуманных необратимых действий. В таких случаях важно спроектировать подобное окно так, чтобы оно по-настоящему защищало бы пользователя от ошибок.
Вот некоторые соображения, касающиеся проектирования диалоговых окон подтверждения действий, применимые в тех случаях, когда реализовать функционал отмены действий невозможно:
Вот что написано по этому поводу в книге «Алан Купер об интерфейсе. Основы проектирования взаимодействия», в разделе «Диалоговое окно, которое кричало: «Волк!» (Купер А., Рейман Р., Кронин Д. Алан Купер об интерфейсе. Основы проектирования взаимодействия. – Пер.с англ. – СПб.: Символ-Плюс, 2009. – 688 с., ил.):
Подтверждения иллюстрируют интересный парадокс человеческой психики: они срабатывают, только если их не ожидают. Это обстоятельство не кажется важным, пока вы не изучите контекст. Если запрашивать подтверждение в обычных ситуациях, пользователь быстро привыкает к таким диалоговым окнам и выдаёт подтверждение не глядя. Подобная реакция становится делом столь же обычным, как появление самих диалоговых окон. Если в какой-то момент возникнет действительно неожиданная и опасная ситуация, к которой следует привлечь внимание пользователя, пользователь просто в силу привычки по-быстрому расправится с подтверждением. Подобно мальчику из притчи, который кричал: «Волк!», – диалоговое окно подтверждения не подействует в случае реальной опасности, потому что оно слишком много раз кричало, когда никакой опасности не было.
Чтобы диалоговые окна подтверждения работали, они должны появляться в тех случаях, когда пользователь почти наверняка щёлкнет по кнопке Нет или Отмена, и они ни в коем случае не должны появляться тогда, когда пользователь скорее щелкнет по кнопке Да или ОК.

Необычный способ подтверждения удаления репозитория
Используете ли вы окна подтверждения действий в своих проектах?

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

Несмотря на популярность вышеописанного механизма, использование диалогового окна подтверждения действия — это, в 90% случаев, неправильно. Поговорим о том, почему это так.
Проблемы диалоговых окон подтверждения действий
Вот некоторые проблемы, сопровождающие применение механизмов подтверждения действий пользователей:
- Эти механизмы прерывают работу пользователя. Идея, которая лежит в основе применения диалоговых окон для подтверждения действий, заключается в том, чтобы остановить работу пользователя. Это должно дать ему возможность подумать о последнем совершённом действии и понять — действительно ли он сделал именно то, что намеревался. Но проблема прерывания работы пользователя заключается в том, что это отвлекает его от того, что он пытался сделать. Появление диалогового окна принуждает пользователей перестать думать о том, что они делают. Они, вместо этого, пытаются понять новую информацию.
- Мы, по привычке, нажимаем на кнопку, подтверждающую выполнение действия. Человек формирует сотни привычек, которые помогают ему жить. Одна из таких привычек заключается в том, что когда мы видим диалоговое окно, предлагающее что-то подтвердить, мы очень быстро его закрываем, не особенно вглядываясь в его содержимое. Привычку быстрого закрытия диалоговых окон закрепляет ещё и то, что в современном интернете каждый владелец сайта считает своим долгом показать посетителю всплывающее окно с предложением зарегистрироваться.
- Мы не читаем тексты, выводимые в диалоговых окнах, предназначенных для подтверждения действий. Даже если человек и прочитает текст в подобном окне, он не всегда даёт себе возможность остановиться и подумать о прочитанном. Если не происходит ничего экстраординарного, мы полагаем, что всё идёт как надо, и нажимаем на кнопку подтверждения действия просто из-за того, что она позволяет убрать маленькое окно, которое перекрывает то, чем мы сейчас занимаемся. Главная кнопка в любом подобном окне немедленно воспринимается как кнопка, которая позволяет пользователю продолжить заниматься тем, чем он занимался.
Перечисления недостатков диалоговых окон, используемых для подтверждения действий, недостаточно для того чтобы ответить на вопрос о том, почему ими пользоваться не рекомендуется. Поэтому давайте поговорим о плюсах механизмов отмены действий.
Сильные стороны механизмов отмены действий
Вот некоторые сильные стороны средств, позволяющих отменять действий:
- Эти средства создают, исходя из предположения о том, что пользователь уверен в том, что он делает. Главное преимущество средств отмены действий перед окнами подтверждения заключается в том, что система не пытается предсказать действия пользователя. Нечто вроде кнопки отмены просто решает свою задачу, не задавая пользователю вопросов о том, уверен ли он в выполняемом действии.
- Механизмы отмены действий не мешают работе пользователя. Избавление от окна подтверждения действия и замена его менее заметным элементом управления, служащим для отмены изменений, позволяет не прерывать работу пользователя и не отвлекать его от решаемых им задач. Кнопка для отмены изменений — это не совершенно новый интерфейс, появляющийся перед пользователем и требующий внимания к себе.
- Средства отмены действий помогают пользователям исследовать программы. Если у пользователя есть возможность отменять действия, это его поддерживает, говоря ему о том, что он не может что-либо непоправимо испортить. Мне часто доводилось слышать рассказы не особенно продвинутых пользователей ПК о том, что они не пытаются работать с неизвестными элементами интерфейсов приложений из-за того, что не хотят что-то испортить.
- Использование механизмов отмены действий позволяет пользователям самим видеть результаты своей работы, а не читать об этом. Иногда пользователи не уверены на 100% в том, что их действия приведут именно к тем результатам, к которым они стремятся. Наличие в приложении чего-то вроде кнопки отмены действия позволяет пользователю видеть результаты своих действий и результаты их отмены. Это помогает пользователю определиться с тем, внёс ли он в систему именно то изменение, которое хотел внести.
Эффективное использование механизмов отмены изменений
Итак, если возможность отмены изменений — это очень хорошо, давайте подумаем о том, как лучше всего реализовать в приложении подобную возможность. Вот некоторые идеи, касающиеся реализации качественного механизмы отмены изменений:
- Давайте пользователю обратную связь. Если пользователь не видит результатов того, что сделал, то возможность отменить это действие не так уж и важна. Поэтому давайте пользователю обратную связь. Позвольте ему увидеть результаты совершённого им действия. Например — если в OS X файл отправляют в корзину — это сопровождается звуковой и визуальной обратной связью.
- Сделайте элемент управления, позволяющий отменить действие, хорошо заметным. Если удалять что-либо в вашей программе — это обычное дело (скажем — при работе с некими списками), разместите элемент управления для отмены действия прямо рядом с удалённым элементом. Если отмена действия может понадобиться не особенно часто — то хорошим вариантом будет показ всплывающей подсказки в верхней или в нижней части экрана. Например, именно так сделано в Gmail. Там, в верхней части экрана, показывают жёлтый баннер, содержащий ссылку для отмены действия.

Предложение об отмене действия в Gmail
- Сделайте так, чтобы элементы можно было бы восстанавливать. Создайте в своей программе место, куда попадают удалённые элементы и не уничтожайте их безвозвратно. Местом хранения удалённых элементов может быть нечто вроде корзины, архива, папки «Исходящие сообщения». Подобная стратегия используется в Trello, где карточки не удаляются, а, вместо этого, архивируются. Если пользователь хочет восстановить карточку, он может перейти в архив и сделать это, вернув её туда, где она была.
- Откладывайте выполнение необратимых действий. Если действие, которое выполнил пользователь, нельзя отменить — откладывайте его выполнение. Например, в Gmail есть возможность откладывания отправки писем на 15 секунд.
Что если отменить действие невозможно?
Иногда показ диалогового окна подтверждения действия — это всё, что может сделать разработчик, чтобы защитить пользователя от необдуманных необратимых действий. В таких случаях важно спроектировать подобное окно так, чтобы оно по-настоящему защищало бы пользователя от ошибок.
Вот некоторые соображения, касающиеся проектирования диалоговых окон подтверждения действий, применимые в тех случаях, когда реализовать функционал отмены действий невозможно:
- Постарайтесь, чтобы диалоговые окна появлялись бы только в особых случаях. Лучший способ повысить эффективность использования диалоговых окон — сделать так, чтобы они появлялись бы не особенно часто.
Вот что написано по этому поводу в книге «Алан Купер об интерфейсе. Основы проектирования взаимодействия», в разделе «Диалоговое окно, которое кричало: «Волк!» (Купер А., Рейман Р., Кронин Д. Алан Купер об интерфейсе. Основы проектирования взаимодействия. – Пер.с англ. – СПб.: Символ-Плюс, 2009. – 688 с., ил.):
Подтверждения иллюстрируют интересный парадокс человеческой психики: они срабатывают, только если их не ожидают. Это обстоятельство не кажется важным, пока вы не изучите контекст. Если запрашивать подтверждение в обычных ситуациях, пользователь быстро привыкает к таким диалоговым окнам и выдаёт подтверждение не глядя. Подобная реакция становится делом столь же обычным, как появление самих диалоговых окон. Если в какой-то момент возникнет действительно неожиданная и опасная ситуация, к которой следует привлечь внимание пользователя, пользователь просто в силу привычки по-быстрому расправится с подтверждением. Подобно мальчику из притчи, который кричал: «Волк!», – диалоговое окно подтверждения не подействует в случае реальной опасности, потому что оно слишком много раз кричало, когда никакой опасности не было.
Чтобы диалоговые окна подтверждения работали, они должны появляться в тех случаях, когда пользователь почти наверняка щёлкнет по кнопке Нет или Отмена, и они ни в коем случае не должны появляться тогда, когда пользователь скорее щелкнет по кнопке Да или ОК.
- Сделайте процесс подтверждения действия необычным. Нужно стремиться к тому, чтобы сделать процесс подтверждения действия отличающимся от всего того, что обычно приходится делать пользователю. Например, на Github можно найти прекрасную иллюстрацию этой рекомендации. Там пользователю предлагают ввести в окне подтверждения удаления репозитория имя этого репозитория.

Необычный способ подтверждения удаления репозитория
- Используйте понятные надписи на кнопках. Сделайте так, чтобы на кнопке подтверждения было бы чётко описано выполняемое по её нажатию действие. Не стоит писать на таких кнопках что-то вроде
Да
илиПодтвердить
. Более вероятно то, что пользователь щёлкнет по кнопкеПодтвердить
, чем по кнопке, на которой написаноУдалить kittens.jpg
.
Используете ли вы окна подтверждения действий в своих проектах?

granvi
Статья ради статьи? Ну елки палки. Этим основам эргономики. Сто лет в обед
KasperGreen
Хорошая статья, есть на что сослаться. Для многих в настоящий момент — эти истины не очевидны
mrhitman47
Комментарий ради комментария?
Aios
granvi
Данный ресурс всё же, должен быть на острие технологий. А основ в интернетах и так хватает.
На кой плодить банальщину? Ее и так уже 90% всего интернета
edogs
В том смысле. что вот в гмыльном приложении есть такая бага — удалил сообщение, и вроде пошел дальше делами заниматься, потом минут через 15 смотришь — удаление не сработало. Или отправил, а оно так и не отправилось и валяется в черновиках. Бесит неимоверно.
aio350
по поводу github: буквально сегодня вместо одного репозитория удалил другой. потому что название удаляемого репозитория, которое нужно ввести, как ни странно, можно копировать. одно из решений — user-select: none: скопировать все равно можно, но сложнее, чем набрать. однако виноват в удалении не github, а я сам. надо думать, что удаляешь. лично меня чрезмерная опека сервисов раздражает, поэтому специально для github пришлось стать мастером копипаста, за что и поплатился. почему у них нет корзины?)
andrew911
Не очень понятно как блокировка копирования бы помогла от автоматического набора руками?
Тут логика в том чтобы сломать автоматизм — увидел окно — нажал согласие и еще раз посмотреть толи ты собираешься удалить.
richman5
Дополнительное согласие проходится не задумываясь автоматом и, по сути, ни от чего не защищает. А в корзину надо специально заходить, поэтому это лучший вариант с точки зрения безопасности.
khim
Вы лучше объясните что вы такое с GitHub делаете, что вам постоянно репозитории нужно удалять.
richman5
Зачем постоянно? Достаточно один раз не то удалить — и это уже 100% фиаско.
khim
Читаем:
Вы уж меня извините, но если вы репозитории удаляете, как нормальные люди, раз в месяц или раз в год, то вы не станете «мастером копипаста».А если вы стали — то задумайтесь, почему…
richman5
Это уже про другое вопрос. А изначальный был в том, что любой может нечаянно скопипастить неправильное название (не того репозитория). Или вы никогда так не делаете и все удаляемое руками вводите?
khim
Я пока не выкладывал на GitHub ничего, что мне хотелось бы, потом, удалить.
Так что не могу ответить на этот вопрос.
andrew911
Так изначально и совсем не это было.
Разве если при удалении репозитария вставить туда название другого он удалится?
Got_Oxidus
У них есть такая функция.
Настройки (Settings) > Репозитории (Repositories), там будет переключатель на удаленные, будут кнопки «восстановить» (Restore).
ilyawg
Barma2012
Я мож туповат, или не догоняю чего…
Вот у меня операция очистки некоего журнала событий. Выводится окно подтверждения, и в случае ответа «Да» — выполняется очистка без возможности восстановления (память заполняется нулями, речь о микроконтроллере или ПЛИС, интерфейс с пользователем — на ПК).
Как это подтверждение можно заменить на Отмену действия?
MonkAlex
Вы собираетесь очистить журнал, це очень опасная операция (память будет заполнена нулями!).
Отменить Отмена
:D не стоит искать в этом какой то смысл, отмена действия нужна в популярных кейсах (я часто удаляю файлы в корзину, но у меня остается вариант восстановления из корзины), но предупреждение нужно перед редкими кейсами (форматирование диска например).
fougasse
Считать текущее состояние и восстановить, как вариант.
Как делают при апдейтах сложных железок — удваивают хранилище, заливают новую прошивку во второй раздел, проверяют и потом, как можно более атомарно, переключают разделы, оставляя старое как read-only. Помогает, если что, откатиться.
tester12
Можно и не удваивать хранилище, а хранить копию прошивки на компе.
fougasse
Нужно минимальное на девайсе иметь, т.к. загрузчик тоже нужно обновлять иногда.
AC130
Когда пользователь щёлкает на «Отмену действия» выводите ему диалоговое окно, похожее на то, которое было при операции удаления, и укажите в окне «операция невозможна. OK, Отмена». Пользователь по привычке щёлкает ОК, тем самым подтверждая что он согласен с невозможностью восстановления данных.
Nalivai
Очевидно, заполнять память нулями не сразу, а через время, но пользователю показывать пустоту и кнопку «отменить удаление».
Barma2012
Наверное, ваша идея может подойти, благодарю ))
Но вот по какому критерию выполнять настоящую очистку?
Если по времени — то через какое? А если до истечения этого времени нудно будет показать журнал пользователю. или, не дай бог, добавить туда новую запись?
Nalivai
Можно сделать как в файловых системах, запись помечать флагом «удалено» и не показывать, но физически оставлять, оставляя возможность для undelete, и переписывать поверх если место кончается.
А можно просто, поскольку у нас задача просто спастись от мисскликов, временно сместить указатель начала списка на конец записей, и запустить таймер секунд на 30. По окончанию (или если место под журнал кончилось), физически уже обнулить память и сдвинуть обратно. А если юзер нажал отмену, то просто двигать обратно без обнуления.
BigBeaver
По заполнению буфера действий (новых записей), которые должны быть сделаны после очистки. То есть, просто переставляете указатель начала лога на текущую позицию и спокойно пишете дальше в хвост какие-то N записей. По достижению N записей или M времени или K сеансов сдвигаете эти новые записи в начало, зануляя остальное.
Также можно просто писать записи по одной с начала, очищая хвост по достижении N. Тогда полная отмена не будет возможно, но процент потерь будет обратно пропорционален времени до отмены.
richman5
Время до полной очистки может быть любое (например 1 мин), но до его истечения никакие операции с этими данными не должны быть возможны (если принудительно не подтвердить окончательное удаление).
Это проблема баланса между скоростью работы с базой и безопасностью. Граница всегда будет не очень комфортна.
KivApple
Использовать логическое удаление — взводить флаг, что данные удалены, который проверяют все подпрограммы и делают вид, что данных нет (при попытки записи пишут поверх и реально удаляют данные). Если физическое удаление принципиально (например, вопрос приватности) выполнять его с задержкой, если флаг не был снят в течении какого-то времени или при следующем старте железки (если она часто перезапускается, а не работает годами без перезагрузки, разумеется). Подтверждение обычно самое простое в техническом плане решение, очень просто надобавлять диалоговых окон в уже имеющийся код, отмена действия требует изменения внутренней логики работы приложения.
RaFaeL-NN
Времена, когда пользователи бездумно жали «Да» во всех подряд диалоговых окнах закончились тогда, когда каждый первый сайт стал упорно проситься в уведомления. Приходится читать и делать правильный выбор
TheShock
Я вообще отключил эту теперь бессмысленную фичу
NikitaCartes
Сайты начали эволюционировать и теперь показывают сначала не встроенное в браузер окно, а своё собственное, на JS.
TheShock
Ну подписать всё-равно не смогут
khim
Зато показать окошко-то смогут.
Высший пилотаж — это вообще какое-нибудь такое окошко показать поверх всего прямо в HTML, а уже убирать — через JS.
Чтобы точно не избежали.
jakobz
Умиляют подобные статьи. Всем давно понятно что undo и отсутствие окошек — куда лучше чем модалка с подтверждением. Но почему-то, с появлением касты UXD — далеко не всем понятно, что undo — часто на порядки более сложная в реализации штука.
Особенно умиляют молодые UXD, которые на голубом глазу приносят бизнес-аппам картинки с нотификашками типа «сотрудник Иван уволен [отменить]». Уходят грустные, обиженные почему-то на разрабов.
Кто-нибудь хоть приписывал к таким статьям врезку про то, почему UXD часто с такими штуками посылают. Можно что-нибудь про мульти-вселенные, с отсылками к фильму «Назад в будущее» — часто именно настолько сложно сделать отмену действия. Особенно когда у тебя распределенная система, и ты запустил процесс, в котором параллельно участвует десятки систем и людей.
Nalivai
А с другой стороны, часто инерция мешает понять что совсем даже и нет никакой магической проблемы с отменой действия, даже если это распределенная система. Есть нежелание ломать парадигму, но это не проблема молодых дизайнеров, это проблема старых бэкендеров
KivApple
Если захотеть, то в 99% случаев отмену сделать можно. Например, просто задержкой выполнения операции. Тот же gmail позволяет отменять отправку сообщения, хотя на первый взгляд отменить отправку сообщения на внешний неподконтрольный сервер (и при том, что протокол электронной почты не предусматривает никаких отмен) выглядит не менее сложной задачей, чем отменить официальное увольнение сотрудника. Но на помощь приходит задержка перед выполнением операции, логическое удаление и комбинация этих двух методов (сначала удалить логически, физически когда-нибудь потом). Просто бекэндерам придётся немного подумать, а не написать шаблонный CRUD.
Никто не предлагает делать бесконечную возможность отмены, это действительно, не всегда возможно. Возможность отмены нужна для защиты от ошибочных действий. Если руководитель понял, что уволил не того сотрудника, спустя неделю после увольнения, то это уже клиника.
klvov
Про этот принцип еще сам Джефф Раскин писал еще 20 лет назад (Раскин Д. Интерфейс: новые направления в проектировании компьютерных систем. — Пер. с англ. — СПб: Символ-Плюс, 2003. — 272 с., ил). Вот цитата, аж в виде скришота, для солидности:

Впрочем, хорошее повтори и еще раз повтори.
gleb_l
В принципе, в мире программ все можно либо отменить (применив обратную операцию), либо заснепшотить и откатить (если обратной функции не существует, или она слишком трудоёмка). Другое дело взаимодействие с физическим миром — если после подтверждения фреза уже коснулась заготовки — то обратного пути не может быть.
В реальности же заниматься имплементацией обратимых операций часто никто не хочет, поэтому ограничиваются грозными попапами с красным болдом и капсом — но это, как всем здесь очевидно, защищает скорее самих авторов программ от претензий пользователей.
Более-менее вменяемым компромиссом может быть внезапный вопрос/задание, ломающее шаблон мыслей юзера — типа «введите простое число, большее X” — но это тоже не 100% панацея — так как мозг часто проявляет свою «двухядерность» — одна часть не задумываясь о смысле продолжения просто просит вторую решить задачу и нажать ОК вместо просто нажатия ОК ;)
Nalivai
В нашем интерфейсе станка, после запуска программы, пока считался lookahead, интерфейс показывал грубо что за деталь и общие параметры программы, коэффициенты подачи, материал, инструменты и прочее. Все это специально делалось небыстро и обратимо, давая 15-20 секунд на осознать даже еще до того как началось первое движение.
Плюс полминуты к программе погоды не делают, она может часы занимать, а удобства такой подход добавляет.
Чем заставлять пользователя прыгать выше головы, нажимая на красные кнопки, лучше подумать и помочь ему поменьше косячить.
BlackStar1991
Ох и статья, вредных советов! Как же это раздражает, что если я к примеру хочу удалить плагин WordPress, то будь добр удали его, и не надо оставлять мне следы жизнедеятельности о плагина в базе данных (Если мне будет надо, я снова востановлю) Но нет же, если разработчик не позаботился о правильном удалении получи портянку неиспользуемого кода в базу. Если я хочу удалить свой аккаунт в социальной сети (даже если на меня сейчас нашло помутнение), то надо это сделать, а не просто скрыть мою страницу, что б потом за мой лайк под неугодной правительству фото меня ещё привлекли. Не надо так делать! Если пользователю дается право на удаление какой-то информации, это право должно быть реализовано. (Бэкапы вроде ни кто не отменял)
DracoL1ch
Как проверить, удалено или скрыто? Ждать слива? Ставить прокурора каждому сервису?
Как организовать удаление в бд, которые не рассчитаны на удаление из-за фрагментации и других фич с этим связанных?
KivApple
Ну как бы соцсеть может слить и данные об «удалённом» аккаунте. Если между соцсетью и спецслужбами есть интеграция (а иначе скрытые для публики данные не увидит и товарищ майор, если только он не успел сделать нотариально заверенный скриншот, но в таком случае вам уже не поможет вообще ничего), то скорее всего полное удаление данных запрещено законодательно и за реализацию такой функции соцсети прилетит как минимум штраф, а то и проблемы посерьёзнее. А раз сохранение резервной копии для спецслужб всё равно неизбежно, то почему бы не дать пользователям возможность восстановить страницу в течении какого-то времени.
Nalivai
Соцсети хранят инфу вечно, и это тоже неправильно. Но вечно хранить никто и не призывает. Призывают хранить столько, чтобы человек успел понять что он что-то натворил и успел передумать. А сколько это — зависит от ситуации, секунды, минуты, дни.
Но естественно, удаление должно рано или поздно привести к удалению.
BlackStar1991
Оно не приведет к удалению. Если на кнопке написано «Удалить» — она должна удалять, а не скрывать, прятать, перемещать во временное хранилище, или делать копию для моих данных для спец служб и тд. Если пользователь не читает, предупреждающие сообщения это исключительно его проблемы.
Nalivai
У нас цель сделать удобный интерфейс, или педантично исполнить какой-то строго определенный кодекс, основанный исключительно на «так всегда делали»?
У нас нет и никогда не может быть задачи сделать так, чтобы у пользователя были «исключительно его проблемы», это худшее что может случиться с UX. У нас должна быть задача сделать пользователю удобно, и она решается в том числе подкапотной магией временных бэкапов, не смотря на то что там написано на кнопке.
Опять же, когда вы нажимаете удалить на файл, он физически-то не удаляется, а только помечается удаленным. С этим-то у вас нет проблем?
khim
Я боюсь тут даже вопрос не в UXD, а в юристах.
Ну вот вы же просите их отменить.
AndrewCreator
Несмотря на все приведенные доводы, считаю что лучшее решение это — комбинация нескольких. То есть правильнее давать пользователю возможность отмены действия (если это можно реализовать) но также ждать его подтверждения.
CoolCmd
бороться с автоматизмом иногда можно меняя порядок кнопок в диалоге подтверждения. если в системе (винде, например) принято кнопку «да» размещать слева, то в диалоге она должна быть справа. и еще лучше выделять кнопку «отмена».
ibrin
И еще чтобы первые пять секунд кнопка «ДА» убегала от указателя мыши.
khim
Тут уже рассказивали про многозадачность мозга. Даже если вам нужно будет решить диффур, чтобы что-то удалить, но вы будете этот диалог видеть достаточно часто… Ну научитесь быстро решать диффуры, только и всего.
ibrin
Это чтобы пользователя позлить в дополнение к рандомному интерфейсу.
На самом же деле просто нужна адекватность мер.
Бывало приходилось набирать YES полностью и нажимать ENTER, чтобы подтвердить намерения.
khim
Не вижу тут ничего плохого, если это действие, которое вы совершаете, скажем, раз в месяц. Или ещё реже.
Если же подтверждать приходится постоянно — то можете считать у вас там никакого подтверждения и нету…
CoolCmd
кстати, в Firefox в диалоге загрузки файла кнопка «OK» несколько секунд неактивна (disabled)
MonkAlex
Довольно толковая защита от случайного нажатия, я доволен.
netch80
Это действительно намеренный таймер? Тогда непонятно, почему это действие так принципиально выделено.
CoolCmd
видимо чтобы случайно не запустить скаченный exe-шник
netch80
Так он по этой кнопке не запускается, только скачивается, и такое отложенное ожидание происходит для всех файлов.
MonkAlex
Ну таки есть возможность сразу открыть файл в связанной с ним программе — тоже ничего хорошего.
Exe файлы раньше тоже можно было запускать автоматом, потом отключили.
Nalivai
Звучит как агрессивный дизайн, воюем с пользователем. Когда я встречаю такое в реальности, оно меня только раздражает. Ментальное усилие тратится не на вопрос «а не фигню ли я творю», а на войну с дизайном и раздражение на того кто это придумал.
Aleshonne
Лучше вообще не использовать кнопки «Да»/«ОК» и «Нет»/«Отмена». Например, подтверждение очистки журнала в одной из программ моей компании содержит кнопки «Очистить» и «Не очищать».
netch80
А мне как раз удобнее наличие подтверждения на существенные действия. Внимание расслабить слишком легко, а дополнительный контроль на существенные действия помогает лишний раз проверить детали.
khomaldi
Я думаю, что если вы используете подтверждение действия, то будет куда лучше добавить ещё и отмену действия. Потому что когда реализована только отмена действия (ещё и в 5 секунд), то я, например, в новом интерфейсе паникую, пока ищу, куда нажать, чтобы отменить действие. Пять секунд мало.
Согласен насчёт названия кнопок. Гораздо легче бездумно кликнуть на «ОК», чем на «Удалить most-important-file.txt»
perfect_genius
А какие минусы у промежуточного варианта — кнопка, которую надо удерживать некоторое время? Что-то редко где вижу такое решение. И случайно не нажмётся, и отменить есть возможность.
khomaldi
Я думал о кнопке, которую нужно нажать 2 раза, чтобы применить действие. Но в реальности это лишь будет «блин, кто придумал два раза нажимать на кнопку? Я трачу время»
khim
Даже если вы там чечётку заставите на камеру сплясать — неважно абсолютно. Хоть два клика, хоть долгое нажатие, хоть как.
Отмена в течении некоторого времени действует за счёт того, что вот это самое автоожидание после отправки/удаления — «вас не касается». «Репа», с точки зрения мозга, удалена, процесс завершён… можно «открутить стек задач» на один шаг и подумать — а ту ли, вообще, мы репу-то удалили, чёрт побери?