<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jobin</title>
    <description>The latest articles on DEV Community by Jobin (@jobin_jose_73d2269510d723).</description>
    <link>https://dev.to/jobin_jose_73d2269510d723</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1834072%2Ff68224b8-b4b8-44c0-99b4-e6a0dea9eaf2.jpeg</url>
      <title>DEV Community: Jobin</title>
      <link>https://dev.to/jobin_jose_73d2269510d723</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jobin_jose_73d2269510d723"/>
    <language>en</language>
    <item>
      <title>Why TODOs rot — and how I built a tool to make them expire</title>
      <dc:creator>Jobin</dc:creator>
      <pubDate>Thu, 15 Jan 2026 23:50:08 +0000</pubDate>
      <link>https://dev.to/jobin_jose_73d2269510d723/why-todos-rot-and-how-i-built-a-tool-to-make-them-expire-1k07</link>
      <guid>https://dev.to/jobin_jose_73d2269510d723/why-todos-rot-and-how-i-built-a-tool-to-make-them-expire-1k07</guid>
      <description>&lt;p&gt;Every codebase I’ve worked on has the same graveyard.&lt;br&gt;
It’s not in a folder.&lt;br&gt;
It’s in the comments.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;// TODO: remove later&lt;br&gt;
// FIXME: temporary hack&lt;br&gt;
// HACK: this is ugly&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We write them with good intentions.&lt;br&gt;
We tell ourselves we’ll come back.&lt;br&gt;
We almost never do.&lt;br&gt;
Six months later nobody remembers why that code exists, but now it’s part of production — and touching it feels dangerous.&lt;br&gt;
That’s not laziness.&lt;br&gt;
It’s how software systems work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real problem with TODOs
&lt;/h2&gt;

&lt;p&gt;A TODO is a promise with no deadline.&lt;br&gt;
Without a deadline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It has no owner&lt;/li&gt;
&lt;li&gt;It has no priority&lt;/li&gt;
&lt;li&gt;It has no cost&lt;/li&gt;
&lt;li&gt;So it quietly rots.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Teams don’t ignore tech debt because they don’t care — they ignore it because nothing forces it to surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  I wanted TODOs to behave like real work
&lt;/h2&gt;

&lt;p&gt;Bugs don’t get ignored because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CI fails/warns&lt;/li&gt;
&lt;li&gt;Tickets get created&lt;/li&gt;
&lt;li&gt;People get paged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I asked a simple question:&lt;br&gt;
What if technical debt worked the same way?&lt;br&gt;
That led me to build a small open-source CLI called &lt;strong&gt;&lt;a href="https://github.com/jobin-404/debtbomb" rel="noopener noreferrer"&gt;DebtBomb&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How DebtBomb works
&lt;/h2&gt;

&lt;p&gt;Instead of writing:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;// TODO: remove later&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You write:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;// @debtbomb(expire=2026-02-10, owner=pricing, reason="temporary promo logic")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You’re saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This code is allowed to exist — but only until this date.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DebtBomb scans your code in CI.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When the expiry date passes:&lt;/li&gt;
&lt;li&gt;The build fails/warns&lt;/li&gt;
&lt;li&gt;A Jira ticket is created or updated&lt;/li&gt;
&lt;li&gt;Your team is notified in Slack, Discord, or Microsoft Teams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The debt becomes:&lt;br&gt;
visible, owned, and impossible to ignore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this changes behavior
&lt;/h2&gt;

&lt;p&gt;The magic isn’t in the parsing.&lt;br&gt;
It’s in the pressure.&lt;/p&gt;

&lt;p&gt;Once developers know that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expired debt blocks deploys&lt;/li&gt;
&lt;li&gt;It shows up in Jira&lt;/li&gt;
&lt;li&gt;It pings the team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They stop writing vague TODOs and start making real decisions:&lt;br&gt;
“Do I actually need this?”&lt;br&gt;
“Who owns it?”&lt;br&gt;
“When will it be removed?”&lt;/p&gt;

&lt;p&gt;Debt becomes a contract, not a hope.&lt;/p&gt;

&lt;h2&gt;
  
  
  It’s language-agnostic and stupidly simple
&lt;/h2&gt;

&lt;p&gt;DebtBomb doesn’t understand your code.&lt;br&gt;
It just reads comments.&lt;br&gt;
That means it works with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Rust&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Bash
Anything with comments
No ASTs.
No compilers.
Just text.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Teams are already using it in CI&lt;br&gt;
DebtBomb now integrates with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Jira&lt;/li&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;li&gt;Discord&lt;/li&gt;
&lt;li&gt;Microsoft Teams
So expired debt doesn’t just fail silently — it shows up where your team already works.
You can try it in 30 seconds&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;go install github.com/jobin-404/debtbomb/cmd/debtbomb@latest&lt;/code&gt;&lt;br&gt;
&lt;code&gt;debtbomb check&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/jobin-404/debtbomb" rel="noopener noreferrer"&gt;github&lt;/a&gt;&lt;br&gt;
I’d love your feedback&lt;/p&gt;

&lt;p&gt;This started as a personal itch, but it turns out a lot of people hate how TODOs rot.&lt;br&gt;
If you’ve dealt with technical debt in production systems, I’d love to hear:&lt;/p&gt;

&lt;p&gt;How do you track “temporary” code today?&lt;br&gt;
What would make a tool like this actually usable in your tea&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>devops</category>
      <category>programming</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
