当我们做软件开发的是,客户通常希望花更少的钱、用更短的时间做更多的事情。《快速软件开发》中举了这么个例子:
假设你想卖掉一辆汽车去换一艘汽艇,经过估算汽车至少要卖5000块钱才够你凑齐足够的钱买到游艇。一个买主看中了车,但是他只愿意出4500块钱。你说”少于5000不卖“,他也坚持”我最多能出4500“。
这个谈判的例子是基于立场而不是利益,所以最终的结果必然一赢一输。但是我们假设买主可以让你4000块钱就能购买一艘游艇,这样你不仅买到了游艇还挣到了500块钱。这个故事想要告诉我们的是谈判要基于双方的利益,而不是立场。
软件开发也是一样,通常客户让我们6个月开发完成的项目至少需要9个月,没人想在此后的6个月每周工作60小时以上。为了保证拿下项目,你必须做出让步,考虑一个双赢的方案。在项目进度的谈判中最容易出现的问题就是双方针对进度计划争论不休,此时我们应该避免对立立场 ,尽量从各个角度提出多种备选方案。如果客户一定要坚持按照指定的进度完成项目,你可以从下面几个方面说服他们:
1.过分乐观的预估开发速度
过分乐观的预估开发速度会对进度计划造成负面影响,指定计划需要追求实际。
2.延长开发计划可以增加成功的机会
若将计划进度缩短,则如期完成的几率也相应的减小。
3.提引以前类似项目的失败教训
指出以前的某些项目之所以延迟正是由于进度估算过短而造成的,并且还产生了其他很多由于超时引发的各种问题。尽量使他人明白不应再犯相同的错误。
不要将谈判看做你死我活的角斗游戏,应从解决问题的角度进行协商,真正明智的谈判者会努力达到双赢的解决方案。在进度谈判中提出多种备选方案是非常重要的,由于开发人员掌握着关键实现技术,因此他们比与之谈判的非技术人员更有责任从各个角度考虑各种可能方案,并解释每个方案的可实现性及各方案的平衡因素。
在筹划软件项目时,最好先确认一下其中存在多少可以灵活调整的内容。如:
1.与产品有关的灵活变通
- 将一些设计功能放到下一个版本实现。大多数人在提出需求时,并不清楚这些需求是否必须全部在当前版本被满足。
- 砍去某些实现起来费时或者需要谈判后才能确定的特性。
- 对某些特性不必精雕细琢,只需要实现到某种程度即可。
- 尽量轻松的实现各特性的详细功能需求,可以使用一些第三方组件来贴近功能需求。
- 如果处于项目初期,则增加更多的开发人员。
- 增加高层次的开发人员
- 增加更多的测试人员
- 在管理方面给予更多的支持
- 提供更好的开发环境
- 提高最终用户参与度
- 在产品设计的时候只提出进度目标,不设定确切期限。
- 在产品设计的时候探求缩短开发时间的方法。
- 先给出进度的估算值,在随后的项目进展中逐步精确。