行业专家一起讨论了每个工程师都害怕的两个词:技术债务。那么什么是技术债?即使您没有听说过这个术语,我相信您已经体验过它:系统的某些部分未修复或不完全符合标准,但似乎没有人有时间进行工作。
假装你的软件系统是一个房子。技术债务是您尚未解决的水槽中的漏洞。技术债务是您有一段时间没有组织的凌乱办公室。这也是您购买但尚未安装的新架子。随着时间的推移,待办事项会迅速增加。即使某些任务很快,但数量太多,很难知道从哪里开始。
随着软件系统变得越来越复杂,具有更多的集成、微服务和功能,技术债务越来越有可能累积。你如何在它堆积起来之前领先它?您如何在不牺牲新项目速度的情况下处理已经拥有的技术债务?
这是每个工程师都面临的问题。我们很高兴有两位专家加入我们的小组来深入研究这个问题。LizFong-Jones是一名SRE,在提高社会技术系统的可靠性方面拥有16年的经验。她看到了大量的技术债务,从高速创业公司避免积累技术债务的挑战,到偿还主要企业组织多年来积累的技术债务。JeanClermont是一家医疗技术公司Flatiron的项目经理。在处理像人体这样重要的事情时,处理事件管理和建立弹性需要积极主动地处理长期问题,包括技术债务。
偿还技术债务意味着真正知道它在哪里
追踪技术债务在哪里积累可能很困难。即使你有机会主动减少技术债务,你怎么知道首先要解决什么?这是一个必须主动和被动地回答的问题。
主动地,您应该尝试在创建技术债务时记录它。有时技术债务是不可避免的。您可能需要实施一个修复程序或功能,该修复程序或功能需要耗费大量精力来维护它,或者在对其进行扩展时不直观。Matt建议在进行会导致这些问题的更改时进行记录。这样,当您希望减少技术债务时,就有了一份准备好要解决的问题的清单。您还可以在估计未来任务和更新需要多长时间时使用此列表——您可以补偿在代码库的特定区域工作时技术债务将导致的延迟。判断这些延迟可以激励您处理最具破坏性的技术债务。
Liz指出,完全专注于这种“已知”的技术债务可能会“让你产生一种虚假的安全感”。许多技术债务是在人们没有注意到的情况下产生的,这些小决定会产生意想不到的后果。Jean将科技债务描述为“冰山”,其中绝大多数都可能隐藏在表面之下。面对这种未知的技术债务可能比预期的技术债务更具破坏性,因为您将无法主动弥补它。
那么,如何在“表面之下”发现这种技术债务?你需要寻找它的症状。Liz强调了技术债务的两种主要表现方式:使开发新软件变得更加困难,以及增加维护系统所需的工作量。寻找非常繁琐的通用流程,或审查遇到许多意想不到的障碍的项目。潜在的技术债务可能是原因。
以增量方式偿还技术债务是最好的
做出诸如“我们将花到本季度末来处理我们所有的技术债务,然后我们会继续前进”之类的声明可能很诱人。这与人们对金融债务或他们一直在避免的其他任务的行为相同。人们不必在它们出现时处理它们,而是想象未来将带来一种完全不同的态度或机会,可以轻松清理被忽视的任务。
不幸的是,这个计划通常不会奏效。如果您没有连续处理技术债务的习惯,那么将注意力转移到专注于它上会令人不安并限制生产力。如果您通常忽略它,您可能不会很好地了解从哪里开始偿还技术债务。此外,您将立即开始再次积累技术债务,而没有养成跟踪和处理它的习惯。
相反,逐步处理技术债务,在意识到它们时解决小部分。Liz建议随叫随到的工程师寻找机会投资应对技术债务。编写文档和运行手册可以帮助应对技术债务的困扰。即使您没有足够的带宽来彻底检查代码本身,拥有文档和流程也会减少技术债务导致的问题。它还强调了在可能的情况下应该在哪些方面做出根本性的改变。您为减少技术债务而采取的每一步都比等待完美时机尝试将其全部消除更有帮助。
激励处理技术债务
偿还技术债务并不总是最迷人或最引人注目的工作。不幸的是,与开发新功能并获得著名版本相比,清理或记录旧代码可能不会得到同样的认可。与其试图忽视工作类型之间的这种差异,并希望人们无论如何都会迎接技术债务的挑战,不如尝试找到让技术债务工作更受欢迎的方法。
马特戴维斯建议的一种选择是为麻烦的技术债务设立“漏洞赏金”等程序。谁找到时间和精力来纠正技术债务,谁就可以索取赏金。这种赏金可能是实际的经济奖励,或者是在团队范围或组织范围的会议上的某种认可。
另一种选择是将清除技术债务添加到冲刺和项目的要求以及新功能工作。例如,一个项目计划可以包括三个新功能和一个主要的技术债务处理。Kurt提出的这个计划将技术债务放在功能开发的同一水平上,同样有助于完成项目。这有助于该作品被识别为与其他新功能作品一起被跟踪。