写点什么

技术债还是有用的隐喻吗?

  • 2011-08-07
  • 本文字数:1572 字

    阅读完需:约 5 分钟

技术债由 Ward Cunningham 提出,是指:

另一个更严重的缺陷是无法稳固 。虽然不成熟的代码有可能工作正常也能被客户完全接受,额外的工程量将会导致程序不可掌控,引发程序的极端特化并最终得到一个不灵活的产品。交付第一次的代码就像开始背负债务。少量的债务可以加速开发过程,但很快就要偿还回来,代码需要重写。目标让这种成本可被接受。当债务没被偿还的时候会引发危险。在“不那么正确”的代码上花费的每一分钟都是技术债的利息。整个工程组织都会因这种债务压力导致的不稳定的实现,无论是面向对象还是其它方法,而停滞不前。

在 LinkedIn 敏捷联盟小组的一个讨论中质疑“技术债”在如今全球化软件开发世界中是否仍是个有效的隐喻 Marvin Toll 发起了这个讨论,他说到:

在将近二十年之后可能我们现在有足够的经验来观察这个隐喻是否还有效。我的观察?“没什么用”在一个愈加全球化的 IT 社区中,英语作为第二语言,140 个字符就能引起注意,这个隐喻的细微差别已不能很好的指导应用程序开发了。

换句话说,关于劣质代码的讨论陷入解释财务用例的困境。

绝大多数人站出来为这个术语辩护,它的重要性在于让人们关注一个常常忽视但代价高昂的问题。 Daniel Nelson 分享了他的感受,即人们不熟悉这个术语的危险:

从我数年的编程经历、然后成为业务分析师、现在是 CSPO 的经验来看,我发现如果敏捷团队成员没有对技术债(无论在你的特定环境下叫做什么)哪怕基本的理解将是危险的,也是引发和补救这种技术债的常见原因。

没有明确的实践来预防它,技术债能够并会发展超出控制并损害软件。代码会变得缺陷众多、零碎,并导致接口混乱。

我喜欢这里用的隐喻并认为适用得很好,只要用某些东西提醒团队注意这些问题。

Steve Gordon 指出隐喻可以并存:

隐喻只是模型,但使用其它常见的概念而非数学术语或绘图约定。像所有模型一样,隐喻描述了某个方面并忽视了其它方面。

技术债隐喻描述了劣质代码的持续增长的成本。它并不想描述坏的代码是什么……许多模型或隐喻能没冲突的共存,特别是当它们描述不同的方面或让不同的人达成共识。

Curtis Stuehrenberg ,QA 经理,解释了为什么对他的角色来说技术债是个重要的术语:

我个人喜欢这个术语,因为关于它的讨论趋向凸显主题和冲突,这在通常的标准项目团队中是想掩盖的。无论你在那种团队中,总会有你了解需要做的基础设施的事情和销售团队知道他们能卖更多钱的炫目的功能的角力。如果你关注居住改善,你也会看到类似的角力,卖房者尝试在卖出房子之前粉饰一新。房屋代售的每一天,卖房者都会损失钱,无论是直接的维持成本还是他可以将资本投资其它方面的间接成本。这就导致了售房者希望项目时间尽可能短。他们也希望尽可能少的投资以便最大化他的投资回报率(ROI)。

如果你仔细观察,你会发现有经验的售房者尽其所能的避免做诸如打开墙壁或挖开地板之类的事情。有经验的售房者知道一旦他们做了这些事,他们从统计上来说总会发现他们不得不因结构或安全原因进行修复或是基于法律缘故告知潜在买家的有风险的事实。

项目中的技术债就像隐藏在墙后的,埋于地板下的和在屋顶內的缺陷。大多数团队会花大量精力不搞坏原始的源代码因为他们知道一旦这么做了他们就是打开了需要高昂代价重做的大口子。就像房屋一样,代码库越老你越可能发现把手和管子的线路或石棉或铅涂料。

这就是为什么我作为一个 QA 喜欢谈论“技术债”。如果我们只是等在那儿并说我们隐约担心检查天窗因为我们非常肯定会找到黑霉菌,那我们可以理性的评估风险并选择一个风险规避策略。不谈论它只意味着一些人正在试穿一件新的公司衬衣后背缝着巨大的靶子。

因此,技术债是一个好的隐喻吗?看上去对于大多数人还是管用的,至少它没什么害处。它可能不适合所有的文化和所有团队,这也可以接受因为隐喻可以共存。这符合你的经验吗?

查看英文原文: Is Technical Debt Still a Useful Metaphor?

2011-08-07 21:542174
用户头像

发布了 32 篇内容, 共 92171 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

TDengine 签约航天五院,助力航天事业信息化

TDengine

数据库 tdengine 时序数据库

RISC-V SIG 新进展:Chromium 等多个桌面软件登录欧拉开源操作系统

openEuler

firefox Linux 操作系统 openEuler risc-v

Apache APISIX Ingress 1.6 正式发布!

API7.ai 技术团队

APISIX Serverless Kubernetes Ingress Controller

先行“蜀道”, 四川农信核心系统分布式转型

OceanBase 数据库

每个Java程序员都必须知道的四种负载均衡算法

JAVA旭阳

Java 架构 后端

盘点微服务架构下的诸多身份验证方式

API7.ai 技术团队

微服务 身份认证 APISIX

NFTScan:优质 NFT 应具备什么?

NFT Research

区块链 NFT

安信证券资管清算重要业务在原生分布式数据库的创新实践

OceanBase 数据库

数据库 oceanbase

尚硅谷Airflow视频教程发布

小谷哥

移动跨端框架最全盘点,16款总有一款适合你

Onegun

flutter 移动开发 跨端框架

数据治理:数据质量管理策略!

用友BIP

先行试点,创新改造:中信期货关键业务系统自主可控的实践之路

OceanBase 数据库

高并发中的atomic

Steven

数据可视化图表系列解析——南丁格尔玫瑰图

Data 探险实验室

数据分析 可视化 数据可视化 图表 可视化数据

Camtasia Studio2023免费版本电脑屏幕录制软件

茶色酒

Camtasia Studio2022 Camtasia Studio2023

大数据就业培训班哪家好?

小谷哥

为什么开发者这么看重SQL?看完这些应用场景你就明白了

雨果

sql 数据库管理工具 SQL开发工具

POI 中 getPhysicalNumberOfCells 与 getLastCellNum 有什么区别

ModStart

培训机构与自学的优缺点有哪些

小谷哥

培训班有哪些学习前端开发的方法

小谷哥

2022 OceanBase 年度报告|用技术让海量数据的管理和使用更简单!

OceanBase 数据库

数据库 oceanbase

从实战出发,聊聊缓存数据库一致性

C++后台开发

MySQL 数据库 缓存 中间件 后端开发

podman如何开启sock使用docker客户端进行管理

ModStart

葡萄城邀您参与「表格技术开发者新年分享会」,共话表格技术新未来!

葡萄城技术团队

小程序编译原理解析

Onegun

微信小程序 前端

USB端口的ESD防护电路设计

元器件秋姐

经验分享 usb 电路设计 电源电路 ESD防护

2023年汽车行业向好发展,火山引擎VeDI助力车企数智转型

字节跳动数据平台

数据库 大数据 数据处理

PHP 中命令行调用 escapeshellarg 函数中文问题

ModStart

Java培训机构哪家比较不错

小谷哥

阿里云连续3年跻身Gartner全球云数据库管理系统领导者象限

云布道师

阿里云

ClassIn:如何打造更稳定的Zabbix监控系统

OceanBase 数据库

oceanbase 数据库·

技术债还是有用的隐喻吗?_研发效能_Amr Elssamadisy_InfoQ精选文章