如何让软件外包项目按时完成
曾经参与项目开发的技术人员都知道,开发过程的压力相当大,基本上每天都要加班。在项目接近完成的阶段更可能把周日都“搭上”,但还是经常不能如期完工。企业负责管理外包项目的项目经理更清楚,常常在最后一星期才知道外包商不能如期完成。那么,该如何才能避免延误呢?
在亚太地区,绝大部分外包项目都是以一个固定价格来实施的,这种合约模式常常会给企业一个错误的观念:项目延误只会带来不便,不会影响项目投资。实际上,任何项目延误不单是带来不便,更可能会直接影响企业的运作和利益。如果一个新的业务因为软件或相关信息没有准备好而不能如期推到市场上,让别的企业占了先机,这对企业的影响有多大?或者一个项目的开发目的是为了简化内部流程、提高工作效率,项目的延误会延长目前的运作瓶颈,增加企业的运作开支。这些都能直接或间接影响企业的利益,而不单是开发投资是否增减的问题。
欧美地区的外包项目多以实际工作天数来计算项目的投资,因此项目延误会促使项目超支。在这种情况下,避免项目延误是项目经理管理能力的一个重要衡量指标。项目经理需要有效地监控外包项目的进度和风险,才能避免项目的延误,避免额外付出的开发费用。我们可以借用欧美这种管理观念来管理国内的定额外包项目,以保证项目能够在预定的时间内完成。
建立自己的项目计划作为一个项目经理,千万不要采用外包商提供的项目计划来进行监控,以为这样可以省去项目计划的工作。纵然是外包项目,项目经理也需要亲自制定一个完整的项目计划,才能够知道整个项目的工作量、评估出跟外包商谈判项目的价格、确定好项目需要哪些技术人员、衡量外包商是否拥有充分的资源以及判断外包商所承诺的开发时间是否可行。
企业建立好项目计划,也应要求外包商在项目开始前提供一个完整开发计划。一些外包商为了避免繁琐的文书工作,往往会宣称合约签订前所提供的计划便是整个项目计划。外包商这样做只说明一点:他们并没有一套完整的开发管理体系和项目管理的机制,他们的项目管理人员是一名不太称职的项目经理。任何一个称职的项目经理都应该了解这一点:合约谈判期间所制定的初步项目交付计划并不全面,需要根据项目的实际合约内容进一步进行修改,要补充上实际的工作量、资源的调派和需要的时间才能够成为一个可行的计划。
拿到外包商交来的项目计划后,要详细地跟本企业的计划进行比对和审核,从而了解外包商对整个项目的流程、内容、估计的工作量和资源的安排是否与项目本身的要求吻合。明显的差异都需要及时澄清并建立共识。确认了外包商的项目计划后才能够正式地启动项目,开始对项目进行监控。
关注进度评估外包合约必须明确规定外包商需要定期提供进度报告。我看过很多项目的进度报告,内容各有不同,但大部分都明确地说明已经完成哪些部分的工作、哪些工作还在进行中、下次报告期间会开展哪一部分工作以及工作是否按时完成,更有采用红、黄、绿等颜色来表示项目进度状态的。这些信息,基本上只能让管理层了解项目的概况,并不能让项目经理全面地把握项目的进度。
我认为,最好是要知道余下来的项目有哪些工作还没有完成、需要多久才能完成、哪些工作还没有开始、是否能如期开始以及计划的资源有没有变动。要是这些答案跟原计划有差异,应该马上进行反思,深入了解还没有完成的工作以及没能按计划开始的主要原因,从而跟外包商进行探讨如何才能够把项目纳入正轨。已经完成的工作,对我来说已经是历史,对项目能否如期完成已经没有多大的影响。还没有完成或者还没有开始的工作,才是项目的致命伤,才需要特别加以监控。
对外包商所提供的进度报告需要加以确认,才能够肯定所说的工作实际上是否如期完成,最理想的办法是在每一个程序模块完成后,要求外包商把有关程序的源代码列出,并把有关测试的结果打印出来,让技术人员和用户代表核对结果,确认外包商所说的工作已经完成。这确认的手续跟是否信任外包商完全是两回事。这么做只是要确认项目的进度已经按计划顺利完成,保证企业负责人能按时向企业老总等人汇报项目的准确进度。
验收要“如影随形”
外包项目最大的风险并不是在开发过程中,而是在开发完成后。很多外包项目往往在进行验收的过程中,才发现程序逻辑或者输入数据栏目的编辑范围出现问题,导致测试结果与实际所需不符,需要外包商进行大量修改而使项目延误。有时,外包商会抱怨,认为错不在他们。避免这类风险,最佳的办法是在开发的过程中,验收也同时进行,而不应等待开发完成后才进行验收。
很多企业在软件开发过程中,把验收列为开发项目的最后一项工作,其实这种观念是不正确的。项目的验收应该跟随项目的开发过程同时进行、同时开始、同时结束,才能够保证最后的验收过程顺利完成。另一个开发软件的误区是让开发人员生成测试数据来进行模块测试或系统测试。
技术人员对业务运作的认识有限,只有用户才真正知道数据所包含的范围以及哪些信息属于准确的数据。所以,一个有经验的项目经理会要求用户指派代表参与项目的进程,协助进行模块和系统的测试工作,并由用户建立所需的测试数据,再让技术人员进行测试。每一个模块所需要的测试数据都应该由用户代表提供。外包项目的测试工作也应该采用这方法进行才能避免项目交付后出现纷争。外包商在交付每一个模块的源代码列表和测试报告时,需由企业的用户与技术人员共同确认,保证测试结果与用户所提供的数据产生的结果一致,最后系统验收才能顺利完成而不致有重大的延误。
合理调配时间管理一个外包开发项目,比内部开发更为复杂,需要建立更多的“里程碑”及时来监控项目的进度;需要更多的沟通与协调;更需要企业员工不断地配合外包商进度,提供所需的数据以供测试。这些都需要额外的时间来处理。
一般来说,一个内部开发项目如果需要500个工作天来完成的话,里面有50~75个工作天是项目管理的时间,约占项目总工作量的10%~15%.同样500个工作天的外包项目则需要外加75~110天的项目管理时间来管理这个外包项目。就是说企业管理外包商的工作量,是整个项目工作量的15%~22%.当然,这些数据只能作为软件开发外包项目参考之用,个别项目与个别外包商都有不同的管理需求。但是,千万不要假设外包就可以免去管理的需求,这是项目管理不变的定律。