谈面向客户的软件开发

读了Sumtec的继续思考,感触很多,随便写点东西。
Sumtec在他的post里面谈到了一个问题,就是软件开发要以客户为导向,而不是技术为导向;换句话说,就是要做面向客户的软件开发。客户是对产品或项目买单的人,我们辛苦的努力,最后能换回多少人民币,关键就是客户了。面向客户的开发,能够维系和客户的良好关系,减少返工次数,降低风险,最终提高开发效率,保证按时交付。
那么如何做好面向客户的软件开发呢?我认为要把握住下面这几点:
1、把满足客户的需求作为团队共同的愿景
通常,项目组内不同分工的人员都把完成自己的本职工作定义为自己成功的标准。需求人员的成功就是尽可能大范围地捕获客户的需求;系统架构设计师的成功就是设计一个稳定适应性强的架构;开发工程师的成功就是编写出满足系统设计文档要求的代码;测试工程师的成功是保证系统没有已知的bug... ...这些目标在一起,此消彼长,却不能保证整个组内有一个共同的目标。但是,当满足客户的需求这个愿景为团队所有成员所接受并且赞同的时候,在很多小问题上的争议将荡然无存,因为所有人都知道,大家是为了一个共同的目标去努力的;同时,这还能建立起合作和信任,这比所有人技能的总和还要大。
2、选定客户可控的软件生命期模型
Sumtec谈到了瀑布模型在开发中带来了种种问题。确实如此,瀑布模型不适合做面向客户的开发。因为在瀑布模型面前,只有走完整个模型,客户才能看到他要的东西;换句话说,客户在整个项目周期中,对项目是不可视的。不可视的项目周期给客户一种对项目失去控制的感觉,这会引发很多问题,比如进度计划,比如需求变更,等等。
阶段交付,通常是受客户欢迎的模型。这样,客户对整个项目的进展情况,有了直观的认识。很多更改进度计划或者提出进一步需求的想法,会被客户主动抛弃,因为客户知道了,这对项目会带来什么后果。同时,在每次交付之后,都能矫枉过正,最大化地满足客户需求。
3、弄清楚真正的客户是谁
这个问题非常重要!
通常,客户会派出代表来提出需求,监控项目进行。但是,在很多时候,这个代表根本无法对项目做出决定性的决定!在他身后,有着更大的领导在指挥。这也是在项目进行中,客户代表会提出很多不合理要求的原因。在项目启动阶段,务必要通过各种手段,对这一情况深入了解,然后在项目进行中,做好对幕后领导的汇报工作(哪怕只是对宏观问题的邮件抄送也比什么都不做强很多)。
4、准确捕捉客户需求
客户对自己的需求往往是十分模糊的,即使提出书面的需求说明书,也不过是一个草案,无法指导开发进行。但是,当客户看到开发出来的东西的时候,通常思维会变得活跃起来,会提出很多进一步的需求。开发方的需求人员,应该善于利用这一点,使用界面原型法,诱导客户提出更多的需求出来。
5、控制客户需求范围
客户的需求在天花板上,而我们的产品在地下。
客户由于不懂软件开发,会提出很多很多不切合实际、很难满足的需求;通常,客户还会认为他们提出的需求很容易实现。所以,一定要在项目启动阶段,把客户需求从天花板上拉下来,甚至放到地下踩两脚!
这个工作可以由产品经理、顾问来做。在客户提出具体需求前,先给客户方高级领导以及负责人提供免费的产品培训。让客户了解产品到底能解决什么问题,不能解决什么问题;按行业惯例和规范,每种问题都是如何解决的。这样,就把客户的想法规范到一个小筐筐里面,他们只能把自己无知的想法咽到肚子里,而不是吐给你。
6、对需求变更的态度
不管项目组成员做得多么好多么到位,需求变更是迟早会出现的。教条式的全盘拒绝变更以及完全迎合客户,满足所有变更都是不可取的。较好的态度是接受对项目影响不大的变更,以此保持和客户的关系。
7、维系和客户的关系
在每个里程碑都搞一个和客户的庆祝活动,经常发一些印有团队标志的纪念品,最重要的是,要偶尔给客户代表的上司发邮件,称赞客户公司和客户代表几句。
做这些应该找市场部、销售部的同事帮忙,他们往往更在行。

posted on 2004-09-10 10:15  陈叙远  阅读(4212)  评论(7编辑  收藏  举报

导航