技术债务揭秘

禅与计算机程序设计艺术 禅与计算机程序设计艺术     2022-12-02     365

关键词:

在此之前,我们将回顾什么是技术债务,什么不是,如何管理它,以及如何以负责任的方式偿还它。

照片由 Alice Pasqual 在 Unsplash上拍摄

介绍

我们在快节奏的工作环境中生活和工作。频繁的业务和组织变革、激烈的竞争以及创造产品和服务以满足客户需求和增加收入的压力。

这些条件产生了现代软件开发和交付实践,其中术语“敏捷”和“连续”是我们日复一日所做工作的各个方面的基础。

不可避免地,这种提高生产力和敏捷性的需求是如此重要和耗时,以至于我们几乎没有时间以可持续的方式正确规划和实施软件工程最佳实践。

诸如 MVP(最小可行产品)和 MVA(最小可行架构)之类的概念变得无处不在,并证明做最少的工作是合理的,以使软件或服务“出厂”。

我曾在许多小公司和大企业工作过,我记得在每个大企业中,我都参与或领导了一项重大的重构工作、彻底的系统重写或“打破单体”的工作。在某些时候,将其添加到简历中并获得有吸引力的工作机会几乎就像是一种时尚或魔法技能。

为什么会这样?

在大多数情况下,情况几乎相同:

开发从“薄弱”的基础开始,继续进行圆角,出于当时似乎合理的任何原因而忽略了非功能性需求,并且随着系统随着时间的推移,它迅速从看似成功的项目变成了一个遗留的怪物,没有一个人想要“触摸”或维护。

目睹如此多的公司突然意识到开发强大、高质量的系统是困难的,这令人着迷。

在某些时候,它会使这些公司陷入众所周知的恶性循环:开发速度放缓,错过最后期限,客户感到不安,工程团队承受的压力更大,这使得降低效率或迁移变得更加困难从传统到现代建筑。

在这种情况下,技术债务会迅速增加,从而导致工程生产力下降并给组织带来巨大成本。

定义的技术债务

让我们先从症状开始:

  • 你是否觉得你的开发团队的生产力不是最好的

  • 在决定将更改合并到代码库中之前,您是否三思而后行?

  • 您的团队是否感到沮丧并不断与火拼?

如果您对所有这些问题的回答都是“”,那么您可能正背负着严重的技术债务。

技术债务一词是 Ward Cunningham 在 1992 年创造的一个比喻。

坎宁安说:

当有意识或无意识地做出错误或次优的技术决策时,就会产生技术债务。

通过这个术语,Cunningham 希望找到一种方法来传达交付速度与持续改进正在开发的软件的架构和质量属性所需的努力之间的平衡。

类比来自金融债务,你有本金利息

与金融一样,您希望减少随着时间的推移会降低持续支付利息的原则

与金融一样,利息是您每次需要在相关领域进行更改时因债务而付出的额外努力。

令人惊奇的是,这个类比很快就变成了自我实现的预言:如今,许多公司意识到技术债务已经开始显现出真正的财务影响,削弱了他们留住现有客户、获得新业务、提供有竞争力的解决方案的能力,最终当天,对公司的经营业绩产生了负面影响。

另一方面,技术债务的概念已经发展到开发人员明白他们需要一种明确定义的方法来识别其来源和管理它的策略,平衡短期目标和创造可持续发展的需要。产品长期可行。

灌输到 DevOps 实践中的静态代码分析工具可以更轻松地在潜在的质量和安全问题成为债务之前发现它们并实施持续的债务减免流程。

技术债务的类型

我认为,技术债务与糟糕的系统设计和缺乏对软件开发生命周期中要完成的架构工作的持续投资密切相关。

这一假设的推论是,即使在没有明确代码质量问题的系统中也可能存在技术债务。这意味着从理论上讲,您可以拥有一个运行良好的系统,并且仍然积累了需要您注意的债务。

为什么?因为我们都去过那里。智者说,变化是唯一不变的。

即使在某个时候您已经划清界限并决定将您的遗留系统置于维护模式并从头开始创建一个更好的版本,您仍然需要修改该遗留系统以满足现有客户的需求。

在这里你去:你将面对一个怪物,每次你触摸它都会“咬”你。

让我们回到我之前提到的系统设计和架构问题。

在他著名的文章《谁需要建筑师?” Martin Fowler 声称架构师最重要的任务之一是通过寻找消除软件设计中不可逆性的方法来消除架构。

没有理论上的理由可以说明软件中的任何事情都是不可逆的,而这就是技术债务的全部意义所在。

这是在对我们具有发展能力具有战略意义的地方缺乏投资。

使某些东西易于更改会使整个系统变得更加复杂,而使所有东西都易于更改会使整个系统变得非常复杂。

这就是为什么我们需要建筑师。

我们需要他们成为软件开发过程中不可或缺的一部分,以不断评估和提出以下问题:

我们应该关注哪些技术债务?

我们预计会改变哪些软件方面?

我们应该改进什么,以便改变更容易融入和管理?

技术债务的来源

在本节中,我们将回顾技术债务的主要来源:

人们

不出所料,人为因素是技术债务积累的最主要因素之一。

在技术方面,人们要么倾向于过度设计解决方案,专注于想象的用例,并在依赖错误假设的同时尝试优化,要么只是没有足够的经验来意识到他们做出的决策的缺陷和影响。在开发过程中制作。

意外复杂性是由上述原因引起的众所周知的现象之一。

导致意外复杂性的另一个相对较新的原因是所谓的“简历驱动开发”,其中技术和开发主管根据“时尚”或“酷”技术做出决策,以获取由于稀缺而具有高需求的技能。

在业务方面,人们并不总是意识到一些早期设计决策可能对软件项目产生的影响以及他们可能在未来产生的成本。

过程

从流程的角度来看,让我们从应该有流程的断言开始。

减少技术债务首先需要 (i) 识别其中的具体项目,(ii) 评估它们对可预见的软件演进的影响,(iii) 了解债务成本,以及 (iv) 最后引入将其影响传达给相关技术和业务的机制利益相关者(例如开发负责人和产品经理/所有者),以便他们计划减少它。

技术

有时,尽管尽了最大的努力和意图,我们很快就会以过时或有限的技术告终,这些技术无法应对规模、性能、维护或任何其他需求以及内部和外部的力量。

如果发现和替换较晚,它会导致变通办法和补丁、快速而肮脏的解决方案(以“创意”的名义销售),并最终导致产品复杂性的增加。

产品

产品经理不可避免地遇到的主要矛盾之一是功能开发与在设计、最佳实践实施和技术债务减少方面投入开发时间之间的关系。开发人员希望提高他们开发的系统的质量、性能和稳定性,而不是包含更多面向客户的功能和改进。

当我们处理“范围蔓延”时,情况要糟糕得多。

除了少数例外,我们在产品中增加的每平方英寸表面积都会增加其复杂性并降低我们快速移动的能力。

提供新功能需要考虑成本。这反过来意味着产品经理不仅应该关心“什么”,还应该关心“如何”,因为它可能有助于推动更好的决策,以平衡短期结果和长期软件可持续性。

偿还技术债务

解决技术债务并非易事。

正如我们之前看到的,它从认识它开始,然后了解它的类型,然后与相关利益相关者进行量化和沟通,然后制定一个行动计划来实施它的减少。

根据我的经验,最具挑战性的部分是让所有相关决策者相信必须这样做。

必须这样做,因为只有在经济上可行的情况下,软件开发才能作为一个行业持续存在。

结论

市场和客户不断要求新的应用程序和系统——他们现在就需要它们。

其中一些应用程序将是短暂的,但一些,通常是成功的应用程序,必须长期维护和扩展。

技术债务是创建可持续软件的最大障碍,管理它应该解决我们如何应对快速扩展的软件基础的问题,同时保持它的可扩展性、高性能、安全性、运行在最新技术之上,并以经济可行的方式实现其业务和用户目标。

我们看到,它始于意识到由于缺乏专业知识、相互冲突的优先级、缺少流程和许多其他原因,不断发展的软件将积累技术债务。

显然,管理技术债务需要技术方和业务方的关注和纪律,但如果我们都同意未能管理它最终会导致我们自己的挫败感和影响整个组织的糟糕业务结果,我们可以进行协作努力以负责任的方式计划和处理它。

技术债务墙:一种让技术债务可见并可协商的方法

...tiablePublishedon22January2020by@mathiasverraes翻译:0x01介绍术语“技术债务”(Technicaldebt),是对软件设计中那些次优的、不再有效的、甚至错误的设计选择的隐喻。它们增加了软件进一步开发的成本。出来混的总是要还的,你今天选择的... 查看详情

翻译:技术债务墻:一种让技术债务可见并可协商的方法

原文:TheWallofTechnicalDebt:AmethodformakingtechnicaldebtvisibleandnegotiablePublishedon22January2020by@mathiasverraes翻译:0x01介绍术语“技术债务”(Technicaldebt),是对软件设计中那些次优的、不再有效的、甚至错误的设计 查看详情

技术债务和技术投资

...bt-and-technical-investment/作者(author):lexicalNOPE(@jergason)技术债务技术债务,是软件工程讨论折衷方案时所用到的一种工具。当你遇到技术债务(注1)时,你就会堆积一些快速、肮脏的代码,它们更难以维护、或拉低了图中的... 查看详情

摆脱技术债务,就是“成功的标志”

...脱身却很难。”——JoshBillings,美国著名的幽默作家技术债务是科技行业最令人头疼的问题,就像生活中一提到债务就会让人感到压力重重。摆脱债务是一件苦差事。特别是在软件工程中 查看详情

云原生计算能消除技术债务吗?

...佳实践汇总起来,如果企业实施得当,可以减少技术债务。云原生计算是企业IT的一种新范式,它涉及现代技术的方方面面,从应用程序开发到软件架构,再到保持一切运转的底层基础设施。云原生为企业提供... 查看详情

java代码中常见技术债务处理之exception

...规则和常见检查结果,选取说明了常见异常处理中的技术债务,提倡技术债务最少的编码方式。ExceptionhandlersshouldpreservetheoriginalexceptionsEitherlogorrethrowthisexception.Whenhandlingacau 查看详情

用于代码气味的 SonarQube Web API - 技术债务计数

】用于代码气味的SonarQubeWebAPI-技术债务计数【英文标题】:SonarQubewebAPIforCodesmells-TechnicalDebtCount【发布时间】:2019-06-1420:27:36【问题描述】:SonarQube版本:6.7是否有任何RESTAPI可用于从SonarQube获取代码气味(技术债务),我搜索... 查看详情

技术债务(technicaldebt)的产生原因及衡量解决

...设计或其他诸如此类的负债而陷入窘境。---维基百科简介技术负债(英语:Technicaldebt),又译技术债,也称为设计负债(designdebt)、代码负债(codedebt),是编程及软件工程中的一个比喻。指开发人员为了加速软件开发,在应... 查看详情

当你的技术债务到期时,linkedin的故事|idcf

原文:https://www.linkedin.com/pulse/when-your-tech-debt-comes-due-kevin-scott/译者:冬哥那是2011年10月,就在LinkedIn上市后的第二次财报发布之前的几周。LinkedIn的业务做得很好,从任意可见角度来衡量,可以说是非常好。我... 查看详情

sqale是什么

...动化的方式评价软件系统的代码提供一种有效的方法管理技术债务SQALE主要应用于管理技术债务,通过SQALE可以清晰的定义技术债,并创建技术债,同时支持可以正确的评价技术债务,从技术视角和商业视角分析技... 查看详情

今日头条核心技术“个性推荐算法”揭秘

今日头条核心技术“个性推荐算法”揭秘最近面试华兴资本,他们比较关注今日头条算法的实现,今天特转载网上今日头条算法解密  【IT168 评论】互联网给用户带来了大量的信息,满足了用户在信息时代对信息的需求,... 查看详情

直播app全量混淆和瘦身技术揭秘

   【直播】APP全量混淆和瘦身技术揭秘近些年来移动APP数量呈现爆炸式的增长,黑产也从原来的PC端转移到了移动端,通过逆向手段造成数据泄漏、源码被盗、APP被山寨、破解后注入病毒或广告现象让用户苦不堪言。&... 查看详情

5天揭秘js高级技术-第一天

一、基础杂记1.document.write()1<scripttype="text/javascript">2document.write(‘<h2>我爱你</h2>‘);3</script>document.write2.变量必须声明才能使用:  使用var声明:局部变量;  没有使用var声明:全局变量;3.数据类型:  S... 查看详情

重磅预告揭秘阿里双11技术进步历程!

摘要: 对技术而言,每一年的双11都是一场严峻的考验,从被流量冲击得溃不成军,被迫奋起抗击,到现在通过技术的力量不断改写双11的用户体验和参与感,阿里的技术伴随着双11成长起来,强壮起来,自信起来。对各位而... 查看详情

揭秘|双11逆天记录背后的数据库技术革新

每一个数字背后都需要强大的技术支撑Higher,Faster,Smarter是我们不变的追求技术无边界创新无止境 查看详情

最新微信域名检测防封,微信跳转技术揭秘--微信跳转揭秘

...在的微信而言没用..还是可以举报)5、结合微信超级跳转技术,利用大站的跳转漏洞,使用CDN,删除跳转来源等等..尽可能提高Url在微信里的 查看详情

cds技术揭秘系列02阿里云cds-sls大揭秘

简介:CDS-SLS作为云化的日志平台,将组件进行高内聚低耦合,线下用户最低可以在6台规模的机器上将上述所有的功能自动化部署,在运维、运营、财务管理、数据分析报表等大数据场景领域以低代码模式有效解... 查看详情

在 Postman 中获取 SonarQube 6.3.1 的覆盖率、技术债务、单元测试成功密度和单元测试失败密度 json 数据的 restapis 是啥?

】在Postman中获取SonarQube6.3.1的覆盖率、技术债务、单元测试成功密度和单元测试失败密度json数据的restapis是啥?【英文标题】:WhataretherestapistogetCoverage,technicaldebt,unittestsuccessdensityandunittestfailuredensityjsondataforSonarQube6.3.1inPostman?在P... 查看详情