软件项目超出计划的目标,通常被称为范围蔓延,是IT开发过程固有的矛盾。范围蔓延由几个原因引起而且如果处理不当将成为项目失败的主要原因。你必须采取一些步骤来控制对项目的改进并确保你和你的开发团队不会受到这些改进所造成的负面影响的损害——完工时间的拖延和工程预算的超支。
幸运的是,你可以遵循一些规则来防止项目范围蔓延造成出轨。我们马上就会学习这些方法。但是首先,让我们先来看一个警示性的例子,它能够帮助我们明白如果没有合适的计划和控制,事情会变得多么坏。
当我在一家顾问公司工作的时候,我亲眼见证了我们的姐妹公司在一次公司内部为用户开发以Web中心的桌面环境的时候在项目范围上所做的挣扎。这个项目在五年前迫不及待的展开,没有项目计划而且只有一个主要开发者指导它的进度。开始的时候这个项目有许多很有天赋的Java程序员而他们所有的指导来自于他们的并非技术专家的上司。
这听起来象是一场恶梦,它确实是一场恶梦而且现在还是这样。今天这家公司有了一个不值得的客户和一个其竞争对手在两年以前就已经超越的产品。随着这个项目继续进行,这家公司自身已经无法为它的员工发工资了,这对投资者看起来象一个无底洞,而且在它的管理层看来还只是刚刚开始。由于在开始工作的时候没有签定正式的项目意向书,这个项目的范围不断的改变,甚至每天都在改变,而所有的工作,从开发到销售和质量保证都因为不断改变的项目范围所带来的繁重工作而停滞。
项目范围改变的效果并不一定是负面的,这得看你的实际情况。如果你是担当顾问或者是为一家顾问公司工作,那么软件功能改进对于你的业务来说是非常好的--只要能够很专业的处理这个问题。对于公司内部的软件开发过程,额外的功能能够让你的产品比你的竞争对手更胜一筹。但是,如果你发布软件的时间推迟一两个月,那么这个优势就会被丢失。通过控制你开发过程的费用并按时发布软件,你的项目就会取得成功,而不需要损失在软件制作过程中的灵活性。
控制项目范围在编写第一行代码以前就已经开始了。不论实际情况如何,每一次开发工作都应该有相应的项目计划或者项目协议书。即使你只是一个希望让老板高兴的程序员,你也能够因为在开始工作以前制定计划书而得到很多的好处。
可以使用下面的步骤来使自己成功的控制项目的范围:
1.确保自己明白项目的范围。与项目主管会谈并发布整个项目的概览交与他们查看和评论。
2.了解你自己认为重要的东西和项目主管认为重要的东西。在项目进行的整个过程里把你得到的信息按顺序列成一张表。这些信息应该包括预算,项目截止时间,功能发布,客户满意度,以及员工的满意度。一旦项目开始,你将使用这个表来调整你的时间安排。
3.定义你的项目发布目标并让项目主管同意它们。项目发布目标应该是在项目过程中应该完成的功能的大概描述。
4.把经过同意的项目发布目标细化成具体的工作要求。这些要求应该尽可能的详细并使用一个简单的电子表格来完成它。你的项目越大,那么你就应该包括更多的细节。如果你的项目持续的时间不止一两个月的话,不要忘记包括开发过程中软件升级的时间,你还应该总是为编写充足的文档而留下时间。
5.将项目分解成大的和小的里程碑并编写一个大概的项目时间表以获得项目主管的同意。小的里程碑应该不持续一个月以上。不论你用什么方法确定任务的持续时间,你都应该为修正错误留下时间。在与不熟悉的员工一起工作的时候,我通常把时间定为预计工作时间的140%到160%。如果你的时间比较紧,那么你应该重新评估你的项目发布目标。在预算的范围内和截止的时间以前完成项目能够为额外的改进留下空间。
6.一旦时间表已经创立,那么你就需要使用一个PERT图表或者任务分配表来分配资源和确定项目的关键路径。微软Project软件能够自动为你创建这些东西。你项目的关键路径会在项目进行的过程中发生改变。遵循这个图表来确定什么发布目标必须在规定的时间里完成。在非常大的项目里,我尽量做到不把我的开发阶段标准定义得太早,但是即使一个大概的计划也能够为你提供成功发布软件的依据。
7.意识到会出现项目范围蔓延。尽早填写“项目范围改变要求”表格并在开发的过程中说服项目主管。一个“项目范围改变要求”表格能够让你在按项目主管的要求进行时间表改变以前对这些改变进行收益投入比的分析。
如果你能够立刻开始所有这些步骤,那很好。但是,即使你只能开始遵循其中的一些步骤,那么你所遵循的任何步骤都能够让你尽可能的避免和控制项目范围蔓延。用那种方式,你就能够更好的控制你的项目,而不是让你的项目控制你。