(3)没有让客户知道需求变更的代价

  对变更的影响没有评估是需求变更泛滥的根本原因。变更都是有代价的,应该要评估变更的代价和要让客户了解需求变更的后果。如果客户不知道需求变更付出的代价,对开发人员的辛苦会难以体会。

  相比于需求开发人员而言,客户可能对需求变更认识不足,认为他们出钱,软件开发团队要为它服务。因此,客户对需求变更往往会肆无忌弹,将需求变更视为儿戏,随个人喜好随意变更需求。所以,在和客户接触时应该挑明态度,特别是要让他们清楚需求随意变更所带来的代价和风险。如果客户认为代价太大,那么开发人员没有必要及时修改,按原来的进度走,但仍要记录变更,待下一版本在修改。

  如何有效控制非功能性需求的变更?

  做任何变更之前,我们都要考虑后果。由于非功能性需求变更在开发中所处的重要地位,一旦需求发生变化,影响面是很广的。因此,有效控制非功能性需求频繁变更是一件不容小视的事情。

  (1)建立明确的非功能性需求基线

  对于软件开发来说,变更无可避免,也无从逃避,只能积极应对。因此,在开发过程中,建立明确的非功能性需求基线是一件重要的事情。如果非功能性需求没做好,基线范围含糊不清,容易被客户抓住空子,往往要付出许多无谓的变更。如果非功能性需求基线做得好,文档清晰且又有客户签字,那么后期客户提出的非功能性需求变更会大大减少。因此,在建立需求基线的时候千万不能手软,这并非要刻意针对客户,而是不能让客户养成经常变更的习惯,否则后患无穷。

  (2)建立需求变更管理流程

  需求变更对软件开发成败有重要影响,既不能一概拒绝客户的变更要求,也不能一味地迁客户,所以必须要做好需求变更的控制。有句通俗的话说得非常好:需求变更管理的目的不是控制变更的发生,而是对变更进行管理,确保变更有序进行。需求变更管理流程包括变更申请环节、审批人员、审批事项、审批流程等。

  目的有两个:一是将客户下达变更的流程尽可能地规范化,减少张嘴来的非必要、非紧急、非合理、非高层领导意图的无效变更。二是留下书面依据,为今后可能的成本核算准备好变更账。因此,凡未履行审批程序的变更,一律是无效变更不予受理。在实践中,人们往往不愿意为小的需求变更去执行正规的需求管理过程,认为降低了开发效率,浪费了时间。但正是由于这种观念才会使到需求变更逐渐变为不可控,终导致项目的失败。

  (3)确认客户是否接受变更的代价

  需求变更作为一个计划外的风险对项目肯定存在冲击,只是大小的差别。而且客户的需求是永远不会满足的,可能一个样,为了达到控制频繁的需求变更。需要将变更后产生的成本进行评估与量化,形成分析报告提交双方领导。否则,一味的妥协只会让项目进一步恶化。因此,要让客户认识到变更都是有代价的,不要让客户养成随意变更的毛病。一般来说,如果客户认为该非功能性变更是必须的,而不是其上级领导拍脑袋提出的会接受这些代价。通过与客户的沟通和协商,开发团队即使没有回报也不会招致客户的埋怨。

  (4)加强合同约束力

  虽然软件开发合同很难在签订之初能够精确定义每项需求,单靠合同是帮不上忙的,但也不能忽视合同的约束力。因为有时销售人员为使客户能够快速的签订合同,往往草率决定和片面同意客户提出的需求。当客户提出新的需求时,销售人员往往一看"应该"只是一个小小的修改,没有太大的影响,可能会直接答应能变更。所以,在与客户签订开发合同时,可以增加一些相关条款,如限定客户提出需求变更的时间,规定何种情况的变更可以接受、拒绝接受或部分接受,还可以规定发生需求变更时必须执行变更控制流程等。

  (5)加强感情沟通,注意沟通技巧

  大多时候单靠合同的约束力是解决不了纷争的。客户着急了是一句潜台词:做不做,不想做滚蛋,想做的公司多着呢。例如,有时明明是不合理的要求,可是客户也会狡辩凭什么不给他们做,这可是合同范围内的工作。所以,单看合同是没用的。

  那可怎么办呢?通常的做法是通过感情联络,争取客户的同情。我们常常对客户说的一句老生常谈的话,是提需求也要讲究合情合理,这句话在变更管理中有着独特的意义。用我们的行话说是:做好需求变更管理控制只是做好了一半的工作,还有一半的工作是去讲道理,去用心、用感情劝客户回头。

  月有阴晴圆缺,潮涨潮落。变化并不一定总是给我们带来麻烦,有时也会带来惊喜。在软件开发中,对待客户提出的非功能性需求变更,我们需要用平常心去看待,不是一味拒绝,也不要一味答应。