在系统开发的过程中,如何从客户那里获取正确、有效的需求,是每个团队都需要仔细考虑的问题。如果最初的需求没有明确,就开始着手开发,到最后可能会有很多东西需要修改,浪费大量的时间、精力和金钱。

这件事说起来很容易,但实际做起来的时候,总会遇到各种各样的阻力,似乎在每个项目中都一样。所以,有很多人喜欢凭借之前类似项目的经验,或者自己对于业务的理解来做需求分析,要牵着客户的鼻子有,甚至于替客户决定如何来做系统。但是,这往往会导致客户抱怨:你们做的系统不是我想要的,根本就不好用!其根本的原因就在于:我们不是客户!

很多人都清楚的一个原则是,在做系统的时候要从客户的角度出发,但什么是客户的角度呢?在明确这个问题之前,我想大家应该了解我们程序员与客户之间的一些区别。

首先,我们和客户使用计算机的水平不一样。这一点是客观存在的,我们作为程序员,计算机就是我们战斗中的枪,那必然是非常熟悉,而且整天24小时至少会有十几个小时在和计算机打交道,每个人熟悉的软件至少也会有十几种。而作为客户,可能只是在上班的时候使用,而且使用的软件非常有限,一般就是Office,加上有限的几个软件。

其次,我们和客户对业务知识的掌握不一样。客户的业务知识就是他所从事的行业的知识,比方说对于一个保险公司的业务人员来说,他们的业务知识就是与保单、代理人、承保、理赔、保全相关的各种内容,而对于贸易型企业来说,他们的业务知识就是与采购、销售、产品、订单等相关的内容。如果我们没有做过相应的行业软件的话,那么我们的业务知识就很差。这也正是为什么好多软件公司想要做一种行业软件时,所存在的壁垒。

既然有了这么大的不同,那么我们想要从客户的角度出发,就要以客户的计算机水平和业务水平来考虑,这样做出的东西才是给客户用的,而不是给我们程序员用的。

想要达到这个目的,首先我们就要从自己做起,努力去学习各种业务知识,要有不耻下问的精神,千万不要觉得自己是做IT的,就孤芳自赏,而对于其他行业的人员,就觉得不如自己。古语说得好:三人行,必有我师。每个人的知识都有不同的重点,客户中有很多人掌握着我们所不知道的知识,不向他们请教、学习是不行的。

然后就是要多多与客户沟通,不同时间、不同地点、不同的环境中,客户的想法也会有所不同,这也正是需求的变更,我们不能要求客户提出的需求是一成不变的,有人说过,唯一不变的就是变化!想要解决这个矛盾,我觉得最有效的方法就是沟通,这样的话,如果客户的需求有了变化,我们会在第一时间了解,并为其做相应的工作,这样可能就会节省出很多的时间和精力。并且,沟通是会增进我们与客户之间的感情的,如果双方都认为对方是自己的朋友,很多麻烦的事儿也就迎刃而解了。

接下来,我想和大家聊聊当前做系统时,获取需求可能的几种做法,并提出自己的浅薄的意见。

1、闭门造车型——也就是凭借自己对行业的理解,或者是以往项目的经验,猜当前项目的客户会提出什么需求,而不理会客户的具体情况。

大家也应该可以立刻给出结论,这样的项目很难成功,即便是我们之前做过100个类似的项目,那么在做第101个的时候,也会发现企业会有自己的特点,客户会有自己的特点,毕竟我们做出的系统不是给机器人用的,而是给人用的,有人存在,就会有差别,我们就应该具体情况具体分析。

2、积极沟通型——作为程序员或者是项目经理,在开发的整个过程中积极地与客户沟通,及时了解客户的需求是否有变化。

这种类型应该比上述的有很大的改善,但是我觉得需要注意的问题就在于沟通和信息传达的效率上。一般来说,可能这种工作会由项目经理来做,而不是由具体开发的程序员来做。这样的话,就需要做沟通的人有充分的计算机知识和业务知识的储备,既能够了解客户所说的话,也能够把客户所说的话正确地传达给程序员,并且还可能会加入自己对如何在系统中实现的理解。

3、现场客户型——这是敏捷开发中一个很重要的原则,就是在开发的现场要有客户,不断地提供对系统的意见和反馈。

首先这一点很难达到,毕竟客户也有自己的工作,很难整天地坐在我们旁边为我们提供反馈。另外,如果说是一个或者有限的几个客户,那么就需要他对所要负责的模块相关的业务知识都非常了解,这对于现场客户的要求也是非常高的。

上面几种形式都是我们被动地来接收需求,其实我觉得我们还可以主动出击,去找需求。

4、观察客户型——就是说我们要在客户工作的时候一直观察,看客户是如何在实际工作中作出各种各样的决定的,也了解客户的工作方式和工作内容,看看如何能够通过系统来帮助他们。

5、一起工作型——这种方式意味着我们要把自己下放到客户的办公室中,去和他们一起工作,有些边缘性的工作,我们作为学徒的角色,帮客户完成。

上面的两种方式所获取的需求都是第一手的需求,而且通过和客户一起摸爬滚打,我们不仅能够获取宝贵的需求和业务知识,而且还可以了解到客户对于每个需求的迫切程度,以及完成每个需求能够为客户带来什么,这样就可以做到知己知彼,百战不殆,不出意外的话,可以达到一种双赢的结果。

然而,这需要高度的信任关系,毕竟行业之间都是有很多秘密的,不是一个公司的人,不一定会把很多信息和资料放心地交给我们程序员,所以,一般来说,这两种方式其实对于做自己公司内部项目的程序员来说会比较适用。

总之,在获取客户需求的时候,我们要牢记一点,我们不是客户,要想获取有效的需求,想要做出客户满意的系统,那么就要向客户接近,多沟通,从客户的角度来做系统。

程序员应知——我们不是客户相关推荐

  1. 【观点】程序员应知——循序渐进

    导读:作者侯伯薇在CSDN博客中写了一篇<程序员应知--循序渐进>,在他看来,想成为一名优秀的程序员要脚踏实地的,一步一个脚印,逐步提高,切忌不可一蹴而就. 以下是文章内容: 作为程序员, ...

  2. 程序员应知——学习、思考与分享

    有人说,程序员是个苦差事,一辈子总是要不停地学习,学习新的技术,学习新的架构,学习新的工具,一旦一段时间不学习,就会发现其他人嘴里冒出来的新鲜词,自己已经搞不懂是什么了. 的确,作为程序员,学习很重要 ...

  3. 转载:程序员应知——团队精神

    转载:http://blog.csdn.net/lingyun2005/archive/2010/08/09/5797890.aspx 程序员应知--团队精神     写在前面:前几天终于看完了< ...

  4. 程序员应知——破窗与童子军军规

    首先让我来解释一下这两个词,尽管看起来二者之间没有什么必然联系. 破窗说的是,一个小区,本来干净整洁,没有犯罪事件,大家安居乐业.然而,忽然有一天,一个窗子被打破了,但是没有人管.接下来,不好的事情接 ...

  5. 嵌入式程序员应知道的0x10个基本问题

    预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * ...

  6. 程序员应知——团队精神(转)

    大家都知道,现在的软件开发已经不再是20年前个人英雄主义的时代,一个超级程序员就能够搞定一切的情况已经很少存在了.更多的情况是我们都是以团队的形式进行系统的设计和开发,因此,团队精神也变得越来越重要. ...

  7. 想成为嵌入式程序员应知道的16个基本问题

    这是嵌入式C程序员的基本知识.作者在Embedded Systems Programming杂志上发表了很多嵌入式系统开发方面的文章. C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法.这些年 ...

  8. 想成为嵌入式程序员应知道的0x10个基本问题

    C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法.这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相 ...

  9. 想成为嵌入式程序员应知道的0x10个基本问题[转]

    作者:Jones Nigel   更新日期:2005-04-08 来源:internet   浏览次数: 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况.这个测试只是出题者为显示其对ANS ...

  10. 想成为嵌入式程序员应知道的0x10个基本问题——转

    语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法.这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当 ...

最新文章

  1. (012) java后台开发之Apache与Tomcat有什么关系和区别
  2. python中abc属于字符串吗_Python基础学习:字符串
  3. JSP中的pageEncoding和contentType属性(转)
  4. new Grammar in 740 - Internal table group by
  5. openstack placement 组件作用理解
  6. 疫情攻坚战“分秒必争” 宜搭免费开放疫情相关应用
  7. [转]Eclipse插件开发之基础篇(2) 第一个Eclipse插件
  8. Redis常问面试题及答案
  9. Android中实现非本地图片的点击态
  10. InnoDB配置文件复习
  11. 计算机网络 自顶向下方法
  12. mysql删除一行_MySql删除表中一行的实操方法
  13. EasyUI项目驱动学习
  14. Dynamics CRM2013 Server2012R2下部署ADFS和IFD遇到的问题
  15. 【Android破解笔记】割绳子2内购
  16. 行业集中度数据(2000-2020年 )
  17. 水准测量的各种数字考点
  18. Matlab处理气象数据(十)给地图添加边界线
  19. python中变量名_python中变量的命名及详解
  20. 《网络协议》笔记-网络分层

热门文章

  1. Django1.6 运行manage.py 报错解决办法(ImportError)
  2. [Luogu] 树状数组
  3. c语言的数组长度问题
  4. 懂得永恒,得要我们进化成更好的人。
  5. 体验Microsoft Longhorn 和 Google Earth 带来的视觉震撼
  6. Python-file -note
  7. 解决bootstrap-table表头filter-control select控件被遮挡显示不全的问题
  8. Spark RDD概念学习系列之Pair RDD的分区控制
  9. 【学校集训】【USACO15DecG】Bessie's Dream
  10. Android进阶笔记18:Android 获取Button的高度、宽度、坐标值