批判性思维是设计和工程学的核心。在很多领域中,从电影导演到项目经理,从程序员到设计师,分辨哪些事物是有价值的都是一种非常重要的能力。这种能力是可以靠学习获得的,只是由于它独立于技术领域,经常被我们所在的行业遗忘。不过很明显,通常在工程、设计及可用性上犯的大多数失误都是由于全局的决策失误造成的,(因此)开发人员和设计师都应该了解批判性思维的方法与流程。在网站或软件开发中,批判性思维在三个方面显现:规划,灵感激发和项目管理。这里我们重点讨论制定规划,今后我再去撰文介绍另两个方面。
在开发过程中最常见的错误是不能正确的定义问题。如果目标是模糊的,就无法界定问题是否已经得以解决。就算目标是正确的,也有可能与当时的设计情形不相符而导致错误的目标。制造精良的机枪不可能帮你修理瘪掉的轮胎,因此上述两中错误是与技术的精准无关的。如果你不能避免这两种错误,即便是世界上最好的程序员和设计师也不可能成功。你可以写出最棒的代码,创作出最精彩的设计,但如果你不能正确解决问题,你的努力是白费的。
理解问题
迈向批判性思维的第一步是客观审视问题的本质。作为开发人员或设计师,你不可避免地会偏向于自己的工作。你是由里及外,很难以外人的角度看待自己的工作,这时你就需要考量各种信息来找出自己的定位,孤立地看待开发人员、经理、某个重要用户的观点几乎没有价值。你要找到全局的视野和尽可能多可选择的观点,就一定要直接跟使用你的设计的人对话,但不依据他们的话来理解问题。把自己想象成一位试图帮助公民的政治家吧,你会只相信你的智囊团的说辞吗?你必须从常规思维中跳出来才能把事情做好,并看到事物的真相。
另外一个挑战是:你接触用户的方式将影响到你从他们那里获取的信息类型,除非受过专门训练,每个人都会无意中使自己的问题带有偏向性,这样你将得到不可靠的信息。
观察和理解用户的技能非常复杂,这也是网站和软件团队需要可用性工程师的首要原因。你可以学习一些基础知识,但如果打算做一些重要的工作,还是要请专业人员。
在研究你要解决的问题时,记住以下几点:
谁是我们的用户?他们有哪些技能和知识?
我们可以用哪些不同来源的数据去理解他们的背景?
他们使用我们的产品或者网站要完成什么样的任务或目标?
我们做了哪些假设,如何论证?
我们掌握了那些数据来源?(可用性研究和启发式评估都是很好的起点)
如果你对回答这些问题没信心,说明你还没准备好,其实这些信息都是开发工作的基础。在继续工作之前要确保对你的用户有准确的理解,如果这是你的第一次尝试,就尽可能多地找到你的竞争对手及其用户信息吧。
分析
作为开发人员,有非常多的问题有待你解决,也有非常多的新功能有待你添加,因此仅仅有创意是不够的。考虑到投资人的要求与它们有限的资金支持,很多问题是不值得去解决的。有时解决一个问题会引发两个新问题,所以好的判断意味着从可以做的事情中理出应该做的事情。收集完数据后,下一步迈向成功判断的工作就是分析了:你需要筛选信息并且评估出需要在哪里投入精力。
将从用户和其他来源收集到的信息过滤成针对特定问题的一句话,这些话应该从用户的角度来书写。举个例子,“将编辑框加宽至十五个字符”不是一个问题,而“输入比较长的文本很困难”是,这中间的区别是戏剧性的。不要同时定义问题和解决问题的方法,这样你会经常忘记真正的问题。在这个例子中,其实有很多种方法解决输入长文本的问题,包括改变搜索框的形状等。但是如果你太局限,你会看不到其他的选择 --- 好的工程即是去理解这些选择。
对每个问题描述提供支持信息,包括:什么样的用户有这样的问题,这个问题是怎样被提出的,甚至是潜在的解决之道。也许只有特定部分的用户遇到这样的问题,或者它只发生在某种情境里。尽量多描述一些来让别人信服或者挑战你的假设,如果你是唯一看到这些支持信息的人(例如可用性研究、市场研究等),让别人也得到这些信息。你对这些资源越公开,别人的质疑也就越少。
如果你是在一个团队中工作,将所有的问题及其支持信息做成一个小清单吧。
一些表述问题的例子:
网站各部分的跳转很困难
软件加载时间过长
安全错误信息难以理解
注册项太多,导致用户常常放弃
在页面索引里很难找到特定产品
注意用户问题和功能性bug是有区别的,我用两个特征来判断:
1) 因为代码错误而没有实现预期的功能
2) 有明显且简单的方法解决
例如:下拉菜单无法显示五十个州是一个bug,而用户无法找到下拉菜单或者使用它来达到目标是一个用户问题。