为了项目上线而加班,真有必要吗?

大家都知道:软件项目的加班可能真是有百害而无一利,但总还有些时候,有些人有侥幸心理,或是现实情况实在无法让步,比如项目必须在某个日期上线; 在这些情况下,应该跟团队沟通些什么?Quora资深软件工程师Edmond Lau在自己的一篇博客中,给出了自己的看法。这篇博客名为《为了满足项目上线日期要求,我该怎么告诉我的团队工作更多时间?》。

文章一开始,Edmond指出:

在试图告诉团队要加班之前,一定要确保一点:为了保证上线日期,你有一个切实可行的计划。否则,从长远来看的最佳策略是:根据团队当前开发能力和效率,重新定义要上线的功能;或者将截止日期重新调整为更现实的时间。

接下来,Edmond列举了自己的亲身经验。他曾参与过两个持续多月大型项目,而且团队成员都是高手,专注投入在这两个项目上。为了在某个日期之前上线,工程经理要求团队加班工作,每周60到70个小时。可是项目最后还是没有按时完成。Edmond这样回顾项目的后果:

这样的方式让一些团队成员筋疲力尽,有些人后来离开了,其他人用了很久才恢复过来。这两个项目的情况都无法判断:加班是否真能加快进度,加班的决策在当时也许很合理,但是长远来看,两只团队都深受其害。我们从这两个项目中学到惨痛的教训:不管你多么希望项目在某个日期前完成,都对它能否做到这一点毫无帮助。不要将积极思考与现实的乐观主义混为一谈。

Edmond列举了几个加班无助于项目尽快交付的原因:

  • 工作更多时间,每小时的效率将会降低。

如果你的团队已经习惯了每周40小时工作的生活节奏,而且一年来都是如此,那么很可能他们加班的效率会低于平常,甚至可能产生负面影响。疲累和睡眠减少会伤害认知功能,而且降低工作质量。

他还列举了150年以来的研究文献,证明这一点,而且有些文献甚至说明:如果加班过多,

有问题的工作累计带来的负面影响,会导致项目完成日期延迟,甚至比同样的团队按照每周40小时的工作节奏完成得还要晚。

  • 很可能你现在落后的时间进度比你以为的还要多。

在工程中,做出准确的项目估算非常难以做到。进度已经晚了,说明上个月的工作就估算得不够。所以,可能过去的工作估算少了,更有可能的是:整个项目都估算少了,包括剩下几个月的工作。

我们在项目开始时估算得要比项目结束时准确,因为开始时的工作重点放在可以深入理解的工作之上;到结束时,团队常常低估整合测试用去的时间> ,而且每个没有预料到的问题都会让进度延后一周甚至更多。这些效应叠加起来会产生更多延迟。

他引用了《人月神话》里面的话:

特别是没有为系统测试留出足够时间,这会带来灾难性后果。因为延迟是在项目日程结束时来临的,除非交付日期快到了,没人会意识到进度上的问题。

  • 额外的工作时间会让团队精疲力竭。

Edmond引用了《人件》中的一个症状:“undertime”,也就是说:跟随加班而来的,常常是员工为了要补偿生活方面的损失,而在工作中耗费时间去做与工作无关之事。

我们的经验指出:额外工作时间的积极影响被大大夸大了,而其负面影响却从未有人考量。负面影响可能十分严重:错误、倦怠、失误不断增多、补偿用的“undertime”等等。

  • 额外的工作时间会伤害团队士气。

在Edmond看来,加班之前,可能团队每个人都有自己的方式来完成每周40小时的工作,而且还能保证团队的凝聚力。一旦要加班,可能某些人就要多完成一些不能多加班的人要做的事情,这会影响彼此之间的关系,以前开心的团队,现在可能就不开心了。

  • 管理向截止日期的冲刺,需要耗费更多管理开销。

为了管理额外工作而举行更多站立会议和其他会议,这很常见,因为你希望团队要彼此沟通,保证每个人都在做正确的事情。然而,这种额外的沟通开销常常不会放在工作估算中。

  • 向截止日期的冲刺,会刺激产生更多技术债务。

Edmond认为:为了赶进度而加班,几乎不可避免地会令得团队找捷径。而且在面临更多项目压力的情况下,这些技术债务很可能越积越多,将来一定要付出更多成本偿还。

不过,总有些现实情况不可避免,真到那时候,Edmond建议在沟通时要强调一下因素。

  • 要理解为什么进度落了这么远,找出根本原因,还要与团队沟通。

没赶上进度,是因为人们偷懒,还是因为项目要比想象的复杂,要占用更多时间?如果不能理解根本原因,也就不能有信心同样的问题不会在未来几个月出现。

  • 向团队说明更可行的项目计划和时间进度,说明为什么要加班才能真正赶上上线日期,还要说明怎么做。

    仅仅告诉团队他们落后了还不够,如果不能得出更详细、更明确的计划达成目标,这就是一个警告信号,说明你比你以为的情况更落后。

  • 确保团队每个人都能理解、认同你的新进度安排。

    如果关键成员不相信你的时间表可行,那就得好好想想:你可能无法在新的指定日期前完成你想完成的工作。要是无法做到所有人都认可,那么可能只有某些人认同加班,除了团队中会有不公平的感觉之外,可能你还是无法达成最后完成日期。

  • 重点放在项目、团队或是组织的整体工作目标上,说明为什么按时上线如此重要。

    如果你无法把团队融合在一起,这就是另一个警讯:说明不是所有人都像你这么有动力去加班。

最后,Edmond指出:

如果,在接下来冲刺的两个月时间里,你发现实际进度比修正后的还要延迟,那就准备放弃这个冲刺吧。接受现实,知道你可能是在马拉松的半程发起了冲刺,而终点线比你想的要远得多。不再可能让团队更努力去解决问题了。减少损失,不妨想想怎么制订一个应急计划应对后续问题。

错过截止日期很糟糕,但要是错过了截止日期,而且让团队精疲力尽,而且没有应急计划,这就更糟糕了。

这篇博客来自Edmond在Quora上回答的一个问题,还有很多其他人对这个问题做出了自己的回答。

InfoQ中文站的读者中一定有不少项目经理和管理人员,面对类似问题,你们是怎么处理的?

This entry was posted in Best Practices. Bookmark the permalink.

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s