# Technical Debt (/academy/technical-debt)



Technical debt is a loan from tomorrow.

You ship tonight the hacky way. Tomorrow every change in that neighborhood costs extra time. `any`, a skipped [test](/academy/test), the env var hardcoded "just for the demo" — the product goes on stage. The interest shows up as friction: a five-minute tweak that eats an hour, a change that breaks three "unrelated" things, a file nobody wants to open.

None of that is a new [bug](/academy/bug). It is yesterday's shortcut showing up as today's tax.

**A loan you meant is fine**

Borrowing an hour to hit a deadline, win a room, or prove the idea is worth building well is often correct. [YAGNI](/academy/yagni) is a loan you *should* take: you skipped the cathedral. The mistake is forgetting you signed.

Write it down. "We skipped auth on `/export`." A loan you remember is a plan. A loan you don't is a 2 a.m. outage. Put the note in the code, an issue, or the [PR](/academy/pull-request).

**Pay a little, often**

You do not need a cleanup festival. [Refactor](/academy/refactoring) the rough edge while you are already in that file. Pay a little whenever you pass through. The giant "fix it all" weekend never lands.

[Vibe coding](/academy/vibe-coding) prints working code faster than you can notice the corners. You asked an [agent](/academy/agent) to make it run. It did. Ask it a second question: "What shortcuts are in here, and what bites us after the demo?" Then decide which ones you keep until Monday.

The [CLI](/academy/cli) `bun run check` is a minimum payment. Red types are debt compounding in public.

**What this unlocks**

Quick and correct are usually two different checkouts. That is fine. Remember which one you picked. The bill comes either way — as interest, or as an hour you already reserved.
