对客户请求的“膝跳”(k n e e - j e r k)响应设定优先级,“我需要所有的特性,只要以某种方式使它发生即可。”如果用户知道低优先级需求可能不会实现,那么就很难说服用户设定需求的优先级。一个开发者曾经告诉我,优先级是不必要的,因为如果他把需求写入软件需求规格说明中,那么他就会不遗余力地去实现这些需求。然而,这并没有考虑到每个功能何时实现的问题。开发者更喜欢避开设定优先级,因为他们觉得建立优先级与它们要向客户和经理表示的“我们可以全部完成产品”的态度相冲突。
现实中,一些特性比其它特性更重要。项目接近尾声时,在极其简单的“快速开发阶段”,当开发者抛弃掉一些不必要的功能以保证按时完工的时候,这表现得尤为明显。在项目的早期阶段设定优先级有助于你逐步作出相互协调的决策,而不是在最后阶段匆忙决定。在你判断出需求的低优先级之前,如果你已经实现了将近一半的特性,那这将是一种浪费。
如果让客户自己设计,那么他们将会把8 5 %的需求设定为高优先级,1 0 %的需求设定为中等优先级,5 %的需求设定为低优先级。这没有给项目经理很多灵活性。通过废除那些不必要的需求并且简化那些不必要的复杂部分,这被视为是快速软件开发的最佳实践(McConnell 1996)。在一个大的项目中,以管理为指导的开发组对系统分析员设定需求优先级的意见表现出极大的厌烦。经理指出,他们可以不需要一些特殊的特征,但另外的特征需要用于弥补遗漏的需求。如果他们拖延实现太多的需求,那么目标系统将达不到业务计划中所反映的情况。当你评价优先级时,应该看到不同需求之间的内在联系,以及它们与项目业务需求的一致性。