王浩成
开发一款适合好用的软件就像是建造一座美丽舒适的房屋,这需要各种资源相互协调以满足用户的需求。印刷商对软件开发过程越熟悉、了解,他们就越能在使用软件开展内部项目时运筹帷幄或者更好地向软件供应商提出要求。
在用户的需求与软件将会包括的特征之间,信息传达主要由产品经理完成,当然,软件架构师也会参与到这一过程中来。产品经理首先会倾听用户面临的业务挑战并将這些挑战转变成软件所具备的特征和功能。软件架构师随后会大展拳脚,用他们的专业知识设计出软件的结构方案(就像是建造房屋的结构工程师一样)。软件架构师会确保软件的可用性并设计与用户体验、数据库以及外部系统的交互。
专业人员包括用户体验(UX)/用户界面(UI)设计师。用户体验指的就是软件的用户如何与软件进行相互交流。这是一项非常专业的技能。我见过的软件项目出现的最大的错误就是由软件开发者来作出用户界面和用户体验的决策。这就好比房屋的承包商告诉你说他可以处理所有的电气工程和水管工程,不需要聘用专业人员。软件的用户体验/用户界面是最重要的部分。之所以出现那么多极其难以使用的软件,就是因为软件的开发人员作出了有关用户体验/用户界面的决策。这也就是为什么大多数软件都需要一个解码环才能明白如何使用。解码环是屏幕上显示的信息与软件的实际操作之间的翻译器。你有多少次听到别人抱怨“明明写的是X,执行的确实Y!”为什么不能直接进行命名从而省去我们通读手册、文件或者经过大量培训的时间呢?
软件开发过程中的劳动力就是编程人员。软件开发人员从产品经理处接到指令,然后使用这些指令开发出能够正常运行的软件。他们就像是建造房屋的承包商一样。他们的工作不应该由于需要作出大量决策而延迟,这些决策已经在方案中提前载明。承包商不应该也不需要作出有关房屋地下室天花板高度的决策。同样地,软件开发人员也不需要决定如何命名一个按键或者是否将某项功能显示在弹出模式窗口中,或者通过嵌入在屏幕中的错误信息展示。用户界面/用户体验设计师应该作出这类决策,原因在于他们的思考方式与用户相同,而不是与编程人员相同(编程人员通常不会是软件的目标受众/市场)。
这些新知识在你接手软件开发项目或者向软件产品供应商提供反馈的时候会如何影响你?
给印刷商的建议
1.描述你所面临的挑战或者存在的问题,而不是提出有关解决方案的建议
当你的房屋出现漏水,你应该打电话给水管工并说:“楼上的淋浴室的水漏到正下方的炉子上了,你能过来检查一下吗?”,而不是说:“我认为你应该重新设计楼下到楼上的给水总管的线路”或者提出另一个解决方案。你应该用你观察到的症状来描述你所面临的问题。你的目的应该明确:我们希望家里的墙壁和天花板保持干燥。
当软件没有按照要求运行的时候,我们通常不是对症状进行描述,而是转向其他的解决方案建议。我曾经听到过印刷商说:“你能不能在这个屏幕上创建一个能够下载所有数据的下载按钮?”这是一个提议的解决方案。但是我不知道你要解决什么问题。这是一个真实的例子,我来告诉你我们是怎么做的。我们并没有编写程序在屏幕上添加下载按钮,因为当我们询问该印刷商要用这些数据做什么的时候,他回答说:“我要将数据与屏幕上所有项目的图片整合在一起,做成电子表格然后发给客户进行审核。”因此他们想要解决的问题其实是以多种方式查看一组数据的能力:一种是表格,另一种是与图片共同构成的网格。我们在屏幕上添加了多种查看方式作为解决这一挑战的解决方案。点击一处可以查看表格,点击另一处可以查看网格视图(每个项目都带有图片的缩略图)。如果我们没有询问他们要解决的问题是什么,很可能会浪费他们的资金和我们的时间来构建一个效率很低的解决方案。
2.理解编程只是软件开发过程的大约1/3
当需要软件的时候,许多印刷商认为他们只需要一个软件开发者就足够了。而软件开发出来之后他们又会纳闷为什么软件不能解决他们面临的问题、难以使用并且看上去很丑。这就是你想要让编程人员完成所有工作的结果。对于小项目来说这是可以做到的,小规模项目不需要花费大价钱开发一款功能齐备的软件。你只需要找一位比较全能的软件开发者就基本上可以满足你的要求。但是如果问题严重或者项目规模较大,你就必须聘请专业的人员来开发软件(尤其是用户界面/用户体验设计师)。你可以将你的需求转化成对软件的要求并在寻找软件开发者之前请别人设计页面。当你把所有的方面都考虑到,软件开发者可以很容易地给出项目估算。你不是用户体验/用户界面的专业人士,任何人似乎都认为他们能够胜任,但是你可能不行。
3.软件的开发需要的时间要比你想象的长得多,赶工加班开发出来的软件效果不会好
每个人都处于严密监视之下。客户不断对你提出要求,而你能做的只有让你的团队加班或者增加班次。软件的开发周期难以量化或者估算,尤其是大型项目。《The Mythical Man-Month(人月神话)》就是一本关于配备更多人员加速软件开发过程来量化软件开发周期却以失败告终的书。软件项目需要对客户业务要求的了解,当软件开发团队增加新成员的时候,该团队的速度会被暂时拖慢,因为了解客户业务要求的成员需要向新人进行讲解和介绍。这就使得软件的开发过程非常令人失望,似乎永远都难以达到我们的交付预期。但是这并不是软件本身的错误,交付预期是由销售代表(当你购买软件,他们获得佣金)、季度收益(上市公司)以及非常想让不满的客户满意的支持团队设定的。软件交付预期是典型的承诺过多和交付不足。如果你现在开始讨论今年贸易展览中将发布的产品(实际需要等待12个月之后才能够开发成功),这本身就已经是一件令人失望的事。