紧急响应与战略规划:软件工程中的火情与策略平衡

本文探讨软件工程中紧急任务与战略工作的本质区别,通过具体案例说明如何区分火情处理与系统设计,强调不当决策对技术债务和团队效率的长期影响,并提出平衡二者的实用原则。

火情与策略

最近我向工程师们强调的一个观点,我认为广泛分享会很有价值。当你进行工程工作时,会遇到不同类型的任务。有些任务是紧急或短期工作,我们有时称之为“扑灭火情”,特别是当工作涉及紧急修复或立即需要的任务时。

其他任务则具有战略性。你收集了用户需求信息,设计了解决方案,并系统智能地推进工作。理解你正在处理哪种类型的工作,并以不同方式思考它们至关重要。

火情

扑灭火情时,目标是灭火。你基本上希望做最少的工作来灭火,以便能回到长期战略工作。你不应该为了灭火而构建庞大、复杂且永久存在的系统。紧急情况是进行“快速而粗糙”工作的时候。这并不意味着你应该做糟糕的工作,但你不应该围绕灭火构建长期、高维护的系统。

火情有不同类型。有时高管或其他团队带着立即需求来找你——必须在接下来几周内完成的事情。你应该想办法完成这个任务并摆脱它,以便回到长期战略工作。

其他时候,你有某种实际的紧急情况,比如服务中断。在这种情况下更清楚的是,你应该只修复中断,而不是四处做一堆其他事情。中断不是时候说:“好吧,我们等写设计文档,下周与高级工程师一起评审。”任何火情都是如此——火情不是应用长期软件设计方法和系统的时候。

示例

举个更具体的例子来说明我的意思。假设一位高管来找你说:“我们有个客户想在下周给我们一百万美元,但在此之前,我们必须生成一张显示我们服务器在高负载下表现的图表。”但假设你甚至没有任何记录服务器负载的系统。

如果你以长期战略的方式思考,你可能会说:“啊,我们应该有一个跟踪服务器负载的系统。我们必须详细研究存储如何工作,如何确保准确性,如何监控,以及如何测试。然后我们应该与用户体验设计师合作,通过标准用户研究并从中制定UI设计,确保生成的图表能被用户理解。”

这在一周内无法完成。而且,这是浪费时间。你实际上不知道这种火情是否会再次发生。仅仅因为有人一次向你提出紧急需求,并不意味着这将是长期需求。它可能看起来会,你可以猜测它会,但为什么要猜测长期战略设计呢?没有必要猜测长期工作——当你做长期工作时,你有时间进行研究,找出实际用户需求和需求。所以这样做,并基于此构建东西,而不是基于你的猜测。

相反,你应该说的是:“好吧,我明天会制定一个非常基本的负载测试,可以从我机器上的脚本手动运行。我会推出一个新版本的服务器,只将负载信息写入日志文件,然后我会基于解析该日志手动制作图表。”所有这些都是解决问题所需的最少工作。

即使这个解决方案也有风险——你 instrument 了服务器来记录与负载相关的内容。有可能后来有人会认为你打算将其作为长期支持的机制来跟踪系统负载,并依赖它设计良好和深思熟虑,而实际上并不是。这突出了一个非常重要的点:在火情期间永远不要做长期决策或实施长期解决方案。

事实上,你可能甚至想有意撤销你在火情期间所做的所有工作,比如删除那行日志,这样就没有其他人认为你做了某种长期决策。

这条规则不仅适用于技术实现细节,还适用于组织变更或任何决策。例如,假设有一个持续的中断。在中段期间不是谈论如何防止它再次发生,或如何改变你正常的日常流程的时候。

基于火情做长期决策唯一安全的时候是当你进行“事后分析”时——在火情被“扑灭”后对情况进行理性审查。然后你可以坐下来 say:“好吧,我们想做什么样的战略工作来防止这种火情再次发生?”或“我们从中学到了什么可以用来改变我们的工作方式?”

这条规则极其重要。违反它会积累疯狂,可能摧毁团队。如果你仅基于极端紧急时期做出的决策来构建所有公司政策和工作模式,最终它会看起来完全疯狂,并可能失败。

战略工作

与“扑灭火情”相对的另一端(它是一个频谱,不是黑白分明)是:做战略工作。基本上,你有一个已知目标,并朝着它努力,应用所有软件设计的基本原则,确保你考虑长期,并与你的团队智能合作,创建可持续的东西。

类似地,如果你将“扑灭火情”的方法和系统应用于战略工作,你会导致灾难。如果你将每个项目都视为紧急情况,只是“快速而粗糙”地完成,因为它“必须在明天完成”(即使实际上不是),你会以混乱告终。实际会发生的是你会创造火情!你的系统设计如此糟糕,它会崩溃,引起麻烦,难以维护,并最终完全消耗你在扑灭围绕这个设计糟糕的混乱的火情中。

当你将火情原则应用于战略工作时,你永远无法真正完成战略工作。如果你看到一个工程组织似乎无法长期完成事情,这通常就是原因——他们一直把一切都当作世界着火了,因此永远无法真正前进。

战略工作需要经常说:“好吧,我们理解你的需求。谢谢你告诉我们你的问题。我们正在为你构建解决方案,我们以正确的方式做,需要一点时间。不是永远,但需要一些时间来完成。”

我认为有时高管担心,如果他们告诉工程师“花足够的时间”,工程师会变得懒惰,永远无法完成工作。在一些公司,这可能是合理的担忧,当然高管有兴趣保持事情进展,以便公司能交付产品!但必须在鼓励人们按时交付和确保他们遵循长期软件开发流程和程序之间取得平衡。一般来说,最好在做战略工作时,在多做一点设计、多做一点评审等方面犯错。我不是说过度并停止构建东西,或让每个人都经过不必要的评审,只是因为某事“可能需要”。我只是说,如果你不确定,这是你应该犯错的方向。

做两者

只要你应用上述一般原则,一个团队(或一个人)有可能同时处理战略工作和火情(至少在同一周或月内)。技巧是在火情上做最少的工作,确保紧急情况得到处理,业务继续推进,然后在火情扑灭后重新专注于战略工作。

毕竟,如果你做对了,战略工作应该是对业务最重要的东西——你研究过并知道如果交付它们会产生最大影响的事情。所以扑灭火情,回到做长期实际上重要的事情。

-Max

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计