技术债务就像俄罗斯方块,你永远都赢不了!
作者 | Eric Higgins
译者 | 无明
和大多数玩过俄罗斯方块的人一样,我也很喜欢这个游戏。我仍然记得第一次在任天堂游戏机上玩这个游戏时的情景。游戏的背景音乐仍然时常萦绕在我的耳边。俄罗斯方块不仅是有史以来最好玩的游戏之一,我们还可以拿它与技术债务作类比。
我将分享我和我的团队如何通过修改代码来减少技术债务,并修复了一个价值 100 万美元 / 年的 bug。
在软件公司里,产品经理或项目经理与软件开发人员合作,根据客户优先级来开发和交付代码。我们把消除一行俄罗斯方块比作发布一个新功能。
交付一个复杂的功能等于要消除更多的行。
通常,为了按时交付,我们需要在业务需求(新特性、新产品)和代码(hack、捷径)之间做出权衡。要么修改产品策略,导致与以前的设计不兼容,需要额外的工作来迁移客户,要么同时支持新旧两套逻辑。
于是,技术债务出现了。俄罗斯方块中出现的空格就代表了技术债务。
所有的代码都会有技术债务,这是很正常的。在玩俄罗斯方块的时候,或多或少都会出现几个空格。
过多的技术债务导致新功能和 bug 修复无法在合理的时间内发布。
这个问题无法通过增加或替换开发人员来解决。在某种程度上,它之所以被称为技术债务,是因为我们需要偿还它。
偿还技术债务可以让你保持竞争力,让你的游戏可以继续。
就像经营一家企业一样,玩俄罗斯方块的时间越长,难度就越大。方块移动的速度越来越快,很难跟上它们的速度。
就像经营一家企业一样,你永远也无法在俄罗斯方块这个游戏中胜出。因为它没有真正的终点,你只能控制输掉游戏的速度。
就像经营一家企业一样,在俄罗斯方块游戏出现的空格会让你输掉游戏。
百万美元 bug
不久前,我和我的团队接到一个任务,负责更新产品代码中的账单和发票逻辑,以支持新的定价计划、新的支付处理器和改进的账单工作流。产品团队还在讨论某些细节,于是我们利用这段时间深入研究了现在的代码。在对代码有了更好的了解之后,我们就能够对即将到来的变更做出更准确的估计。
那些代码的基本功能是遍历每个客户的帐户,计算他们的账单,并将它们发送给票据 API。之前写这些代码的人显然很小心——不能说它们杂乱无章,但起码太缺乏灵活性。它是一个很长的函数,没有测试,只有很少的日志,而且几乎没有任何注释。这些代码是公司的一个联合创始人在 5 年前写的。从那以后,唯一一个改过这段代码的人已经不在公司了。
这有问题吗?发票发出去,公司赚到钱,好像没有任何问题。我们好像也没有必要进行重构,但我们知道即将会发生一些重大的变化,因为这个函数不能按照我们的需求进行伸缩,如果这个部分可以被简化,我们就可以走得更快。
我们在一个 sprint 中重构了这个函数,并增加了一些日志。直到那个时候,我们才发现我们实际上修复了一个什么样的 bug!会计团队的一个工作人员跑到我们的办公桌前,问我们为什么发票的数量增加了这么多。因为旧代码有一些问题,一些客户的使用情况并没有记录在发票上。据我们估计,这样造成的发票丢失每年总额超过 100 万美元。
偿还债务并不总能带来回报
这个故事是真实的,但偿还技术债务并不总是会产生如此戏剧性的效果。只能说我们当时很幸运。
我希望我能够就何时偿还技术债务提出明智的建议。然而,这个问题的答案是:这太复杂了,而且我们往往需要做出某种程度的权衡。你的代码可以是世界上最干净的,并且经过了最全面的测试,但用户可能不会为它掏钱。相反,你的代码也可能非常混乱,但这些代码可以取悦用户,并让他们为它掏钱,公司因此赚得盆满钵满。
我能给出的建议是,产品所有者和开发人员应该在理解技术债务上达成一致,技术债务是永远无法避免的。毕竟,就像俄罗斯方块一样,在软件开发中,你永远无法赢得这个游戏。
英文原文
https://medium.com/@erichiggins/technical-debt-is-like-tetris-168f64d8b700
技术债务就像俄罗斯方块,你永远都赢不了!相关推荐
- 谈谈技术债务的定义,影响以及管理
一.前言 大概在去年这个时候就想着认真讨论一下技术债务的问题,源自于一次工作安排. 这一个运行了三年多的系统,随着业务的发展,该系统接入了越来越多的业务方和业务,陆陆续续变得更为重要,从而业务方也对系 ...
- 敏捷 冲刺_在这个敏捷的假期季节给予技术债务冲刺的礼物
敏捷 冲刺 Holidays can be a challenging time in software development. How can you make the most of your ...
- [Android]使用MVP解决技术债务(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5892671.html 使用MVP解决技术债务 原文:https ...
- 技术债务管理_管理技术债务
技术债务管理 DevOps Essentials DevOps基础 介绍 (Introduction) Technical debt is one of the most insidious and ...
- 技术债务_不要浪费时间跟踪技术债务
技术债务 在过去的几年中,我们一直在跟踪我们的开发积压中的技术债务 . 将积压的债务添加到待办事项中,使技术债务的成本和风险对团队和产品负责人可见,并在其他工作中优先考虑付款,以确保债务得到清偿 . ...
- 不要浪费时间跟踪技术债务
在过去的几年中,我们一直在跟踪我们的开发积压中的技术债务 . 将积压的债务添加到待办事项中,使技术债务的成本和风险对团队和产品负责人可见,并在其他工作中优先考虑付款,以确保债务得到清偿 . 但是我不认 ...
- 翻译(5): 技术债务墻:一种让技术债务可见并可协商的方法
原文: The Wall of Technical Debt:A method for making technical debt visible and negotiable Published o ...
- 技术债务研究综述X4
目录 Paper1: Managing Technical Debt 与金融债务的比较 管理你的债务 不同角度的债务成本 总结 Paper2: Technical Debt: From Metapho ...
- 团队管理之—— 技术债务:如何带领团队从困境中突围而出?
对技术债务(Technical Debt)的理解 技术债务在研发领域类似于"金融债务"的概念,大部分情况下是说因为人为妥协,系统的设计和实现没有遵循最佳实践,所以虽然在短期做到了快 ...
最新文章
- 垃圾要分类!我们的大脑如何处理垃圾呢?
- Go进阶(1): Golang + Goland 研究Redis的基本操作与函数接口
- 【机器学习算法专题(蓄力计划)】八、机器学习中数据的方差分析
- RxSwift之订阅UITableViewCell里的按钮点击事件
- 【STM32】系统控制寄存器
- 关于 Angular 应用 tsconfig.json 中的 lib 属性
- 简单的实现RAII封装。
- springboot 接口404_资深架构带你学习Springboot集成普罗米修斯
- UWP锁、解屏后无法响应操作
- unity 小tip
- 系统架构图怎么画_产品架构图到底是怎么“画”出来的?
- 爆赞,java后端开发路线。
- 服务器内网怎么更新微软补丁,架WSUS服务器 内网自动打补丁
- JAVA:实现 web 打印功能(简单易懂)
- html 点击按钮刷新验证码,HTML点击刷新验证码
- 红旗Linux中文教程
- 拼多多改销量10+是怎么回事
- 数字孪生in卫星:数字化助力强国芯
- MyBatis-Plus 代码生成器最新版配置方案
- (PAT)BasiclLevel_c++ #1003 我要通过!(演绎法)