AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

技术债务就像俄罗斯方块:我如何通过修改代码来搞定它?

  • 2019-05-05
  • 本文字数:1604 字

    阅读完需:约 5 分钟

技术债务就像俄罗斯方块:我如何通过修改代码来搞定它?

和大多数玩过俄罗斯方块的人一样,我也很喜欢这个游戏。我仍然记得第一次在任天堂游戏机上玩这个游戏时的情景。游戏的背景音乐仍然时常萦绕在我的耳边。俄罗斯方块不仅是有史以来最好玩的游戏之一,我们还可以拿它与技术债务作类比。


我将分享我和我的团队如何通过修改代码来减少技术债务,并修复了一个价值 100 万美元 / 年的 bug。



刚开始的时候任务都很简单,因为没有什么复杂性


在软件公司里,产品经理或项目经理与软件开发人员合作,根据客户优先级来开发和交付代码。我们把消除一行俄罗斯方块比作发布一个新功能。



技术债务还没那么多时,即使稍微复杂一点的任务也能轻松应对


交付一个复杂的功能等于要消除更多的行。


通常,为了按时交付,我们需要在业务需求(新特性、新产品)和代码(hack、捷径)之间做出权衡。要么修改产品策略,导致与以前的设计不兼容,需要额外的工作来迁移客户,要么同时支持新旧两套逻辑。



少量的技术债务是正常可控的


于是,技术债务出现了。俄罗斯方块中出现的空格就代表了技术债务。


所有的代码都会有技术债务,这是很正常的。在玩俄罗斯方块的时候,或多或少都会出现几个空格。



淹没在技术债务中


过多的技术债务导致新功能和 bug 修复无法在合理的时间内发布。


这个问题无法通过增加或替换开发人员来解决。在某种程度上,它之所以被称为技术债务,是因为我们需要偿还它。


偿还技术债务可以让你保持竞争力,让你的游戏可以继续。



游戏结束


就像经营一家企业一样,玩俄罗斯方块的时间越长,难度就越大。方块移动的速度越来越快,很难跟上它们的速度。


就像经营一家企业一样,你永远也无法在俄罗斯方块这个游戏中胜出。因为它没有真正的终点,你只能控制输掉游戏的速度。


就像经营一家企业一样,在俄罗斯方块游戏出现的空格会让你输掉游戏。

百万美元 bug

不久前,我和我的团队接到一个任务,负责更新产品代码中的账单和发票逻辑,以支持新的定价计划、新的支付处理器和改进的账单工作流。产品团队还在讨论某些细节,于是我们利用这段时间深入研究了现在的代码。在对代码有了更好的了解之后,我们就能够对即将到来的变更做出更准确的估计。


那些代码的基本功能是遍历每个客户的帐户,计算他们的账单,并将它们发送给票据 API。之前写这些代码的人显然很小心——不能说它们杂乱无章,但起码太缺乏灵活性。它是一个很长的函数,没有测试,只有很少的日志,而且几乎没有任何注释。这些代码是公司的一个联合创始人在 5 年前写的。从那以后,唯一一个改过这段代码的人已经不在公司了。


这有问题吗?发票发出去,公司赚到钱,好像没有任何问题。我们好像也没有必要进行重构,但我们知道即将会发生一些重大的变化,因为这个函数不能按照我们的需求进行伸缩,如果这个部分可以被简化,我们就可以走得更快。


我们在一个 sprint 中重构了这个函数,并增加了一些日志。直到那个时候,我们才发现我们实际上修复了一个什么样的 bug!会计团队的一个工作人员跑到我们的办公桌前,问我们为什么发票的数量增加了这么多。因为旧代码有一些问题,一些客户的使用情况并没有记录在发票上。据我们估计,这样造成的发票丢失每年总额超过 100 万美元。

偿还债务并不总能带来回报

这个故事是真实的,但偿还技术债务并不总是会产生如此戏剧性的效果。只能说我们当时很幸运。



找到技术债务的平衡点


我希望我能够就何时偿还技术债务提出明智的建议。然而,这个问题的答案是:这太复杂了,而且我们往往需要做出某种程度的权衡。你的代码可以是世界上最干净的,并且经过了最全面的测试,但用户可能不会为它掏钱。相反,你的代码也可能非常混乱,但这些代码可以取悦用户,并让他们为它掏钱,公司因此赚得盆满钵满。


我能给出的建议是,产品所有者和开发人员应该在理解技术债务上达成一致,技术债务是永远无法避免的。毕竟,就像俄罗斯方块一样,在软件开发中,你永远无法赢得这个游戏。


英文原文:https://medium.com/@erichiggins/technical-debt-is-like-tetris-168f64d8b700


2019-05-05 07:005710
用户头像

发布了 731 篇内容, 共 472.0 次阅读, 收获喜欢 2008 次。

关注

评论 1 条评论

发布
用户头像
这个类比很形象,赞!!!
2019-05-06 09:21
回复
没有更多了
发现更多内容

[大厂实践] Netflix 键值数据抽象层实践

俞凡

架构 大厂实践

Manus“撤退”,Fabarta“补位”!你的专属智能助手来了!

Fabarta

人工智能 专属智能体

第十三章 SEO结构化数据与SERP

溪抱鱼

SEO SEO 优化

鸿蒙一夏|暑期出行问问小艺,解锁亲子游新“享”法

新消费日报

误操作后快速恢复数据 binlog 解析为反向 SQL

GreatSQL

烟草行业专卖人员画像与队伍考评系统(信创版)上线运行

中烟创新

如何打造 App 的差异化竞争优势?别再卷功能了!

Speedoooo

APP开发 小程序容器 小程序技术 app生态共建

待办事项列表:团队组织有序的秘密

俞凡

生产力

对于开源能源管理系统的理解

开源能源管理系统

开源 能源管理系统

爆款预测模型:如何用淘宝店铺API数据识别潜力商品?

tbapi

淘宝API 天猫API 淘宝店铺所有商品API 天猫店铺所有商品API

App开发者:如何打造一条不“堵车”的高效开发流水线?

FinFish

APP开发 小程序容器 敏捷迭代 小程序技术 热更新技术

WebGL开发数字孪生项目

北京木奇移动技术有限公司

软件外包公司 webgl开发 webgl外包

区块链 Web3 项目的开发方案

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

为什么越来越多的出海企业开始重视海外舆情监测?

沃观Wovision

出海企业 舆情监测 海外舆情监控 沃观Wovision 舆情监测系统

彩讯做客InfoQ直播间:AI原生思想驱动Agent平台开发

彩讯股份300634

AI口语App的开发方案

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语学习

简单聊聊区块链定义以及行业是否需要用到堡垒机

行云管家

区块链 网络安全 堡垒机

数字化转型的 4+1 种典型组织结构:怎么选才对?

优秀

数字化转型 数字化

IDC:擎朗智能全球商用服务机器人第一,持续领跑全球

财见

零售业AI遍地开花?小心踩中“伪AI”的坑!

第七在线

等保测评对互联网企业的重要作用和影响

等保测评

客户为纲,万目皆张——中烟创新致烟草客户的一封信

中烟创新

分享一个 ProHub 风格 logo 生成器

Immerse

MyEMS开源能源管理系统核心代码解读015

开源能源管理系统

开源 代码解读 能源管理系统

浙江省科学技术厅印发《浙江省加快推动“人工智能+科学”创新发展行动计划(2025-2027年)》

ModelWhale

政策 科学智能 浙江省科学技术厅

OPPO大数据混合云之路

科技热闻

融资近10亿元,“众擎机器人”连续完成Pre-A++与A1轮融资,京东领投

财见

黑龙江地区等保测评中常用的安全产品

等保测评

电力行业新助力:RFID智能工具车助力电力设备盘点与维护

斯科信息

RFID解决方案 斯科信息 RFID技术

目前马鞍山正规等保测评公司叫什么?在哪里?

行云管家

等保 等保评测

MyEMS开源能源管理系统核心代码解读016

开源能源管理系统

开源 代码解读 能源管理系统

技术债务就像俄罗斯方块:我如何通过修改代码来搞定它?_文化 & 方法_Eric Higgins_InfoQ精选文章