技术债务

背景:最近一直在给研发团队强调一定要把产品平台关键的账号系统分离出来,而不是和业务产品线有瓜葛。但是因为涉及改动太大,业务线很忙迟迟得到不到执行。在这种情况下,我协调召开了研发的紧急会议,要求务必在近期解决这个问题,甚至不惜减慢业务线的进度。其实如果大家仅仅是因为时间紧、任务重无法改动我倒不担心,我最怕的就是大家认为这件事情并不严重,在我做技术的9年生涯中见证过太多次因为不重视这种情况、或者推迟修正造成的更大或者不可挽回的问题,那我们用2周或者更多时间来修正半年前犯下的错误是完全值得的。



为什么我强烈要求这么做,具体原因不做分析,只需要说明我们是平台级的产品,账户系统是公共组件,如果这些公共组件却附属在其中一个或某个业务产品线中,大家就知道我们后期的灵活性和可扩展性面临怎样的困境了。

上面谈的这种情况就属于技术债务,技术债务的形成往往有两个主要原因:

  1. 没有架构能力,对未来可能面临的糟糕情况没有预知;
  2. 知道可能后期会面临问题,但是为了追求进度,暂时放弃精细化的架构设计;

对于第一种情况,不多说,等你发现问题时估计就有些晚了,相应的付出的成本也会更大。所以对软件为什么我们常常强调高端的架构能力,而不是仅仅机械的代码能力。

第二种情况其实大家是知道后期可能会遇到的糟糕情况,但是为了求快并没有进行好的架构设计,在此之后,大多数人会因为心理上的拖延或者生理上的懒惰把重构任务推后,这时技术债务就会像高利贷一样越滚越多,你要么倾家荡产去还债(完全重写),还有可能 go to dead!(产品失败)。

听上去很危言耸听,但是这恰恰是我在工作生涯中屡屡看见的。当你因为技术债务积累了一年、两年、三年时,你基于此的产品实现也会越来越复杂。即使你招聘到了业界大牛,当得知这种改动是颠覆性的,需要消耗大量的时间和人力时,也往往使其无法下手。反过来我也经历过几次发现这种问题时,我们力排众议,投入阶段性的力量全力还债的场景,我记忆中的几次通宵就是在那个期间发生的。

所以谨以一个技术人劝大家:前期如果能预见到技术债务,而且时间又紧张的话,自己多努力再努力去解决,因为这是为你以后争取时间和精力;中期如果能及时发现技术债务,不管付出再大也要有勇气决然解决,因为这可能关系到产品和你的生存;后期发现了这些问题那你就吸取教训,开展下一个项目时去避免。

再以一个处女座的工程师劝大家:请把自己写代码、做产品当作是在打磨一件艺术品,质量好坏是可以迭代的,但是如果你没这个态度我想永远不会产出优秀的作品。

时间: 2024-11-07 10:30:19

技术债务的相关文章

技术债务(母鸡的遭遇)

技术债务,是指匆忙的实现一个功能,却对现有的程序库造成了破坏(在实现的过程中污染了代码库的设计),这对于一些项目经理/客户来说就像是天书奇谈.也许他们是明白的,只是不愿意承认罢了,我估计是这样的.不管怎样,我想起来一个小故事,当下次遇到这种情况,需要向他们解释增加某些新功能的代价时,也可用讲这个故事给他们听. 一个农夫有3只母鸡.每只母鸡每天下一个蛋.农夫跟当地的一个食品店老板做生意.食品店老板每天从农夫那里买2给鸡蛋放在店里出售.一切都很好,直到有一天,食品店老板出现在农夫家里: 食品店老板:

技术债务管理以及Firefox/Chromium的债务评价

现在的软件开发是在遍地敏捷,人人讲唯快不破的时代,哪有人有时间思考代码质量,设计的质量? 哪个又不是从一堆代码中杀出血路来实现另一个功能?一个产品都存活不了几年,何必考虑什么可维护性? 我们追求进度的时候,总是要牺牲些东西,或是破坏了一些东西等着后面补.这就是技术债! 管理不好,债台高筑,即使不破产,也是要拆东墙,补西墙的玩平衡.现实是残酷的,但不影响我们抬头看看这个世界. 技术债务 技术债务(Technical Debt)这个词,我最早是从InfoQ关于Uber的一个访谈中了解到的,正好也在思

Java代码中常见技术债务处理之Exception

写在前面 异常处理是代码中常见的处理,本文根据SonarQube在异常方面的规则和常见检查结果,选取说明了常见异常处理中的技术债务,提倡技术债务最少的编码方式. Exception handlers should preserve the original exceptions Either log or rethrow this exception. When handling a caught exception, the original exception's message and s

技术债务可能是这样来的

看我技术博客的朋友可能有注意到,最近更新了一系列与CEF.PPAPI.Skia相关的文章.在研究它们的过程中,有一些有意思的经历,非常典型,可以从一个方面解释"技术债务"的由来. 接下来我会讲讲这次经历,并从此展开,看看形成技术债务的原因及应对策略. 选择容易的替代策略 因为业务需要,我得在PPAPI插件中显示另一个模块(已有模块,基于C++代码完成)传递过来的图像数据.那个模块提供的数据,图像格式是RGBA32,我在Intel Pentium主机上编译出的Skia库,默认的颜色类型是

技术债务偿还计划

英文原文:Technical Debt: A Repayment Plan 什么是技术债务? 许多团队都受技术债务困扰,不过,很少有团队能真正地设计一个计划从中挣脱出来.为了更好的理解如何才能摆脱债务,我们首先要正确地理解什么是技术债务. 技术债务是由团队为了短期的项目利益故意做了欠佳的技术决策而招致的.例如,为了使一个产品更快的投放市场,团队可能不会像面对一段棘手的代码 那样,编写深入的自动化测试.或者,他们可能会决定基于一个很快就会过时的框架构建项目,而不是花钱购买那个框架的一个经过升级.服

[译]技术债务中的人力成本

看到一篇讲技术债务中的人力成本的文章,显微阐幽,粗略译成中文,不求信雅达,但求不离原意太远. 原文地址为:http://www.daedtech.com/human-cost-tech-debt/ “技术债务”这个概念很值得去熟悉一下,如果你对这个概念还不熟悉的话:它不单是一个常见的业界术语,也是一个重要的概念. Ward Cunningham创造了“技术债务”这个词,这个词本身就意味着在如果今天在你的软件中走了捷径,那么不单是最后要还这个债,而且还要支付债息.换句话说,今天你在交付之前用一个全

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

原文: The Wall of Technical Debt:A method for making technical debt visible and negotiable Published on 22 January 2020 by @mathiasverraes 翻译: 0x01 介绍 术语"技术债务"(Technical debt),是对软件设计中那些次优的.不再有效的.甚至错误的设计选择的隐喻.它们增加了软件进一步开发的成本.出来混的总是要还的,你今天选择的临时或山寨做法

技术债务和技术投资

本文是翻译,版权归原作者所有 原文地址(original source):http://jamison.dance/12-31-2015/technical-debt-and-technical-investment/ 作者(author): lexical NOPE(@jergason) 技术债务 技术债务,是软件工程讨论折衷方案时所用到的一种工具.当你遇到技术债务(注1)时,你就会堆积一些快速.肮脏的代码,它们更难以维护.或拉低了图中的效率曲线.随着时间的推移,和你一开始用正确的方式开发相比

ASP.NET MVC 技术债务

ASP.NET MVC 缓存.本地化和监控诊断 ASP.NET MVC 认证与授权 Entity Framework 创建数据模型