当前位置: 首页 > 科技观察

为什么管理技术债务如此重要

时间:2023-03-14 21:01:17 科技观察

如果软件开发人员想要更快地行动、留住顶尖人才并避免从头开始重写应用程序,那么管理技术债务就很重要。每个软件开发人员都有一定数量的技术债务,这是在短期内将不成熟的项目推向市场所需的额外开发工作,只是在以后进行完善和补充。技术债务可能表现为糟糕的设计决策、急需的重构、技术升级和未解决的问题。就像承担金融债务一样,技术债务可以为企业争取更多时间,但必须在未来连本带利地偿还。与金融债务一样,承担和管理技术债务有聪明和不明智的方法。本文将讨论为什么快速还清技术债务至关重要、未能这样做的后果,以及如何解决软件开发人员在尝试确定技术债务优先级时面临的一些常见问题。为什么要减少技术债务?首先解决最重要的问题:为什么要减少企业的技术债务?毕竟,到目前为止,您企业的某些应用程序运行良好,并且必须完成更重要的功能性工作。虽然这种推理很容易接受,但企业会采用类似的方法来管理其金融债务吗?债务通常会产生利息,如果还款缓慢,利息会迅速增加。如果您每个月只支付信用卡的最低还款额,您最终可能会偿还数倍于原始借贷金额的款项。因此,尽快摆脱金融债务显然是值得的。偿还技术债务需要花费一些时间和精力,而且它确实会阻止开发人员处理其他功能。然而,尽早还清技术债务是值得的。让我们探讨一下为软件开发人员偿还技术债务的一些好处:它允许软件开发人员在未来更快地行动。它可以留住顶尖人才。它帮助软件开发人员避免每隔几年重写整个应用程序。(1)加快解决技术债务的一个普遍阻力是“我们没有时间”。那么管理技术债务能节省时间吗?每当有人说他们没有时间偿还技术债务时,这通常都是借口。事实证明,拉圆轮的独轮车比拉方轮的独轮车更容易、更快。然而,很多商家可能在不知不觉中拉着方轮大车。在他题为“高质量软件值得付出代价吗?”的文章中,MartinFowler阐述了解决技术债务和保持高代码质量的好处。他说,一些软件开发人员忽视技术债务并允许他们的代码库质量下降。虽然他们一开始可能会更快地发布功能,但随着时间的推移,它们的交付速度会越来越慢。糟糕的设计决策、开放的错误、过时的技术,或者任何可能的东西,最终都会导致功能开发停止,因为处理复杂和错误的代码库变得越来越困难。另一方面,一些软件开发人员了解保持高质量代码、解决技术债务和及早修复错误的重要性。虽然他们确实在开始提供新功能方面起步缓慢,但在短时间内,他们开始在为客户提供价值方面超过其他开发人员。这是因为他们在维护代码库的健康方面所采取的谨慎措施可以防止随着时间的推移陷入困境。(2)留住顶尖人才事实证明,未能解决技术债务的软件开发人员会失去一些人才。因为没有人喜欢在有缺陷的系统上工作,也没有人喜欢在难以取得进展的项目上工作。很少有开发人员喜欢使用“遗留代码”或使用几十年前的技术。那么,当开发人员体验下降时,他们会怎么做?那些能找到更好工作的开发者就会离开。换句话说,公司的一些顶尖人才会离开,而另一些人会因为缺乏所需技能等原因留下来。因此,如果企业想要留住顶尖人才,就需要表明它和开发人员一样重视高质量的代码。(3)避免从头重写应用企业为什么要从头重写应用?有时有充分的理由,例如当他们需要在实现平台现代化的同时摆脱过时的技术时。但通常由于开发速度问题,应用需要从头重写,开发者体验会变得痛苦。软件开发人员不得不决定从头开始重写应用程序,花费数年时间和数百万美元。重新开始并开发一个新项目可能会很有趣。开发人员可以选择自己喜欢的编程语言和工具,他们可以“以正确的方式”设计一切。当然,其他开发人员可能会觉得他们的代码在未来是遗留应用程序。但这可以避免吗?是的,如果企业首先优先解决技术债务并防止事情失控,则可以避免完全重写应用程序。为什么技术债务没有得到解决软件开发人员认为尽快减少技术债务是一件好事。那么,为什么未解决的技术债务如此普遍?这有几个原因:开发人员认为功能工作更重要。开发人员不认为解决技术债务是他们的问题。开发人员与产品和工程管理人员相互指责。开发人员无法有效说服产品和工程管理人员。以下是解决这些原因的一些方法:(1)认为功能工作更重要发布新功能很重要。因为没有功能,产品就没有价值。但是,在开发完所有功能之前,公司无法推出产品。当有人说职能工作更重要,技术债务不能优先考虑时,现在职能工作真的更重要吗?客户真的喜欢采用漏洞百出且进展缓慢的应用程序吗?企业需要为客户提供价值,因此提供良好的用户体验当然意味着确保应用程序运行良好并且不会让客户感到沮丧或阻止他们使用错误的应用程序。允许功能工作和技术债务的一个很好的折衷方案是在每个项目中花费大约70-80%的时间开发新功能,并在每个项目中花费20-30%的时间修复错误和解决技术债务。(2)技术债务不是开发人员的问题如果开发人员有这种感觉,可能是潜在的工程文化问题的征兆。他们希望在一个人人都为代码库感到自豪和拥有的环境中工作,并希望将其做到最好。如果你们没有相同的价值观和愿景,就很难一起工作。这里的解决方案是要么尝试以更积极的方向影响工程文化,要么一些开发人员可以离开以寻找更合适的人选。(3)与产品和工程管理对抗没有经验的开发人员可能会担心他们可能知道有一些重大的技术债务需要解决,这会导致内部冲突,但他们又不敢表达这种担忧。也许是因为他们认为大声疾呼会对他们不利或可能危及他们的工作职位。重要的是要记住,作为一名软件开发人员,您通常了解您的企业在任何时候面临的技术债务数量。当技术债务继续被降低优先级或被忽视时,开发人员实际上有义务表达这些担忧并停止指责产品管理或工程管理。(4)未能说服产品和工程管理人员第四个问题可能是最关键的。开发人员常常觉得解决技术债务很重要,并向产品管理和工程管理提出了这一点,但他们没有听取。与其在这种情况下感到无助,不如更清楚地表达自己的担忧。如果你只是说“我们需要解决这个问题”而没有提供任何明确的解释或理由,那么你就无法进行有效的沟通。开发人员应提供背景信息,说明为什么优先考虑技术债务很重要,以及这对业务有何好处。用他们能理解的术语解释事情尤为重要。例如,开发人员用他们自己的话解释:“我们确实需要花一些时间进行测试,以增加我们在这个repo中的代码覆盖率。由于我们缺乏测试,经常会引入错误,我们必须在这些问题投入生产后花时间修复这些问题。让我们的测试套件处于更好的状态将使我们对我们的代码更有信心,并确保我们的客户在使用该应用程序时也有更好的体验。’但这种说法对产品管理和工程管理来说可能没有意义。或者,“我们现在有30个面向客户的错误。这给我们的客户带来了糟糕的体验,甚至导致一位客户取消了与我们的合同。我真的认为我们需要修复这些错误而不是开发一些新功能。’这将使产品管理和工程管理可以理解说,‘我们的持续集成管道花费的时间太长了。我们不得不等待一个多小时的反馈,看看我们的构建是否通过,而这种延迟的反馈循环使得完成工作需要很长时间。我认为我们需要花一些时间来优化构建以更快地完成它,这样我们所有的工程师都可以更快地行动。想象一下,如果我们的构建每次都快10分钟并且100名工程师每天创建新构建5次,我们可以完成多少工作。每天节省的开发时间超过83小时(10*100*5/60)。这可能会让产品管理和工程管理感觉到工作的艰巨性。结论承担技术债务是不可避免的。然而,选择如何处理技术债务可以决定一个操作的成败。希望开发人员能够受到启发并获得授权,以解决目前在他们的角色中面临的技术债务中存在的问题。这样做将使企业成为更好的工作场所,并为用户带来更好的体验。