以下观点来源于国外互联网翻译,并加入实际工作感想:
1. 好的软件一定不便宜
软件开发和别的职业是一样的,需要花大量的时间学习。
实践经验: 正如目前国内很多软件,虽价格低廉,但常常属于项目衍生品,质量和性能无法得到保障。往往后期维护成本远高于产品价格本身,也无法帮助用户提升工作效率,减轻工作负担! 高价未必能买到最适合的软件,但低价肯定只能买来一堆垃圾!
2. 需求要明确
我们知道一开始就能列出所有详细的需求是很困难的。这也是为什么我们发明了敏捷开发这样的技术。但是如果你给我们错误的需求,我们也只能交付错误的软件。你可以因为软件不好用而责怪我们,但是你给了我们不对的需求在先。最终浪费了双方大量的时间,也浪费了很多钱。软件开发者也许很聪明,但是只有你了 解你的业务需求!
实践经验: 客户永远是其业务方面的专 家,准确而严谨的业务逻辑和流程,是开发人员理解需求的基础。 而如何把业务转变为软件,则需要双方反复多次沟通,由客户逐渐为开发人员建立起业务概念及应用背景等知识,在明确的需求及正确的理解下,才能开发出符合客户业务要求的软件产品, 如需求阶段客户的需求模糊,描述不准确,则随着开发的进行,必然产生越来越大的偏差!
3. 好的软件需要配合完成
为了交付一个好的软件,开发者应该在项目中全力以赴。但是客户也不能坐在一边对这个项目不闻不问。如果你想要你的软件按时、正确的交付,你应该和开发者保持联系,所以我们能及时发现问题并修正。这并不需要你无时无刻的盯着我们工作,你只要及时的回复我们的email就可以了,比如说24个小时之内。我有遇 到过一些客户,在合同签完以后彻底消失,然后到软件交付的时候,跟我讲为什么没有开发完成?你说呢?!
实践经验:凡是客户积极配合的项目,其开发流程基本进展都比较顺利,出现问题能够及时发现并纠正,工期也能在计划范围内完成;反之,凡客户对开发过程漠不关心,只等待最终结果,而不提供任何有价值的建议或参考信息,其结果必然是最后的作品不符合其要求。
4. 并不是所有的功能都是可见的
没有绚丽的界面和大量的新功能并不意味着我们没有努力工作。事实上,大量的工作都是和前台无关的。这也是为什么我们应该投入资源来改进后台的代码。根据 Pareto Principle http://en.wikipedia.org/wiki/Pareto_principle ,20% 的代码解决了80% 的问题。这些问题有可能是服务器性能瓶颈或者数据损坏。虽然你花钱在这些方面你看不到软件的界面变化,但是它是值得的。
实践经验:国内客户在关注软件质量时,分为两大类:一类是客户中的领导,大多数不懂技术或懂的较少, 重点关心的是界面效果和交互体验,而基本无视性能、存储等重要因素;另一类是客户中直接分管的相关技术人员, 他们与开发人员之间的沟通比较顺畅,往往看重软件本身质量,即这些看不见的功能,但界面效果和交互部分却无法给出很好建议,也无法准确揣测领导喜好。而基于目前的国情, 对软件好坏的评判权在领导手中,这也就决定了软件是否好用,很大程度取决于外在的修饰,而那些不可见的甚至关键性功能往往被忽略。
5. 提前给出准确的时间预测很困难
在任何一个领域,给出项目的时间预测是一件困难的事情。在IT领域更是如此,因为客户往往不知道他们到底想要什么。告诉我们你的想法,我们会给你一个时间估算,仅仅是估算。需求往往在开发过程中变化,所以不要老拿预估的时间来说事。
实践经验:客户对软件开发的预估多半没有正确认识,总把估算时间误认为是准确开发时间,当开发过程中发现新问题,或需求发生变化而延长时间,客户就会误认为没有按时完工。所以每次极小的需求变更所产生的影响,开发中发现的任何可能影响进度的问题,都要第一时间反馈给用户,并反复强调,使他们意识到其中的变化。
6. 程序员也是人
我们也许工作起来,思维方式像是机器人,我们也许长时间在办公室里不出来,但这并不意味着我们不是人类。当你在餐馆吃晚饭,或者做飞机安全着陆的时候,你会对厨师和飞行员表示感激,当你的家人在医院治愈的时候,你会对医生表示感激。那么请也把这份感激、尊重带给我们。
IT开发者自嘲为码农,so……
7. 告诉我要做什么,不要指挥我怎么做
你描述你的问题,让专业的人来提出解决方案。请让开发者做他擅长的事情:解决你的问题。在IT领域,开发者懂的往往远远比客户多。也就是说开发者知道不同 的方案的优点与缺点,他会选择正确的解决方案。请不要把简单的问题复杂化,不要告诉我们如何解决问题,专业的问题由专业的人来解决,可以节省你的很多时间和金钱。
实践经验:对技术略懂的客户很可能是最糟糕的客户。他们很容易想当然的认为自己也是技术人员,可以解决技术上的问题,甚至自己的方案会优于开发人员本身提出的方案,但正如上面所描述的情况,在IT领域,开发者懂的往往远远比客户多。就像业务领域,客户懂的往往远远比开发者多一样。
8. 听听我们的建议
正如上一段提到的那样,开发者在技术领域也许比你(客户)懂的多。如果你想要在你的网站放一个自动播放的视频,而开发者建议你不要这么做,那么听他的。因为他已经做过类似的案例,并且知道自动播放让很多人很厌烦。你喜欢这个视频,但是其他人不一定。如果你的开发者建议你不要使用Flash,那么相信他。他知道使用Flash的不好的地方,也许你不知道。
实践经验: 开发者经历的项目越多,遇到并处理的问题越多,则能够积累丰富的经验。客户往往只能看到某个具体功能带来的直接效果,而无法正确评估其引发的正面和负面影响,也不能从全局角度,对各资源的平衡利用提出好的方案。
9. 结论
软件开发者需要做所有的努力来完成一个好的软件。有很多书籍讲述了关于如果控制软件质量,怎么做需求分析,敏捷开发等等。但是作为客户,你也应该遵循一些基本的原则。最大的问题往往是客户希望项目的预算越低越好,却不断的更改需求,还没有很好的沟通。
实践经验: 这种幻想是不可能实现的白日梦!积极沟通,务实而动,才是达到共赢的正确途径!