你已经忍了很久了。
代码库里满是技术债务:重复的逻辑、混乱的命名、过时的依赖、没人敢动的”祖传代码”。每次做新功能,你都要在一堆坑里小心翼翼地走。本来一天能做完的需求,因为要绕过各种历史问题,变成了三天。
你很清楚,这个系统需要重构。不是小修小补,是彻底重构。
你向老板提出这个想法。
老板问:重构要多久?
你说:大概三个月。
老板问:这三个月业务需求怎么办?
你说:可能要暂停一些……
老板沉默了一下:Q4有三个大项目要上线,现在不是重构的时候。要不等Q4过了再说?
你心里知道,Q4过了会有Q1,Q1过了会有Q2。永远都不会有”好时候”。
但你没有办法,只能说好的。
然后继续忍受着每天的痛苦。
核心洞察:重构的收益是隐性的,风险是显性的。这就是重构难获支持的结构性原因。业务需求上线了,GMV涨了,数字清清楚楚。重构做完了,代码更干净了——然后呢?决策者看不到”干净的代码”带来了多少钱。但重构引入了新bug、导致系统不稳定——这个决策者看得见,而且要承担责任。收益隐性、风险显性,这个不对称让决策者天然倾向于不批准重构。要破局,你不能只讲技术价值,你必须学会讲商业价值。
这是技术人员最常见的困境之一:想重构,但争取不到资源。
技术债务的痛苦只有工程师自己知道。业务方看不见,老板也看不见。在他们眼里系统能用就行。为什么要花三个月做一件”看不见产出”的事情?
你可能觉得这是短视,是不尊重技术。
但抱怨改变不了任何事情。
你需要的是用一种方式说服决策者,让他们愿意投入资源做重构。这不是妥协,这是专业。因为工程师的职责不只是发现技术问题,还包括推动解决技术问题。
为什么重构难获支持
在讨论怎么争取资源之前,先要理解重构为什么这么难获得支持。
重构的收益是隐性的,风险是显性的。
业务需求的收益是显性的:上一个功能,用户数涨了,GMV涨了,数字很清楚。重构的收益是隐性的:代码更清晰了,维护成本降低了,开发效率提高了——但这些很难量化成一个具体数字。
而重构的风险却很显性:可能引入新bug、可能导致系统不稳定、可能影响正在进行的业务需求、可能超时超预算。这些风险决策者看得很清楚。
这造成了一个不对称:重构成功,隐性收益,决策者功劳不明显;重构失败,显性风险,决策者要承担责任。这个不对称让决策者天然倾向于不批准重构。
业务需求有deadline,技术债务没有。
业务需求有明确的deadline:Q4要上线、双十一要支撑、月底要交付。技术债务没有deadline。系统再烂,也能凑合用。今天不解决,明天也不会出大事。
当有deadline的事情和没有deadline的事情竞争资源时,有deadline的事情总是赢。所以技术债务就一直被推后、推后、再推后。直到某一天系统真的撑不住了,大家才开始恐慌。
还有一点需要自我反思:很多时候重构得不到支持,是因为工程师自己没有说清楚价值。
你可能会说”代码太乱了""技术栈太老了""维护成本太高了”。但这些对决策者来说是噪音。他们想知道的是:乱到什么程度?有多大影响?老到什么程度?会造成什么问题?维护成本高到多少?换算成钱是多少?
如果你说不清楚,他们就无法判断这件事值不值得做。
技术债ROI计算模板

技术债ROI计算模板:量化技术债务成本、重构投入与收益 — 打开笔记本或文档,按照上面的模板逐项填写。不需要完美,写下来就是进步。
分阶段推进策略图

决策者心理:“先试一个月,成了再给更多”
| 阶段 | 目标 | 交付物 | 退出/衡量条件 |
|---|---|---|---|
| 验证期(1个月) | 重构最核心的3个模块,验证方案可行 | 3个模块重构完成、单测覆盖率≥80%、性能对比数据 | 如果验证失败可以回滚,损失仅1人月 |
| 扩展期(2个月) | 扩展到全部核心模块,团队熟悉新架构 | 核心系统全部迁移、性能基准测试报告、团队培训完成 | 如果业务有紧急需求,可以暂停不会”骑虎难下” |
| 日常化(持续) | 融入日常迭代,持续偿还技术债 | 每个sprint 20%用于技术改进 | 开发效率趋势、故障率趋势 |