关于这个话题,我们先来探讨一下,为什么项目会延期。
只要你参加软件开发项目,无论是作为新人,还是作为带新人的老手,或多或少都会经历过项目延期。即使你工作很多年,成了行家里手,做得都是详细的项目计划和估算,但在项目进展的过程中,总会出现一些偏差和意外。偶尔有幸运的时刻会提前结束,延期完成,甚至是项目烂尾也是很有可能的。
为什么项目这么容易延期呢?
这是因为人们在历史长河中累积的经验失效了。
到目前为止,计算机科学只出现了短短几十年的时间,人类很难按照以前的经验对项目进行判断和预测。看到一个人在操场上慢跑,你很容易能判断出来,这事儿不难,因为你也可以去操场慢跑。看到一位百米选手跑进了10秒,你就会知道,这事你拼了老命也做不到,难易立判。
但是一到了编程的范畴,你甚至很难从敲击键盘的速度上分辨出哪个是优秀的程序员,哪个是打字速记员。是的,搞速记的人,敲键盘的技巧可能会更加纯熟一些。
同样,我们可以从物体形态的大小、结构的复杂程度上作出判断。
我们一定知道,修建一座小桥的难度和工期会远远小于一幢摩天大厦。因为物理上形态的区别和感官上的认知,总能让我们的大脑去做出正确的判断。我们很少失误,几千年来,我们的基因就是这么告诉我们的。
但是,软件没有物理的概念,它既没有体积,也没有面积,更没有速度。你写了两万行代码,你的硬盘也不会重一点,10M 的代码,也不一定会比 1M 的代码好用。
技术项目更是很难简单从表面获知其复杂程度。打开 Google 的官方网站,我们看到的是个搜索框,这个简洁的搜索界面,就是整个 Google 帝国的入口,是浮出海面的冰山一角,隐藏在下面的则是数以万计的工程师和庞大的服务器集群。
即使你是经验丰富的工程师,有时候也很难从一纸需求上确定较为准确的工期。
那一旦项目延期了,该怎么办呢?
先问自己几个问题:为什么项目延期了,你是什么时候第一次感觉到项目可能会延期,在此之后你做了什么?
有些时候,项目延期是因为一些不可控因素,比如产品上加了特性,原有的需求变更了 —— 当然,这是经常发生的事;比如人员减少了,或者预计增加的人员没有到位;比如项目组的人员被拉去做另一个项目同时还要兼顾原有项目的任务。
有的时候,项目的延期,是因为负责人没有做好计划,或者这个计划没有很好地分享给每一个对项目进度有影响的人,也就是项目干系人。又或者,当偏离计划的事情发生时,你没有在第一时间做出好的应对措施。
对于不可控因素,我们能做的并不多,只能权衡取舍,对项目期限、人员或者需求范围做出调整。
如果是计划本身的问题,或者是因为项目成员没有很好地跟进同一个计划并保持一致,那我们应该尽最大可能避免这些问题的发生。
一旦发现项目延期了,应该有哪些具体的应对措施呢?
怎样才能做到这一点呢?下面的几个策略是我在工作中经常使用的,对你也许会有帮助。
建立一定的流程。这里包括计划制定流程和计划跟进流程,也许是每周一次的同步会议,也许是一个共享的任务管理工具。不要过分相信自己随机跟进的能力,哪里出了问题就去处理问题,很多时候会陷入救火队员的困惑,手忙脚乱,有的时候还会错过最好的时机。
在整个项目计划中,要有明确的优先级。知道哪些任务是非做不可的;哪些任务是别的任务所依赖,需要提前完成的等等。人们往往有先处理简单任务的惰性,如果没有搞清楚轻重缓急,那就有可能出现不太重要的杂事都做完了,而重要的事却没有太大进展的情况。
制作一个共享的项目状态表,让团队成员可以一眼就看清楚项目进展,并保持该图表的更新。进度表可以作为大家对进度评估的工具,也可以是负责人判断哪里需要重点跟进的依据。确保这个计划是每个主要相关者都确认并同意的,并在同意后让他们每天都能看到这个计划的所有更新。
不要漏掉任何一个人。不要觉得暂时还没有他的活儿,可以先不用跟他沟通。当一个项目的计划落实后,应该第一时间让所有相关的人了解到。临时通知会让合作者或帮忙的人没有参与感,并且很容易因为对方没有提前准备在时间上无法达成一致。
提供一个有效的反馈渠道。任何人在任何时候对项目有担心或者质疑,确保他可以通过有效的途径让你第一时间知道他的担心。
如果能做到这些,每个人都会有参与感和使命感。一旦出现项目延期的情况,我们就能非常清晰地知道是哪个环节出了问题,能迅速地意识并了解这个延迟对整个项目产生的影响和后果,并在第一时间调整需求、计划、人员,重新让项目回到正确的轨道上。
如果做了所有能做的,项目还是延期了 —— 这种情况时有发生 —— 我们需要尽早和上级沟通,让他们了解为什么延迟,自己做了哪些努力,还需要哪些资源或者做出什么样的调整才有可能赶上预计期限,是不是一定会延期等等。
当你的沟通内容中有了这些详细的描述,相信上层能够体谅你和当时的项目状况,并给予你最大的帮助和支持。
互联网时代瞬息万变,不变的永远是变化,只要我们参与软件研发,总会遇到项目延期的情况。
今天我和你讨论了项目为什么会延期,如何避免项目延期,一旦发现项目延期了,应该有哪些具体的应对措施,遇到了这种情况怎么办?
建立流程、划分优先级、同步进度、实时反馈。采用了今天技术管理课中讨论的方法,你很可能会避免或挽救一次延期的灾难。如果没有,相信也可以帮你总结经验,避免同样的延迟发生。
如果你有更好的建议或想法,也欢迎给我留言,我们一起成长。
评论