越拖越贵的代码欠条 技术债
上周在河西万达旁边的鸭血粉丝汤店碰到老周,他刚从公司逃出来,衬衫袖子挽到胳膊肘,手里攥的半瓶冰红茶都被捏变形了。他说上周排的电商大促预热需求,本来3天就能上线的活动页,硬生生卡了7天。原因说出来有点好笑——翻旧代码的时候发现,三年前的前端写的用户鉴权逻辑,连半行注释都没有,函数名全是a()b(),改一行要蹦三个报错,没人敢动。他说这就是他们组还了三年还没还完的账。
程序员蹲在堆满旧代码的工位挠头

代码仓库分支堆积混乱的界面截图
不是所有的“旧代码”都叫技术债
很多人一开始对技术债的误解,就是把所有跑了很久的老代码都归为需要被彻底推翻的存在,却忘了那些经过无数线上流量验证、逻辑边界清晰、哪怕写得再朴素的代码,其实是整个系统最稳的压舱石。真正的技术债从来不是“代码老”,而是当初为了省时间走的那些“没人兜底的捷径”——为了赶版本跳过的参数校验,把同一段逻辑复制粘贴了五六份到不同的页面,本该写的单元测试省得一干二净,甚至为了快速上线,把用户的敏感信息明文存在前端缓存里。这些操作当时省了多少时间,后来就要花十倍甚至几十倍的时间去填坑。 说实话,我之前也见过不少团队,一提到技术债就如临大敌,非要把所有老代码全推翻重写,最后折腾了三个月,新bug比旧代码还多,何苦呢?没人愿意当那个“拆东墙”的人
为啥这些捷径会变成还不清的债?核心原因根本不是工程师懒,是没有即时业务反馈的技术债偿还,永远会被排在需求优先级的最末尾。 老周说他们之前试过专门抽两个工程师,花一周时间重构那个乱成一锅粥的用户鉴权模块,结果季度复盘的时候,领导第一句话就是“这一周你们没产出任何面向用户的东西,绩效怎么算?”。谁愿意干这种吃力不讨好的事啊?你把代码改得结构清晰了,用户感知不到,业务转化率也不会立刻涨一个百分点,反而要是重构的时候没兜住边界,出了线上故障,那锅结结实实扣在你头上。 上次他们第一次尝试重构那个鉴权逻辑,刚上线半小时就有三个老用户反馈登不上系统。查了半天才发现,当初写代码的同事为了方便内测,在判断逻辑的最后藏了个针对特定测试账号的白名单分支,没写任何注释,连提交记录里都只写了个“临时调整”。那时候整个开发群都在刷捂脸的表情,老周说他盯着监控屏幕,连灌了三杯冰美式,手心全是汗。 不过话说回来,换你是业务负责人,你愿意把本来能用来做新功能的人力,抽去改那些用户根本看不见的代码吗?对吧,换谁都要算算账。