开发人员和用户的不同理解

一个“简单”却“复杂”的例子

在我跟一个开发人员沟通,一个项目需求时。他们频频慨叹Mockup的设计所考虑情况相当完善。很多的程序都要实现预判和“非基础功能点”让开发的人员望而却步,不情愿去实现了。相比较之下,设计师为了让用户避免出错这一问题,而绞尽脑汁的去设想和考虑,开发人员更倾向于直接给一个只能被允许的操作行为,其他非法请求全部用来报错:“程序是严谨的,他错,我报错,以不变来应万变。简单一点不是很好吗?”程序员们甚至笑言:“考虑他们的体验那么多,我们开发的体验真不好,please,咱们能不能不要把事情搞的很复杂啊”。

在这个例子里,程序员看来,对于用户在和系统交互的过程中可能出现的各种情况均予以考虑,找寻用户理解起来最明确、操作最简单的、用户犯错最少的设计是缺少效率且浪费时间的。设计师这样做,是在将简单的事情复杂化。OK,现在就有这样一个问题,什么是“错误”?每当程序要处理错误的请求,是否是用户真的在“犯错”?

1、问题一,是谁的错?

我在某一天使用了一个网站的相册功能时,遇到了这样的情况(如下图):

“普通上传”是当前的选中状态,而上传“取消”的Button也是同样的样式。因为选中状态具有“肯定、确定”的潜在暗示,这样消极操作和积极操作的状态完全混淆了,用户在上传过程中很容易出现错点“取消”Button当作确定完成上传任务的误操作。

如果真的发生了这样的情况(应该不在少数,像我就发生了在本地好不容易选择好的图片误点了很像“确认”功能的“取消”而做无用功的情况),是的,用户犯错了,但是责任难道在用户吗? “本来我不会犯错,是你的设计使我犯错,或起码增加了我犯错的几率。”类似这样的错误,系统可能会报错,也可能不会;但真正应该检讨的却是系统本身,即: 用户对界面的理解和本身的系统意图出现误差,系统设计的歧义等固有缺陷导致用户出错。让用户频繁碰壁、产生挫折感的设计,其原因不是用户的愚蠢、而是设计的愚蠢。

2、问题二,这是不是一个错?

关于“错误”一词解释的第二点主要针对用户对系统的行为层来说,即:用户在人机界面交互过程中的误操作,系统未能通过更好的设计减少和避免用户的误操作带来的损失。

还是以“上传照片”为例(如下图):

一个模态的警示框,赫然告诉你,你想在这里上传相片,根本不该使用除了ie之外的浏览器!除了事先不打算通知你之外,同时也没的商量,因为我没有给你提供别的替代性方案和其他选择。

可以想象,用户想要使用这个上传相片的功能,之前已经需要经历过许多步骤,比如要打开自己相册存放的线上地址、要成功登录进入管理后台、要寻找到上传相片的功能模块等等,已经付出了相当一部分的操作成本。但是系统却很残酷的让用户的所有工作都白做了,不仅如此,还很野蛮的方式告诉用户:你从一开始就错了!在这个情况下,用户对系统的理解并不存在误差,但还是在交互过程中产生了严重的挫折感。但是,这真的是用户的错误和需要承担的责任吗?我认为不是:“严格说来,我不是犯错,我只是不清楚我能做什么、以及应该怎么做的规则。”

由以上两方面的案例,我想已经可以初步回答程序员同学的问题了:“是的,简单总是好的,但是在交互过程中,事件永远是复杂的,所可能发生的情况的可能性永远是那么多的,不是你为他考虑的多,让他简单;就是他自己试验和受挫的经历更多,更复杂,体验更差”。

3、问题三、该如何做:

关于容错设计的三个境界:

1、保证不是我们自己的错:屏蔽会引起歧义的设计、本身不合理的设计,不让用户因为系统的设计缺陷而导致犯错。

2、把简单留给用户,把复杂留给自己:通过系统的优良设计约束和指引用户的操作,把出现错误的可能降到最低。

3、减小错误的代价,帮助用户做对:当用户还是犯了错误,通过设计引导用户走向正确的方向。

对交互设计师而言,第一条是本应遵守的设计底线,二三两条是设计时可供遵循的设计指南。其中的第三条,关于出现错误后如何帮助和引导用户做对,尚轩同学接下来会专门撰文探讨这个问题,此处暂不赘述,下面主要就第二条谈一些看法:

二、如何做到避免用户出错:1、给予用户适当的行为约束——为用户封闭掉不正确的道路

这是Gmail的邮件处理区。

上图表示当没有选择任何一封邮件的时候,操作项被置灰,不可点选。这样在有效避免了误操作的同时,也展示和预告了当符合操作要求时,“更多操作”内提供的全部功能的内容。

下图则是已有选择邮件的时候,操作项全部激活为可用状态时的情况。对比上一张图未激活的状态,可以注意到除了激活与否的状态差别,还有其中的 “加注星标”功能在初始激活状态下是只有加注而隐藏了删除功能的、充分考虑了加注和删除功能的互斥性而予以隐藏。

通过用户的使用状态,通过有选择性的设置功能项激活、待激活的状态,以及功能项展示、隐藏的状态,是有效避免用户误操作的常用手段。这个考虑细心周到的设计在很大程度上预防了用户可能发生的操作失误。

时间: 2024-08-04 07:03:49

开发人员和用户的不同理解的相关文章

如何沟通开发人员

你是不是在这样的一个大公司里工作--他们工作效率不高,会议却是很多的?会不会让你去完成一个任务,去开发一个API,但你的不知道它的作用是什么?你只是按照文档在技术上把它正确的实现吗? "如何做"是一个开发人员在团队生活中需要知道的最重要的信息.但是无奈的是在一部分看来,这是开发人员在项目中唯一要知道的事情. 但是我们不能这么看. 如果不知道自己做的是什么,即使是最高效的Ruby on Rails家伙,最熟练的Spring开发人员,或PHP编程者,也做不出有价值的东西. 你们中有多少人,

Facebook拟推虚拟货币改变开发人员巨额收入现象

Facebook拟未来数周测试虚拟货币 北京时间5月12日上午消息,据国外媒体报道,通过游戏和虚拟物品,开发人员利用社交网站Facebook获得了巨额收入,但Facebook却无法从中分一杯羹.业界消息人士称,Facebook将在未来数周后测试一款支付系统,这种情况将会得到改变. 一名消息人士证实了Facebook测试支付系统的时间,并表示这是一次"小规模测试". Facebook可能为其平台和使用其数据的其他网站提供"通用货币",打造一个让开发人员和用户都放心的支

谷歌新举措:开发人员用邮件向用户发送测试

谷歌正为应用开发人员和测试用户搭建更容易沟通的桥梁,谷歌现在允许应用开发人员能够创建开放或封闭测试版应用的电子邮件链接,给目标用户测试使用.这对于开发者和测试用户来说都是非常便利的好消息,这似乎关联到谷歌在最近收购的Pixate,一个致力于让开发原型应用测试更简单的公司. 对于公测用户,开发人员只需设定接收用户,或者限定多少人数限制.用户即可直接通过邮件链接下载到Beta版本应用.对于封测过程,开发人员会邮件发送邀请链接给用户,用户在邮件中即可选择接受邀请,参与到应用封闭测试,并下载应用.所有这

网站开发人员应该知道的61件事

有人在Stack Overflow上发问,动手开发网站之前,需要知道哪些事情? 不出意料地,他得到了一大堆回答. 通常情况下,你需要把所有人的发言从头到尾读一遍.但是,Stack Overflow有一个很贴心的设计,它允许在问题下方开设一个wiki区,让所有人共同编辑一个最佳答案.于是,就有了下面这篇文章,一共总结出六个方面共计61条"网站开发须知". 我发现,这种概述性的问题,最适合这种集合群智.头脑风暴式的回答方式了.这也是我第一次觉得,Stack Overflow做到了Wikip

VB.NET开发人员必备参考10本书目

参考     一.程序设计 1.<<Programming Microsoft Visual Basic .NET(Core Reference)>>(Visual Basic NET技术内幕) 本书内容深入全面,涵盖的主题十分丰富,并结合大量典型的代码示例来讲解Visual Basic.NET的核心编程技术.本书共分6大部分.首先介绍了Visual Basic.NET语言的基础知识,以及一些有关类的新特性,例如继承.委托和事件等.然后详细讲解了Visual Basic.NET面向

(译)开发人员经常犯的8个设计错误

设计师在抱怨开发人员不尊重Web标准,后台开发人员在抱怨为什么不可以增加一个空格.PM在抱怨为什么项目总是因为那些看似简单的问题而延期--如何才能提高后台开发人员与设计师以及前端开发工程师的合作效率?相信很多网站或软件开发公司都越到类似的问题. 从UED的角度而言,我们的天职是追求用户体验.我们应该尽力坚持自己应该坚持的东西.白鸦曾经说过,用户体验不只是UED的事情,而是整个开发团队乃至整个公司需要参与的事情. 我们不能只是抱怨,我们去理解开发人员.同样,我们做出努力,让开发人员去理解我们. 我

Web开发人员编程模型:隔离级别

ACID性质是数据库理论中的奠基石,它定义了一个理论上可靠数据库所必须具备的四个性质:原子性,一致性,隔离性和持久性.虽然这四个性质都很重要,但是隔离性最为灵活.大部分数据库都提供了一些可供选择的隔离级别,且现在许多库都增加了附加层来创建颗粒度更细的隔离.隔离级别应用范围如此之广主要是因为放宽隔离约束往往会使得可扩展性和性能提高几个数量级. 串行一致性是可用的最古老最高的隔离级别之一,它之所以倍受青睐是因为其提供的简单编程模型,即每次仅能有一个事务对给定的资源进行操作,这就避免了很多潜在的资源问

前端开发人员和产品设计师之间的沟通

作为互联网产品设计师,在和前端开发人员沟通时你是否常常会听到这样的声音: -- "大姐,给点专业精神好不好,这个表格是自适应的,你这样设计页面不好扩展啊-"--"用ajax不是不行,不过你要事前给我说嘛,你不说我怎么知道呢,你说了我就知道了嘛-" 面对这些回答,除了欲哭无泪,你有没有想过是什么原因导致出现这样沟通偏差,有没有解决的办法呢?设计师需要了解哪些知识才能和前端开发人员来更好的合作呢?  首先得从这两者之间都有哪些不同说起.我认为最主要原因在于设计师和前端开

面向Java开发人员的Ajax:结合Direct Web Remoting使用Ajax

理解 Ajax 编程的基本知识 是重要的,但是如果正在构建复杂的用户界面,那么能够在更高层次的抽象上工作也很重要.在面向 Java 开发人员的 Ajax 系列的第 3 篇文章中,我在上个月的 Ajax 的数据序列化技术 基础之上,介绍一种可以避免繁琐的 Java 对象序列化细节的技术. 在 上一篇文章 中,我介绍了如何用 JavaScript 对象标注(JSON)以一种在客户机上容易转化成 JavaScript 对象的格式对数据进行序列化.有了这个设置,就可以用 JavaScript 代码调用远