“客户的需求在一开始就能被定义好,并且描述清楚,并且在相当长一段时间内保持不变”,这种情况只存在于理想中,现实世界并不是这样。
现实是:
- 只有非常少的客户能在项目开始时就清楚地知道自己想要什么并定义好细节,绝大多数客户(也许90%以上)只是对项目的需求有个模糊的概念,而且无法想像最终想要的产品长什么样;
- 即使客户清楚地知道自己想要什么,其中很多人也无法明确地把这种需求表述出来;
- 即使他能够清楚地表达自己的要求,也无法确保自己的想法不会在未来发生改变;
- 在整个开发过程中,新的想法会不断冒出来,尤其是在客户看到软件界面时可能会立刻产生N个Idea;
- 整个开发过程,对客户而言可能是个不断学习的过程,他对相关年领域的认识会逐步加深和细化;
所以,在软件开发过程中,我们才会有这样的感受:
- 客户开始并没有提这个要求,产品做出来以后,他才说这个地方还要个A,那个地方还缺个D;
- 明明客户最初是这么说的,看到产品以后,他却说这跟他想要的不一样;
- 刚开始说好了要这么做,后来却要不断地改来改去,也不知道到底还要改成什么样;
其实仔细想想也很好理解,譬如你打算去买件衣服:
- 在出门时,你并不知道要买的衣服是什么牌子的,什么款式的,什么颜色的 etc.
- 逛了很多地方,试了很多衣服,也没有让你满意的;此时身边的人问你到底想要什么样的衣服,你却很难描述清楚;
- 最后你终于买到一件相对满意的衣服,回家穿不了多久你又想买新的衣服了,因为前面那件已经无法满足你的需求了,或者说你的需求已经改变了,譬如你不再认为它符合潮流了;
既然现实是这样,那么我们应该如何应对呢?
- 尽量避免在一开始就定义好所有的功能或写好所有的规格说明,而是在最初只设置一个粗略的构想,并且在整个实现过程中,不断去细化它,不断去补充完善它,把需求定义当作一个渐进明细的过程;
- 通过做原型、画草图的方式去和客户沟通确认他的想法,尽早让客户能够look and feel;
- 尽早地,周期性地收集客户的反馈并且进行相应的调整;
- 经常性地提交版本给客户,让他有机会提出修改的请求并且快速实现客户提出的变更;
- 把变更融入计划,一旦它成为计划的一部分,就容易处理了;