为什么 TODO 会失效——以及我如何构建一个让它们过期的工具
Source: Dev.to

我参与过的每个代码库都有同样的“墓地”。
它不在某个文件夹里。
它在注释里。
// TODO: remove later
// FIXME: temporary hack
// HACK: this is ugly
我们抱着好意写下它们,告诉自己以后会回来处理,但几乎从不兑现。六个月后,没有人记得这些代码为何存在,但它已经进入生产环境——触碰它让人觉得危险。这不是懒惰,而是软件系统的工作方式。
TODO 的真正问题
TODO 是一个没有截止日期的承诺。没有截止日期:
- 没有负责人
- 没有优先级
- 没有成本估算
于是它悄悄腐烂。团队并不是因为不在乎而忽视技术债务——而是因为没有任何东西迫使它浮出水面。
我希望 TODO 像真实工作一样
Bug 不会被忽视,因为:
- CI 失败/警告
- 会创建工单
- 人员会被呼叫
如果技术债务也能以同样方式运作会怎样?这个问题促使我构建了一个小型开源 CLI,叫 DebtBomb。
DebtBomb 的工作原理
不再写:
// TODO: remove later
而是写:
// @debtbomb(expire=2026-02-10, owner=pricing, reason="temporary promo logic")
这意味着:“这段代码可以存在——但只能到这个日期为止。”
DebtBomb 在 CI 中扫描你的代码。当到期日期过去后:
- 构建失败或发出警告
- 创建或更新 Jira 工单
- 在 Slack、Discord 或 Microsoft Teams 中通知团队
债务变得可见、有人负责,且无法被忽视。
为什么这会改变行为
关键不在于解析本身,而在于压力。一旦开发者知道:
- 过期的债务会阻止部署
- 它会出现在 Jira 中
- 它会提醒团队
他们就会停止写模糊的 TODO,转而做出真实的决定:
- “我真的需要它吗?”
- “谁来负责?”
- “何时删除?”
债务成为一种合同,而不是希望。
它语言无关且极其简单
DebtBomb 不需要理解你的代码,只读取注释。这意味着它适用于任何支持注释的语言,例如:
- Go
- TypeScript
- Python
- Rust
- Java
- Bash
- 任何有注释的语言
无需 AST、无需编译器——只要纯文本。
DebtBomb 可集成:
- Jira
- Slack
- Discord
- Microsoft Teams
因此,过期的债务不会悄然失效——它会出现在团队已经使用的工作平台上。
只需 30 秒即可尝试
go install github.com/jobin-404/debtbomb/cmd/debtbomb@latest
debtbomb check
仓库地址: github.com/jobin-404/debtbomb
我很期待你的反馈。这个工具最初是个人的兴趣,但事实证明很多人都讨厌 TODO 的腐烂。
如果你在生产系统中处理过技术债务,我很想听听你的看法:
- 你今天如何跟踪“临时”代码?
- 什么样的功能会让这种工具在你的团队中真正可用?