为什么软件项目估算很重要:时间估算、截止日期与按时交付

最近,我越来越多地听到一种观点:基于时间的软件开发估算没有太大意义,所以我们应该停止这样做。比如,“我们只用故事点估算复杂度,不估算时间”,或者“要不要试试 #NoEstimates(不估算)”。这些建议在我身边出现得越来越频繁,但我对这两种做法都持保留态度。

我承认,软件项目估算,尤其是基于时间的估算,确实很难。但对那些愿意坚持练习的人来说,它能带来许多实实在在的价值。无论是项目管理、资源投入,还是团队协作与按时交付,时间估算都不应该被轻易放弃。

为什么软件项目估算很重要:时间估算、截止日期与按时交付

软件项目估算为什么重要

我在工程领域取得的一些重要成绩,很大程度上都来自一项能力:能够对复杂软件项目做出相对准确的估算,并尽力按时交付。

早年参与某通信产品开发时,我曾是某海外游戏主机发布项目团队的一员。这个游戏主机平台最终确定发布日期时,参考了一百多个开发团队的项目估算,我们团队也是其中之一。一年后,产品按计划发布,过程顺利,没有出现重大问题,也获得了大量关注。

在那之后,我又参与了该通信产品网页版的发布。这一次,我们甚至比原定估算时间更早完成,为全球发布前的测试留出了更多缓冲。

后来加入某海外出行平台后,我们内部设定了一个明确截止日期:在 2016 年底前重写并发布新的乘客端应用。经过几个月开发,我们最终按计划完成了任务,在既定日期发布了新版本。在那家公司工作期间,我所在团队还曾基于我们给出的时间估算,与多个外部合作伙伴共同完成项目发布。例如,在出行平台中接入某些第三方支付方式——这些项目背后的复杂度,从外部很难真正体会。

软件项目估算之所以重要,是因为大多数人和企业都是围绕日期运转的。许多海外科技公司会选择在年度开发者大会或行业活动上集中发布重磅产品和功能,而且这些发布日期往往提前很久就已确定。之所以这样安排,是因为固定日期能够集中吸引关注,并带来更广泛的市场声量和媒体报道。

上市公司按季度制定计划和预算,也会根据“产品上线需要多长时间”来决定项目投入和人员配置。获得风险投资支持的私营公司,则会努力按时推出新功能,以支撑下一轮融资。当然,也有一些组织对日期并不那么敏感,但这类情况相对少见。比如一些稳定盈利、增长压力较小的生活方式型公司,或部分公共部门机构,可能不会那么强烈地受发布日期驱动。

软件开发估算中,沟通比精准更重要

我也有过很多次没能按估算时间交付的经历,但这些延期通常并没有造成严重后果。

虽然人和企业都以日期为导向,但延期并不是技术团队独有的问题。你可以去和运营、市场、招聘或其他职能部门的人聊聊。几乎在任何组织、任何职能里,只要面对的是以前没有做过的工作,人们就很容易低估它所需的时间。

建筑工程会延期,公共项目会延期,大型社会事务也会一再推迟。只要事情由人来推动,就一定可能发生延期。

真正关键的,往往不是延期本身,而是你如何沟通延期,以及什么时候沟通延期。以我的经验看,那些影响不大的延期,通常都有一个共同点:团队提前进行了充分沟通。

我们会和业务方一起讨论解决方案:是砍掉某个功能,以确保按时发布?还是增加人手,但接受其他项目受到影响的风险?又或者推迟发布日期,并及时通知所有相关方?

如果处理得当,延期只是项目推进过程中的正常调整。但如果直到最后一刻才告知延期,就很容易引发挫败感、信任受损和一系列令人不愉快的沟通。

估算并承诺,能提升项目交付效率

反对估算的人,常常忽略了一个更重要的问题:工程师应该专注于交付最大的商业价值。

前面我说过,我擅长做估算,并且能按时交付。但严格来说,“交付”这件事我说得并不完整。实际上,在每一个大型项目中,我们最终发布时交付的内容,几乎都和最初约定的内容不完全一样。

以某海外游戏主机平台上的通信产品为例,我们在发布当天并没有上线群组视频通话功能。在开发过程中,我们发现该平台的处理能力不足,无法稳定解码两个以上的视频流。而我们也没有足够时间继续优化视频流解码,因此只能砍掉这个功能。最终,这几乎没有影响产品发布的成功。

类似地,对于每一个有固定截止日期的项目,我们最终交付的功能,都和最初估算时设想的功能有所不同。但利益相关方并不会因此感到意外,因为我们始终与业务团队保持沟通,确保大家对项目状态和关键里程碑有一致预期。

我们会不断讨论:这个功能的开发成本越来越高,它还值得保留吗?它能带来足够的商业价值吗?如果要保留它,我们是否需要调整开发计划,或增加人手来支持交付?我们能不能先推出一个更简单的版本,同时实现接近的业务效果?

如果没有估算带来的时间压力,这些取舍和优先级讨论很可能根本不会发生。正因为有明确的时间约束,我们才会不断确认真正重要的事情是什么,哪些工作值得继续投入,哪些工作应该果断放弃。也正因为如此,我们才能在同样的时间内交付更多真正有业务价值的成果。

这也是为什么越来越多研发团队开始借助 PingCode 这类智能化研发管理工具,把团队目标、客户反馈、需求清理、评审排期、开发、测试、发布和知识沉淀串联起来,让估算不再只依赖个人经验,而是建立在更完整的研发流程和数据基础上。

时间估算和截止日期,对推动工作完成至关重要。它们能极大地帮助团队集中注意力。

我们曾只用 16 个月,就为某海外游戏主机平台开发出一款通信产品。最终发布日期在发布前一年就已经确定,当时完整团队也已经组建完成。起初,一切看起来似乎都很轻松。

然而,墨菲定律最终还是应验了。

在接下来的 16 个月里,我们大部分时间都以一种接近 #NoEstimates 的方式工作——尽管当时这个概念还没有流行起来。我们进行迭代开发,跟踪速度,遵循常见的敏捷开发流程。现在回想起来,我们当时更像是在悠闲地慢跑,忙着做一些有趣但并不重要的事情。

我们花了数周时间开发一个沙盒应用,只是自己试着玩玩,之后再也没有真正用过。功能上线后,我们又花了一周时间优化一些最终被证明无关紧要的细节。我们还做了一些彩蛋,但最后一个都没能放进正式应用里。回头看,我们其实是一个看起来很忙、但优先级已经失焦的团队。

直到最后四个月,我们的节奏才从慢跑变成全力冲刺。距离发布还有两个月时,我们意识到进度已经落后,于是开始拼尽全力向前推进。那四个月的效率,甚至超过了此前十二个月的总和;它所创造的价值,也几乎与前面十二个月相当。

为什么效率会突然提升?因为我们面前有一个重要的截止日期,而且没有“不发布”这个选项。突然之间,整个团队都高度聚焦,所有干扰都被排除在外,我们以前所未有的速度向前推进。

如何提升软件项目估算能力

做出估算,而不是回避估算,会迫使我们进行更深入的思考,也能帮助我们更快理解软件开发中不同类型的未知因素。

谈到为什么软件开发估算如此困难时,许多工程师和工程管理者都会感到无奈,并抱怨说:“软件开发里的未知因素太多了!哪怕是最简单的任务,我们也不知道会遇到哪些未知问题。”我刚入行时也是这样想的。

但是,当你给出估算后,却发现实际结果与估算相差很远时,你就不得不和自己、和团队进行一次坦诚复盘:我们漏掉了什么?为什么会漏掉?下次该如何避免?

如果不做估算,你可能根本不会问这些问题,甚至不会意识到自己应该问这些问题。

我的估算曾经让我吃过很多亏。但每一次失败之后,我都会更清楚地认识到自己此前忽略了哪些未知因素。我开始识别技术风险、早期用户风险、集成风险,并逐渐建立起一套应对这些风险的方法:尽早做原型,提前和负责集成的团队沟通,进行有时间限制的调研。

只要持续这样做,许多常见的未知因素,就会从难以预测,慢慢变得可以管理、可以预判。

技术债务也需要时间估算

那么,技术债务和架构债务呢?估算同样有助于推动这些问题的解决。

每个与工程师合作过的业务利益相关者,都听过无数次“技术债务”这个词。而且,大多数人都会把它和看不到尽头的工作联系在一起。他们可能会想:“我不想让这个团队去处理所谓的技术债务,因为他们总是花几个月时间做一些在我看来毫无价值的事情。”

但如果团队能够估算处理技术债务所需的时间,或者至少为这类工作设定明确的时间上限,情况就会不同。

我的团队会用基于时间的方式来估算技术债务工作量。由于我们一直以按时交付著称,因此更容易获得业务方的理解和支持。一旦建立起信任,许多事情就更容易达成共识。而使用同一种语言——也就是基于时间的估算——正是赢得业务方信任的有效方式。

结论:软件项目应该做估算

没错,软件估算确实非常难。没错,大多数工程师都不擅长估算。也没错,如果你擅长估算,你会因此显得非常突出。

把“软件太复杂了”当作借口很容易。但这其实是在回避真正重要的问题:估算到底难在哪里?我们又该如何提升估算能力?

首先,你需要从更合理的项目管理方法入手,关注降低风险的原则,而不是机械套用某一种固定流程。然后,复盘自己为什么低估或高估了某项工作,并在下一次做出调整。如此反复,你的估算能力才会逐渐提升。

如果你从不估算,就永远不可能练好这项技能。但如果你持续练习,并从经验中学习,就会不断进步,慢慢建立起“时间估算可靠”的声誉。

估算和赶截止日期,当然比不估算更让人难受。但这绝不是放弃提升估算能力的理由。

我见过很多团队为了赶进度而疲于奔命,最终精疲力竭。过度压力确实会消耗团队。但另一种情况同样糟糕:团队在没有任何交付压力的情况下,一轮又一轮地迭代,最终逐渐失去动力。

一成不变的工作方式永远不是好方法。真正重要的是保持灵活,合理利用估算和截止日期,让团队保持专注,提升速度,并持续交付有价值的成果。

文章包含AI辅助创作:为什么软件项目估算很重要:时间估算、截止日期与按时交付,发布者:shang,转载请注明出处:https://worktile.com/kb/p/3972150

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
shang的头像shang

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部