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

发布: (2026年1月16日 GMT+8 07:50)
4 min read
原文: Dev.to

Source: Dev.to

Cover image for Why TODOs rot — and how I built a tool to make them expire

我参与过的每个代码库都有同样的“墓地”。

它不在某个文件夹里。
它在注释里。

// 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 的腐烂。

如果你在生产系统中处理过技术债务,我很想听听你的看法:

  • 你今天如何跟踪“临时”代码?
  • 什么样的功能会让这种工具在你的团队中真正可用?
Back to Blog

相关文章

阅读更多 »