【分享】程序员应知——我们不是客户
2010-05-25 18:03 Peter Jin 阅读(376) 评论(0) 编辑 收藏 举报在系统开发的过程中,如何从客户那里获取正确、有效的需求,是每个团队都需要仔细考虑的问题。如果最初的需求没有明确,就开始着手开发,到最后可能会有很多东西需要修改,浪费大量的时间、精力和金钱。
这件事说起来很容易,但实际做起来的时候,总会遇到各种各样的阻力,似乎在每个项目中都一样。所以,有很多人喜欢凭借之前类似项目的经验,或者自己对于业务的理解来做需求分析,要牵着客户的鼻子有,甚至于替客户决定如何来做系统。但是,这往往会导致客户抱怨:你们做的系统不是我想要的,根本就不好用!其根本的原因就在于:我们不是客户!
很多人都清楚的一个原则是,在做系统的时候要从客户的角度出发,但什么是客户的角度呢?在明确这个问题之前,我想大家应该了解我们程序员与客户之间的一些区别。
首先,我们和客户使用计算机的水平不一样。这一点是客观存在的,我们作为程序员,计算机就是我们战斗中的枪,那必然是非常熟悉,而且整天24小时至少会有十几个小时在和计算机打交道,每个人熟悉的软件至少也会有十几种。而作为客户,可能只是在上班的时候使用,而且使用的软件非常有限,一般就是Office,加上有限的几个软件。
其次,我们和客户对业务知识的掌握不一样。客户的业务知识就是他所从事的行业的知识,比方说对于一个保险公司的业务人员来说,他们的业务知识就是与保单、代理人、承保、理赔、保全相关的各种内容,而对于贸易型企业来说,他们的业务知识就是与采购、销售、产品、订单等相关的内容。如果我们没有做过相应的行业软件的话,那么我们的业务知识就很差。这也正是为什么好多软件公司想要做一种行业软件时,所存在的壁垒。
既然有了这么大的不同,那么我们想要从客户的角度出发,就要以客户的计算机水平和业务水平来考虑,这样做出的东西才是给客户用的,而不是给我们程序员用的。
想要达到这个目的,首先我们就要从自己做起,努力去学习各种业务知识,要有不耻下问的精神,千万不要觉得自己是做IT的,就孤芳自赏,而对于其他行业的人员,就觉得不如自己。古语说得好:三人行,必有我师。每个人的知识都有不同的重点,客户中有很多人掌握着我们所不知道的知识,不向他们请教、学习是不行的。
然后就是要多多与客户沟通,不同时间、不同地点、不同的环境中,客户的想法也会有所不同,这也正是需求的变更,我们不能要求客户提出的需求是一成不变的,有人说过,唯一不变的就是变化!想要解决这个矛盾,我觉得最有效的方法就是沟通,这样的话,如果客户的需求有了变化,我们会在第一时间了解,并为其做相应的工作,这样可能就会节省出很多的时间和精力。并且,沟通是会增进我们与客户之间的感情的,如果双方都认为对方是自己的朋友,很多麻烦的事儿也就迎刃而解了。
接下来,我想和大家聊聊当前做系统时,获取需求可能的几种做法,并提出自己的浅薄的意见。
1、闭门造车型——也就是凭借自己对行业的理解,或者是以往项目的经验,猜当前项目的客户会提出什么需求,而不理会客户的具体情况。
大家也应该可以立刻给出结论,这样的项目很难成功,即便是我们之前做过100个类似的项目,那么在做第101个的时候,也会发现企业会有自己的特点,客户会有自己的特点,毕竟我们做出的系统不是给机器人用的,而是给人用的,有人存在,就会有差别,我们就应该具体情况具体分析。
2、积极沟通型——作为程序员或者是项目经理,在开发的整个过程中积极地与客户沟通,及时了解客户的需求是否有变化。
这种类型应该比上述的有很大的改善,但是我觉得需要注意的问题就在于沟通和信息传达的效率上。一般来说,可能这种工作会由项目经理来做,而不是由具体开发的程序员来做。这样的话,就需要做沟通的人有充分的计算机知识和业务知识的储备,既能够了解客户所说的话,也能够把客户所说的话正确地传达给程序员,并且还可能会加入自己对如何在系统中实现的理解。
3、现场客户型——这是敏捷开发中一个很重要的原则,就是在开发的现场要有客户,不断地提供对系统的意见和反馈。
首先这一点很难达到,毕竟客户也有自己的工作,很难整天地坐在我们旁边为我们提供反馈。另外,如果说是一个或者有限的几个客户,那么就需要他对所要负责的模块相关的业务知识都非常了解,这对于现场客户的要求也是非常高的。
上面几种形式都是我们被动地来接收需求,其实我觉得我们还可以主动出击,去找需求。
4、观察客户型——就是说我们要在客户工作的时候一直观察,看客户是如何在实际工作中作出各种各样的决定的,也了解客户的工作方式和工作内容,看看如何能够通过系统来帮助他们。
5、一起工作型——这种方式意味着我们要把自己下放到客户的办公室中,去和他们一起工作,有些边缘性的工作,我们作为学徒的角色,帮客户完成。
上面的两种方式所获取的需求都是第一手的需求,而且通过和客户一起摸爬滚打,我们不仅能够获取宝贵的需求和业务知识,而且还可以了解到客户对于每个需求的迫切程度,以及完成每个需求能够为客户带来什么,这样就可以做到知己知彼,百战不殆,不出意外的话,可以达到一种双赢的结果。
然而,这需要高度的信任关系,毕竟行业之间都是有很多秘密的,不是一个公司的人,不一定会把很多信息和资料放心地交给我们程序员,所以,一般来说,这两种方式其实对于做自己公司内部项目的程序员来说会比较适用。
总之,在获取客户需求的时候,我们要牢记一点,我们不是客户,要想获取有效的需求,想要做出客户满意的系统,那么就要向客户接近,多沟通,从客户的角度来做系统。
【声明】本文不是原创,原文地址:
http://blog.csdn.net/lingyun2005/archive/2010/05/21/5613101.aspx