Delete code you love
Deleting code feels like a loss. It is not. It is the one edit that makes a codebase smaller, and smaller is the only property that matters at 2am.
Unused abstractions rot
An interface with one implementation is a promise nobody asked for. It sits there implying flexibility until someone builds on it, and then it is load-bearing nonsense.
Every line kept "just in case" is a line someone reads later
Code is not free once it is written. Every function still in the repo gets scanned, half-understood, and stepped over by the next person hunting a bug. Dead code does not rest. It taxes.
Version control already remembers
Nothing is actually lost. Git has kept every version since the first commit. The "just in case" instinct is solving a problem that was solved decades ago, by a tool already running on your machine.
The courage to delete
Adding code feels productive. Deleting code feels risky, even when it is not. That asymmetry is why codebases only grow. Someone has to be willing to hit delete and trust the tests, or trust that there are none because nothing used it anyway.
Small enough to fit in one head
A codebase you can hold in your head is a codebase you can change with confidence. Every unused branch, unused flag, and unused helper is rent paid on a room nobody lives in.
The checklist
No caller, no test, and no ticket referencing it? Delete it today.
- No caller: grep for it. If nothing calls it, it is not "reachable, technically."
- No test: if nothing verifies it, nobody will notice it is gone either.
- No ticket: if no open work depends on it, "future plans" is just a feeling.