这几天我都在为所负责的软件开发项目心烦着,因为这个项目的时间表远远滞后于进度规划。据Gartner的一项调研结果,在软件开发项目中有55%的受访者认为他们的开发进度控制是失败的,有30%的人则认为软件开发项目延期是家常便饭的事情。为什么会有这么多的进度管理问题呢?
时间管理是软件开发管理中的一个关键职能,也称为进度管理。它对于项目控制至关重要,也是对项目成本有直接影响的因素之一。因为缩短项目的时间不仅仅是能节约那些与时间相关的成本,而且还可以避免由于延期导致的损失,如赔付延期交付违约金等。本文从软件开发项目的时间管理角度出发,介绍关键路径法在时间管理中的应用,并提出实现关键路径法的步骤和建议。
时间管理常见的错误是什么?
软件开发项目延期的原因也许有很多,但肯定有一条的是时间没有管理好,这被公认称为是项目延期的第一因素。事实上,时间管理究竟是"错在哪里"呢?这个问题通常比技术或者业务问题更值得花时间来思考。
(1)时间进度表基线制定错误
一般来说,在软件开发中追求的是"如期、如质、如预算"的开发出适合需求的软件产品。因此,成功的软件开发必须事先制定具有一定的预见性、前瞻性和切实可行的时间进度计划。项目时间进度基线是指一种基线化的开始日期和结束日期,它代表着项目细分后的每个任务的预期开始日期和预期完成日期。
一般来说,进度表基线是使用经过评审的历时估算和资源估算来构建的,该进度表也是作为任务进度跟踪的基线。项目进度表可以是总体概览的,比如项目主进度表或者里程碑进度表;也可以是明细的,比如每个里程碑内的详细任务进度表。因此,当进度表基线制定有失误的时候,每个任务的开始时间和完成时间会产生混乱,严重的时候还会在时间上不能衔接,进而会带来资源增加、成本超支等问题。事实上,实践经验也证明许多软件开发项目的延期,是由于在进度表基线的时间规划上或多或少的存在着失误。
(2)错误的缩短项目非关键路径时间
在软件开发过程中,人们通常会认为如果能缩短项目某些任务的工期可能会缩短项目的总工期。例如,某个工作结果需要项目团队花费二个月来完成,但如果能够在一个月内完成任务,可能会大大缩短项目进度了。因此,许多项目经理及其团队可能会使用工期压缩技术来提高某些任务的进度,或通过给这些任务分配更多的资源来缩短工期。
例如,通过赶工的方式来实现缩短工期。赶工的主要优点是可缩短完成项目的时间,但缺点是通常会提高项目的总成本。而实际上,软件开发项目通常是一个迭代的过程,它不但需要规划好项目每一个任务的开始和结束时间,而且还需要做好任务上下之间、前后顺序和关联之间的衔接。因为如果通过赶工只是缩短了非关键路径上的任务,并不会缩短项目的开发时间,而只会是提高了开发成本。
(3)没有明确的时间管理,极易产生"拖延综合症"
所有的项目工作都是通过人来实施的,如果不考虑人的因素,时间管理目标通常会失控和很难实现的。也是说,成功的时间管理需要考虑人的一些内在因素,包括人的工作习惯或者天性。因为人的习惯和天性也是造成项目工期拖延的原因之一。例如,在我们的日常工作中经常会碰到这样一种现象,比如要提交一份报告,通常需要三天时间。但在多数情况下,员工可能会在第三天才开始写这份报告。也是说,他把前面两天时间安排去做其它工作了,从第三天才开始写。这样一来,他的报告不可能如期完成,即使靠加班加点如期完成也严重影响了报告质量。我们把这种情况称之为"拖延综合症"。
有统计表明,如果没有明确的开始时间,会在项目和工作中极易形成"拖延综合症"。这也称为帕金森定律(Parkinson's Law),它是指工作总是拖延到它所能够允许迟完成的那。因此,如果没有明确的时间观念或忽视了"拖延综合症",后都是会造成项目延期,或者是勉强按期完成任务。
什么是时间管理的关键路径法?
时间管理是软件开发项目管理一个重要的内容,因此必须要使用高效的工具来确保时间受到控制,关键路径法是其中一种常用的工具。正所谓:向关键路径要时间,向非关键路径要资源。
(1)什么是关键路径法?
关键路径法(Critical Path Method, CPM)早出现于20世纪50年代,它是一种基于数学计算的时间规划管理方法,是网络图计划方法的一种。它是时间管理中很实用的一种方法,广泛地用于项目进度分析和时间管理。一般来说,在项目管理中关键路径法是上连着WBS(工作分解结构),下连着执行进度控制与监督。因此,一般是用它来预测整个项目的工期,和帮助项目主管防止项目进度超期。
关键路径法是将项目分解成多个独立的活动并确定每个活动的工期,然后用逻辑关系(结束-开始、结束-结束、开始-开始和开始结束)按照活动的关系形成顺序的网络逻辑图,从而计算出项目的工期和各个活动的时间特点(早晚时间、时差)等。它是通过确定网络图中的每一条路线的起始时间到结束时间,从而找出工期长的线路。也是说,整个项目工期的决定是由长的线路来决定的。有一些人认为关键路径包括的都是重要的活动,然而关键路径关心的只是项目的时间维,它的名字中包含"关键"并不意味着它包含所有的关键的重要活动。因为对于一个项目而言,在项目中通常有多个任务同时进行,只有项目网络中长的或耗时多的活动完成之后,项目才能结束,这条长的活动路线才叫关键路径,组成关键路径的活动才称为关键活动。
(2)关键路径决定着项目工期
一般来说,关键路径上的持续时间是决定着项目的工期,因为关键路径上所有活动的持续时间总和是项目的工期。关键路径上的任何一个活动都是关键活动,其中任何一个活动的延迟都会导致整个项目完工时间的延迟。关键路径上的耗时是可以完工的短时间量,若缩短关键路径的总耗时,则会缩短项目的工期;反之,则会延长整个项目的总工期。但是如果缩短非关键路径上的各个活动所需要的时间,则不会影响项目的完工时间。
简单的说,关键路径上的活动是总时差小的活动,若改变其中某个活动的耗时,则可能使关键路径发生变化。所以,关键路径是相对的,是可以变化的。在采取一定的技术措施之后,关键路径有可能变为非关键路径,而非关键路径也有可能变为关键路径。计算关键路径可以用正推法计算出每项活动的早开始和早结束时间,用逆推法计算每项活动的迟开始和迟结束时间,从而可以确定每一项活动是否具有浮动时间。如果浮动时间不为零,也是说这项工作不是位于关键线路上,它是具有浮动时间的。
综合来说,关键路径法的优点是能为项目及其主要活动提供了图形化的显示,这些量化的信息为识别潜在的项目延迟风险提供极其重要的依据。例如,使用关键路径分析可使进度均衡。因为当项目经理知道了关键路径上的一个任务会落后于预期进度时,他可能会给关键路径上的其它任务分配更多资源来弥补时间;或通过跟踪关键路径,以判断是否需要采取积极主动的行动来达到预期目标。
如何应用关键路径法优化时间管理?
关键路径表示完成项目的短时间。如果关键路径上的一个或者多个活动比预期计划要长,除非采取修正行动否则项目进度将会延后。因此,在软件开发时间管理中,控制进度表的基本思想是在一个庞大的网络图中找出关键路径,并对各关键活动优先安排资源以尽量压缩需要的时间。而对非关键路径的各个活动,只要在不影响完工时间的条件下,抽出适当的人力、物力和财力等资源,用在关键路径上以达到缩短工程工期。
(1)关键任务的定义和时间估算
为了找出项目的关键路径,必须首先要设计好网络图。因此,第一步是在开发范围内用WBS(工作分解结构)把所有工作分解成小任务。这个过程的输出是任务清单和里程碑清单,需要注意的是这些清单不仅仅是要列出有哪些任务和有哪些里程碑,而是任务还要有含持续时间或具体的时间工期等信息。因为关键任务的另一个属性是时间属性,这在时间管理中是非常重要的。一般来说,任务的持续时间估算是一个复杂的估算过程,因为有很多因素都会影响到任务的持续时间,如工作效率水平,投入的资源数量等。
(2)评估任务的优先级
根据优先级为每个任务建立相对重要性是核心的一步。因为在软件开发中事情会是非常多,不可能平均分配时间。如果经常出现时间被次要工作过度占用,这会是很糟糕的情况。因此,相应的根据紧急程度把任务涂成绿色、黄色和红色,意味着不仅可以很容易的区分项目内和项目间的任务优先权,而且也可以很明确的分配时间资源。另外,评估任务的优先级也会把时间管理观念推广到团队的各个层次。不但可以确保工作在合适的时间内完成,而且还不需要管理层经常性的提醒和干预。所以,明确任务的优先级是影响非常大的一个步骤,因为它能大大改善在多重任务中时间资源的分配效率。
(3)关键任务的排序和路径计算
关键任务的排序是根据任务的前后和依赖关系形成网络图。简单地说,是我们要找出耗时多的活动序列组成的路径。因为找出了关键路径后,我们可以预测项目的工时,终确定项目的工期。这里需要提醒的是,只有在考虑到资源平衡和资源日历后的任务网络图才会是一个有价值的进度表。因此,在存在可预见风险的路径点上,事前一定要进行资源优化,以防止项目超期。
(4)监督和检查进度表的实施
一般来说,在网络图上计算关键路径后会形成进度表。然后,我们通过监督和检查进度表与实际情况的比较,能很方便的使项目时间受控了。例如,通过赶工或快速跟进的方式对滞后的进度进行压缩,以使进度表受控,从而也使到项目时间得到控制。