业内流传着这样一句令人心酸的话:“规划规划全是鬼话,计划计划全是空话”。实际上,开发管理模式选择不当将极容易造成进度失控,也将会导致两个问题: 一是质量无法控制,二是时间无法控制。因为,项目进度的延迟总是在快到计划结束的时刻暴露出来,结果是谁也不知道到底什么时候才能够结束项目,到最后项目经理只好请辞。那么,到底问题出在哪呢?
艰难的项目进度管理
软件开发管理一直有一个令人困惑的难题,就是如何确保项目进度管理。项目进度控制是项目管理工作中的重要一环,也可以说是最艰难的工作之一。在软件开发中项目进度失控受到很多因素的影响,主要有以下几种情况:
(1)缺少进度指路明灯
当我们在路上行走的时候,会在沿途观看路标,当到达某一个路标时,我们便知道还有多少路或多少时间才能够到达终点。这些路标是我们在旅程中的里程碑,让我们可以清楚地知道目前所在地离开目的地有多远,也让我们能估算何时才能够到达目的地。
对于在路上行走的我们,可以通过路边的里程碑这一个简单工具来获知自己的进度信息。当进行软件开发的时候,我们也需要建立开发项目的里程碑,使我们知道项目的进度。里程碑是项目管理不可忽视的一部分,通常意味一个时间点上可交付成果的完成,好的里程碑管理就像一张地图指示我们走向项目目标的进度。
(2)项目进度估算准确性差
软件项目开发进度控制面临的最大挑战就是项目进度估算的准确性差。据统计,在对软件项目进度与成本估算时,大多数项目实际完成时间超过估算进度的25%到100%。根据我的经验要想对项目进度进行有效的估算,必须抓好以下两个方面:一是项目计划的可行性和可操作性,这是进度估算的基础。二是要对项目进度进行合理的度量,这样才能够获得项目的真实进展情况,并对项目估算做出相应调整。
(3)前松后紧,项目进度缺乏有效监管和控制
一般人在工作时都有前松后紧的习惯,而里程碑强制规定在某段时间做什么,从而合理分配工作,细化管理粒度。对复杂的软件开发项目而言,每一阶段的进度都需要逐步逼近目标,里程碑产出的中间“交付物”就是每一步逼近的结果,也是控制的对象。如果没有里程碑,中间想知道“现在进度做的怎么样了”是很困难的。
(4)没有尽早发现和降低项目风险
在软件开发中错误发现得越晚,对于开发造成的损失越大。里程碑式开发模式可根据每个阶段产出结果分期确认成果,避免血本无归。通过早期里程碑评审一般可以提前发现需求和设计中的问题,降低后期修改和返工的可能性。例如,在需求分析阶段发生的错误,那么最多就是把需求分析写一遍,损失的是一个人的劳动;而到了测试阶段发现了需求错误,再回去重新做需求分析,那么损失可能是致命的。
目标导向衍生里程碑式管理
一般来说,在项目开始时项目经理都会对开发项目进度制定一个详细的计划。通常情况下,这需要采用一些具体的开发模式技术,最常用的技术是网络计划和里程碑计划。网络计划是任务导向,以工作分解结构(WBS)为基础;里程碑计划是目标导向,以目标分解结构(OBS)为基础。有时两种方法可以混合使用,如在网络计划中设置里程碑。
(1)什么是里程碑式管理
里程碑是一个目标导向模式,它表明为了达到特定的里程碑需要完成的一系列活动。里程碑式开发是通过建立里程碑和检验各个里程碑的到达情况,来控制项目工作的进展和保证实现总目标。
软件开发项目生命周期中有三个与时间相关的重要概念,这三个概念分别是:检查点、里程碑和基线。检查点是指在规定的时间间隔内对项目进行检查,比较实际进度与估算计划之间的差异,并根据差异进行调整。我们可以将检查点看作是一个固定“采样”时点,而时间间隔根据项目周期长短不同而不同。里程碑是指一个具有特定重要性的事件,通常代表项目工作中一个重要阶段的完成。在里程碑处,通常要进行检查。基线则是指一个配置在项目不同时间点上通过正式评审而进入正式受控的一种(里程碑)状态。
三者的关系是:重要的检查点是里程碑,重要的需要客户确认的里程碑,就是基线。有一句通俗的话是这样描述:没有检查点,工作难进展,不设里程碑,项目往后推,基线不评审,客户吃不准。
(2)怎样才算是一个里程碑呢?
简单的说里程碑是完成一个阶段工作后可以看到部分结果的检查点。一般来说,在软件开发过程中,我们都会经过一定的流程或阶段,例如信息搜集阶段、需求分析阶段、系统设计阶段、系统开发和系统测试阶段。每个阶段都会产生交付物,每一份交付物的完结说明我们已经完成了一个阶段的工作,一般情况下我们是在确认这一份工作成果后才会进入下一个阶段的工作。因此,每一份交付物将就是开发过程中的里程碑。
里程碑(基线、基点)是一个软件配置在开发周期内的某一特定时刻、正式的事件,它也就是阶段性目标。里程碑是团队阶段性工作完成的标志,对于任何一个里程碑都应该给于认真的检查、审定和批准。在里程碑中间应要设置大量的检查点,这些检查点应要细分到一旦检查点出现问题不至于在进度上失控。
(3)里程碑可为进度预留缓冲时间
使用里程碑式模式还有一个好处,就是将大项目分成若干里程碑式的重要阶段时,可在各重要阶段之间预留有缓冲时间。使用缓冲时间,可以很好的在项目未来实际执行进度和预计进度之间取得平衡。一般来说,在项目中我们需要为意外事故保留总开发1/3的时间,即“缓冲时间”。缓冲时间有助于一个项目适应意料之外的事件,例如缓冲时间可以用于弥补进度延误,或者是技术困难或是由于疏忽而忘记把任务写入进度,或者是未料到的难题而形成的时间损失,这种应付突发事件的缓冲时间在开发和稳定化过程中是每一个主要里程碑的一部分。
(4)警惕只问结果的里程碑陷阱
众所周知,里程碑是项目进度控制中的一个极为重要的概念,也正因为如此,人们也易于过于依赖里程碑,反而使项目进度落空。里程碑陷阱表现为人们在软件项目的里程碑被设定以后,认为“目标管理是只问结果,不计过程”,从而忽视对过程的监控而导致项目里程碑不能按期达到。
如何实施里程碑式的管理
里程碑一般是项目中完成阶段性工作的标志,不同类型的项目,里程碑也不同。其精髓首先是将大项目划分成若干个子项目或若干个子阶段;其次,是通过每一阶段对各人员角色职责的考核和监管,以保证开发过程的进度和质量。
(1)划分若干个子项目,设立里程碑检查点
项目进度是以里程碑为界限,将整个开发周期划分为若干阶段。根据里程碑的完成情况,适当的调整每一个较小的阶段的任务量和完成的任务时间,这种方式非常有利于整个项目进度的动态调整,也利于项目质量的监督。
在里程碑式的开发模式下,因为按子项目或子阶段来划分里程碑,每一个子项目都会经过一定的稳定化阶段。当再进入到第二个子项目的时候,就是基于前一个相对稳定的子项目基础之上,这样就将风险或错误的累加分散到最低。以局部的进度控制和质量控制来保证整体开发过程的稳定,使得质量和进度得以很好的控制,这就是里程碑式的开发模式优秀之处。
(2)每个具体的里程碑应与具体角色相关联
里程碑模式也可以称作项目实施进度管理模式,一但开发项目立项确定,需要做的第一件事情就是确定项目进度的里程碑。在里程碑中应清楚地定义每一个阶段的开始时间、结束时间、负责人和阶段的提交成果。
因此,里程碑是项目经理进行开发进度控制的主要依据,里程碑一旦确定,各相应负责人应确保按时交付成果,这样既便于明确各个角色责权范围,也有利于按时完成任。例如每个具体的里程碑与开发组某一具体的人员角色相关联,达到某个里程碑表明对此负有主要责任的人员角色完成了任务。因此,基于里程碑的软件质量控制必然会演变成对角色的质量控制,这样才能真正达到对软件质量的控制。
(3)确保里程碑有可验证的标准
我们经常看到许多项目进度中,都像模像样地设立了里程碑。但实际上,最大的问题就在于许多里程碑没有设定相应的验证标准。在软件开发项目中设立的里程碑,其作用是在项目进行时确认进度用的,没有设定验证标准就等于没有里程碑管理。因此,需要给出一个清晰的验证标准,用来验证是否达到里程碑。
(4)里程碑应标明交付成果的进度
在标识里程碑时,要根据里程碑完成情况标明交付成果的进度。更通俗地说,就是让每个里程碑带上一个百分比,清楚的告诉团队通过这个里程碑说明项目完成了多少。当然随着项目进度的动态变化,未到达的里程碑的也应该做出相应的调整。