当用户知道他们处于应用程序的中心,他们就会持续地用自己的偏爱和忠诚回报你。
第1章 我们的世界已经改变
通过收集用户的反馈和观察他们的行为,我们能够对构建他们所喜爱的应用程序有深入的理解。任何身处创建应用程序过程的人(不仅是设计人员)都应该投入时间和精力,理解用户需求,完成应用程序的目标。这并不只是图形化设计、编码或者功能。理解用户是整个团队(或者就是你一个人)需要持续进行的工作。用代码并不能解决用户的所有问题,但是我希望团队能做到这一点;因此,开发人员需要采用更全面的方法。
第2章 什么是以用户为中心的设计
“易用性可能是无形的,但是易用性的缺乏绝对显而易见。”
UCD不是可用性
可用性(Usability)也被称作人为因素,是对人与任何产品之间关系的研究。可用性方法可以在任何产品中实施(从烤面包机到门把手,甚至两者的组合)。
人机交互(Human-Computer Interaction,HCI)扎根于可用性,但是它的焦点在于人类与计算产品的关系。
以用户为中心的设计(User-Centered Design,UCD)来源于HCI,是开发人员和设计人员使用的软件设计方法学。本质上,它帮助开发人员和设计人员制作满足用户需求的应用程序。
UCD不是主观的
整个可用性学科及其所有基本方法是许多学科的混合物。通过在人类工程学、心理学、人类学以及许多其他领域上的实现,可用性扎根于科学知识。它远远不是主观的想法或者推测。
以用户为中心的设计过程反对关于用户行为的主观臆测。它要求提供对设计决策有效的证据。如果正确地完成以用户为中心的设计,你的应用程序将成为积极参与的用户的成果。因此,任何通过观察和聆听用户意见的设计决策都不是基于异想天开或者个人的偏好做出的。
UCD不只是设计
以用户为中心,并不只是仔细考虑各个元素的外观,或者创建浮华的动画和巧妙的过渡。以用户为中心的设计确保我们研究应用程序在完成设计目的上的有效性
UCD不是在浪费时间或者金钱
以用户为中心的设计的要点是,它不是非此即彼的。在开发过程中吸收用户的反馈可以成为强大的二者兼得方案。而且,实施好的可用性准则,并不要求你成为一位用户体验专家。
UCD不是干扰
可用性的世界很广阔,专注于对人与任何产品交互的研究。
- 人机交互(HCI)是可用性的子集,专注于人类与计算产品的交互。
- 以用户为中心的设计(UCD)是开发人员和设计人员用于确保创建符合用户需求的产品的一种方法学。
- 用户体验(UX)是UCD的重点之一。它涉及用户使用产品的全部体验,包括身体和情绪上的反应。
- UCD不是主观的,往往依赖数据支持设计决策。
- UCD不仅包含应用程序的美学。设计起着重要的作用;但是,这不是惟一的焦点。
- UCD帮助你避免代价高昂的错误,从而真正节约时间。
- UCD不会干扰工作的完成。它确保我们专注于正确的事情:用正确的技术方案满足用户需求。
如果我们无法接触用户怎么办
大部分用户提供的是对自身工作流的理解。如何用你的编程技巧扩增这些工作流,就取决于你了。培训用户,将他们带入开发过程是你的工作。你应该教会他们使用正确的术语,使他们能够正确地解释自己的需求。
应对消极情绪
本质上,错误在于我们将人们的行为归结为他们的个人因素,而非他们所处的情境。 基本归因错误可能对我们与用户的关系产生不良的影响。它使我们无视自己所犯的错误。
创建好的软件体验需要大量的自我推动。你必须对清楚地了解所有细节有深深的渴望。竭尽全力消除负面的语言和态度。这将能帮助你和团队保持积极向上,突出重点和向前推进。
- 和用户一起工作可能很困难,但是在创建成功软件应用中这是无价之宝。
- 用户并不总是对的。他们往往不善于描述或者理解自己需要什么。我们的工作是持续地提出问题,并且找到他们的需求的根源。
- 将用户带入你的开发过程中,教他们使用正确的术语,为他们提供更好地解释需求的工具。
- 用户有自己的问题处理方法。学习如何应对不同的个性,就能够从用户那里得到最多的信息。
- 努力工作,消除负面的语言和态度。避免基本归因错误,即“将人们的行为归结为他们的个人因素,而非他们所处的情境”。
第4章 制订计划
目标是有最后期限的梦想。” ——Diana Scharf Hunt
我们的模板有如下核心组件: 团队任务陈述 项目细节 用户需求 功能需求 数据库/数据流框图 原型屏幕截图
如何知道哪个计划适合于自己
不管你认为自己多么理解领域,也不管你如何认真地思考需求,在原始事实和前提中仍然有很大的不确定性,还有大量未知等待着你。和作战一样,项目期间发生的一切和之前所做的一切,对结果都有同样的决定作用。
话虽如此,并不是说我们就不应该为将要采取的步骤建立一个模板或者框架。起码,你应该创建某种路线图,以便用有意义的方式执行以用户为中心的设计过程。
回顾你的文档
- 你的团队应该有一个反映自身目标以及对用户和相互之间承诺的任务陈述。
- 考虑创建一个项目模板,以计划作为开始,然后转向实现和测试,并以部署和维护结束。你应该在模板中包含一个项目细节部分。项目细节应该包含项目的标题、描述,如果合适,还应该有影响评估。
- 你的计划文档应该包含一个用户需求列表。本质上,这个列表代表用户的需求,不应该包含技术解决方案。
- 功能性需求是应用程序需求的一个列表。这个列表专注于技术,以及满足每个用户需求的方法。
- 如果你的应用程序依赖于一个数据集或者复杂的用户工作流,一定要在文档中包含数据库框图或者数据流图。
- 原型可以成为以用户为中心的设计过程中的有力工具。一定要记下原型的屏幕截图或者早期模型。
- 回顾旧文档是从过去的错误中吸取教训的宝贵方法。
第5章 创建个人宣言
“目标并不总是用来实现的;它往往只是让你找到前进的方向。” ——李小龙
进行约束
我发现开发人员(包括我自己)经常犯的一个错误是,我们许多人都让自己的应用程序功能变得臃肿。对我来说,当我看到一个应用程序的功能过多,其中许多功能是我所不需要的,很明显,开发人员缺乏宣言或者愿景。他们将技术放在第一位,把焦点放在他们所能做到的,而不是他们应该做的。
任何事情都有某些最能发挥作用的地方,而在某些其他地方却是糟糕透顶的。关键是知道它是什么、目的是什么、何时使用、用于什么人、用在哪里,最重要的是为什么使用。这就是我们对自己的应用程序必须有一个宣言,或者某种形式的愿景陈述的原因。作为开发人员,我们需要一个突出的愿景,在开发陷入功能和技术障碍的泥潭时回到正轨上来。我们需要提醒自己,最终想要实现的目标是什么。
应用程序叙事
应用程序叙事是应用程序影响用户生活的持续报道。宣言是具体的声明性陈述,而叙事可能很丰富,包含应用程序使用的详细场景。
考虑你的应用程序故事:它应该有哪些要素?应该删除哪些元素?你所提供的特性是否遵循你想要讲的这个故事?
创建角色
角色是发人深省的人物,能够帮助你考虑用户的所有特性。利用角色,你能够深入他们的灵魂,想象能够激发他们的因素。你可以花费时间,描述他们对什么感到失望,对什么感到高兴。
创建场景
- 考虑为应用程序制定一个宣言或者愿景陈述。宣言能很好地体现应用程序的总体目的和愿景。
- 通过建立一个叙事,将宣言的声明性陈述和应用程序使用的丰富故事交织起来。
- 角色是虚构的人物驱动元素,可以个性化你的理想用户。使用角色增强你的叙事,帮助讲述应用程序的故事。
- 场景正如电影中的镜头,是角色可能身处的特殊情况。使用场景,你可以探索应用程序对用户需求的响应(或者没有响应)。
第6章 创造力和用户体验
“优秀的艺术家靠的是借鉴,但伟大的艺术家靠的是‘窃取’。” ——帕布罗·毕加索
我们必须改变。我们必须接受,应用程序并不只与功能相关。 你可以找到几百个能够帮助你完成特定任务的应用程序,但是只有少数几个能够使完成任务的过程变得令人愉快。
制定用户体验目标
以用户为中心的设计不仅仅是收集用户需求,将它们转化为功能性需求。你还应该考虑用户在完成任务的同时拥有什么样的体验。花费时间定义用户体验目标,我们就能确保应用程序创造符合用户预期的体验。
创造力需要勇气和辛勤的工作
以用户为中心的设计过程的核心部分是探索与用户沟通的有效途径。如果你的会谈没有取得预期的效果或者陷入困境,应该尝试新事物。如果你的用户没有提供所需要的信息,尝试其他方法。绘图可能很有趣,也可能激励兴味索然的用户参与。
如果你独自工作,一定要留出时间,探索引导创造力的途径。到公园去拍照,制作孩子的电影,并与家人分享它的首演。创建一个Instagram账户,拍摄遇到的有趣事物。
许多人告诉我为什么应该停下来。这个应用有什么意义?你怎么样靠它赚钱?这些都不是我的目标。目标不是赚钱——而是制作出真正了不起的应用程序。
创造力就像肌肉。你必须锻炼它。而且,许多时候,它并不等同于做“对”的事情,而是放手去做。因此,我们要考虑抽出一些空闲的时间,充实各种不同的思路。暂停你正在进行的项目,让自己的创意更多,束缚更少。
如果我们摆脱完全原创的负担,就可以停止从头开始的努力,我们可以接受别人的影响,而不是逃离它。
在文学界中,杰出的作家们都知道,如果你想要写出好文章,就必须不断地写,在你不写作的时候,就要阅读。你应该阅读大师的作品,研究他们组织故事的方法。学习他们的风格和文字,并且持续地检查自己的文字。杰出的作家并不在意其他人对其作品的影响;他们相信,自己的创造力会展露出来。
“作家们”对无法找到自己的独特风格感到恐惧。他们害怕自己的思路缺乏独创性。我认为,这种忧虑被过分夸大了。大部分的学徒都是先接受这类影响,然后再试图避开它,这使他们受益良多。你自己的风格将会浮现出来,自己的思路会从师傅的思路中脱颖而出。与此同时,你将学到技巧,学习到写出好作品的途径。
创造力需要提问
如果你从未失败,说明你还没有做任何有创造性的事情。
如果你发现自己遭到了失败,甚至陷入困境,这就很好地说明你正在通往最有创意的想法的正确道路上。
一定要在以用户为中心的设计过程中包含用户体验目标。你的用户所期望的不仅是基本的功能:他们期望应用程序是令人愉快和深思熟虑的。
创造力要求我们勇敢且敏感。尽管尝试新事物可能是危险而艰难的,但是这是发现新思路的关键。
绘图和素描对你的创造力有正面的影响。而且,还要考虑鼓励你的用户画图。这可能帮助他们表达自己的思路。
摆脱束缚是促进创意的关键。暂停你正在进行的任何工作,考虑花一点时间研究新的项目、技术或者兴趣。
对目标或者愿景的完全理解有助于你保持聚焦和创造性。
如果你无法提出自己的思路,不要害怕观察别人的作品并吸收其中的思想。
创造力需要你不断地提出问题。
第7章 设计准则
设计如果忽视了人,就会被人们忽视。” ——Frank Chimero
研究其他人的作品能够为我们带来灵感,而研究和理解设计准则能够避免犯错误。设计准则是可用性世界的科学法则,和物理学中的万有引力定律和相对论很相似。设计准则相对比较固定,是在经过许多年的认知和人类行为研究之后得出的。它们根据人类对周围事物的理解和诠释,为我们提供了指导。
接近原则(完形原则)
接近原则是感官完形原则中定义的许多原则之一。虽然你应该学习所有的完形原则,但是我认为接近原则对你的应用程序有最大的潜在影响,且需要的工作量最小。这条原则说明,我们认为靠近的对象之间是有关系的。相反,距离较远的对象看上去似乎比较没有关系。
因此,你可能听到过人们将接近原则称作组合原则。从根本上,当项目根据其功能被组合在一起时,更容易发现操作的模式
简单地以描述功能的方式组织和分组项目,你就能够显著地改进用户在你的应用程序中得到的体验。有条理的布局使得人们更容易学习你的应用程序,用户在寻找内容时压力也较小。许多开发人员忽略了这条简单的原则,因为他们没有花时间考虑应用程序的组织。他们认为自己的应用程序布局有意义;而他们的用户却感到困惑和沮丧。接近原则可以用作某些功能应该放在一起的有力指标。
可见性、视觉反馈和视觉突出
可见性(Visibility)是用于将焦点带到应用程序用户界面上的一个元素或者一项操作所做的任何事情。下面是提高可见性的一些方法:
字体 文本的不同样式和尺寸能够吸引用户的注意力。
透明度 调整项目的透明度,有助于降低或者提高可见性。
突出 比其他元素更大的元素可以带来更高的可见性
状态 表明应用程序正在处理一个请求,或者已经从用户那里接收了输入。
颜色/对比度 传统上,对比度更高或者颜色更鲜艳的项目得到的注意力更多。
可用性原则的另一方面是提供视觉反馈。视觉反馈原则说明,应用程序应该对用户的输入做出响应。换句话说,你的应用程序应该在从用户那里接收信息时显示某种指示。一个简单的例子是在用户提交搜索查询的时候,提供一个纺车图标,或者“搜索中…”信息。视觉反馈原理的总体要点是通知用户已经发生了一次交互。没有这种确认,用户可能无法得知他们的操作是否被应用程序接受。
构思模型和隐喻
在设计中平衡一致性可能是个挑战,但是如果正确地完成这一工作,就可能创建一个易于学习且充满乐趣的应用程序。
在医院里我们有一句格言:“让正确的事情更容易做到,而让错误的事情更难做到。”功能可见性使得正确的工作容易完成,而约束则让错误的事情更难做到。
- 学习和研究设计准则是很重要的。设计准则很多,按照它们的指导,你就能显著地改进应用程序体验。
- 接近原则说明,人们认为靠近的对象之间有关联。利用这条原则,将功能组合在一起。这能使你的应用程序更易于学习和理解。
- 可见性原则说明,应该使用视觉提示,帮助用户理解应用程序的状态。
- 视觉突出原则说明,用户的注意力会被吸引到更大、更鲜艳或者更突出的对象上。
- 视觉反馈原则说明,应用程序应该表示输入已经接受,响应用户。应用程序还应该向用户说明它们正在处理请求。
- 构思模型和隐喻是人们将现实世界的知识转换到计算世界的方法。一定要使你的图标、语言和其他隐喻扎根于用户理解的知识。
- 渐进展开删除和禁用不适合于用户当前状态的功能。
- 一致性原则说明,应用程序中的任务应该和预期一样进行。你不应该为已经被用户所理解的任务发明新的工作流。
- 功能可见性帮助用户做正确的事情,约束则阻止他们做错误的事情。
- 确认原则说明应用程序应该要求验证,避免用户执行不受欢迎的操作。保存确认对话框就是一个好的例子。
Hick法则是用于根据可选择项目数量确定选择所需时间的规范模型。你在菜单中包含的项目越多,用户的响应时间越长。
Fitt法则是另一个规范模型,用于确定用户将光标从一个位置移动到目标位置的时间。用户光标移动的距离越长,到达目标对象的准确率就越低。
第9章 可用性研究
“人们的想法是通过观察而非通过争论改变的。” ——Will Rogers
第10章 你的事业永远不会完结
综上所述,以用户为中心的设计最重要的方面就是愿意去了解。如果有必要,你必须愿意重新开始。如果你不愿意根据结果进行修改,那么进行测试设计又带来什么好处呢?这就要求你放下自尊,为用户提供所能构建的最佳应用程序。
第一次就取得全面成功是不可能的
我们必须理解,如果我们的设计失败,并不是个人的失败。我们必须研究自己遗漏的东西,或者忘记问的问题。如果我们的设计不成功,这是因为我们没有获得正确的信息;这并不意味着我们作为程序员的失败,也不意味着我们要考虑从事别的职业。
有了正确的心态,你在接受反馈时就不会有那么强的戒备心理。这还能使你在构建出用户所不喜欢的应用时不会那么沮丧、不会觉得自己是失败者。
用户的要求很高,根据我的经验说明,当我们让他们参与开发过程,他们就能更好地理解如何传达遗漏的信息。此外,他们也能更好地理解自己的要求。
和我一起设计应用程序的用户最终了解了设计的难点和技术的局限性。我们必须承认,用户没有计算机科学学位,并不意味着他们不能熟练地帮助我们解决技术问题。
总结
做个深呼吸;以用户为中心的设计需要软技能。你必须耐心地听取用户的意见,真诚地盼望他们的反馈。我并不是说,你必须同意他们的说法,但是你至少应该重视。记住,我们的用户最终能够教给我们很多。
花时间探索新事物,促进自己的创造力。建立一个计划,帮助你实施以用户为中心的设计策略。从你的用户那里收集反馈,询问他们和问题空间有关的具体问题。建立原型测试早期设计思路,让你的用户评估这些原型。
最后,进行详细而有条理的可用性研究。观察用户完成任务时的情况,度量应用程序可用性。记录用户的意见,用数据支持你的设计决策。
实施本书中概述的以用户为中心的设计方法,你所追求的是对用户最好的结果。当用户知道他们处于应用程序的中心,他们就会持续地用自己的偏爱和忠诚回报你。