Technical Debt
The future cost of a present shortcut, metaphorically accruing interest.
Technical debt is Ward Cunningham's metaphor for the cost incurred by choosing an expedient implementation over a better one: you ship sooner, and you pay interest on the difference in every subsequent change.
The metaphor is often flattened into "bad code", which loses what made it useful. Cunningham's point was that deliberately taking a shortcut can be correct, provided the debt is known and repaid. Debt taken knowingly, recorded, and scheduled is a financing decision. Debt taken unknowingly is just a defect with a nicer name.
Some recognizable forms: a workaround kept after its cause was fixed upstream; a duplicated implementation nobody consolidated; a guard suppressed rather than resolved; a deprecated dependency held back; a coverage shortfall inherited from a branch whose gate never ran. Each is cheap once and expensive per subsequent touch.
Two practices keep it visible. Record why a shortcut was taken and what would let it be removed, so a later reader is not stuck at Chesterton's Fence. And prefer paying an adjacent debt inside the change that exposes it over filing a follow-up item — a follow-up moves the work to a backlog that may never be read, while the person with the context is right there.
See also11
Deprecation
Marking something as superseded and scheduled for removal, without removing it yet.
Method20 connections
Documentation Rot
Documentation that has drifted from the system it describes, and is now worse than none.
Method28 connections
Code Review
A second person reading a change before it lands, and the practices that make it worth the time.
Version Control & Delivery38 connections
Root Cause Analysis
Escalating past the visible symptom until you find the layer that actually produced it.
Method49 connections
Feature Flag
A runtime switch that decouples shipping code from enabling behavior.
Data & Content19 connections
Plausible Mechanism
A causal explanation that was inferred rather than tested, and reads as more rigorous for being specific.
Method63 connections
Naming
Choosing identifiers so the code states its own meaning without commentary.
Method59 connections
Code Comment
Prose inside source code, useful only when it records a constraint the code cannot state.
Method11 connections
Premature Optimization
Spending effort making code fast before you know where it's actually slow trades clarity for speed you may not need.
Method10 connections
Definition of Done
A team's shared checklist of what must be true before work counts as finished, such as reviewed, tested, documented, and deployed, which keeps hidden work from piling up behind items marked complete.
Version Control & Delivery9 connections
Architecture Decision Record
A short document recording one significant technical decision, its context, and its consequences, kept alongside the code so later readers know why the system is shaped the way it is.
Version Control & Delivery9 connections
Linked from28
- Architecture Decision RecordVersion Control & Delivery
A short document recording one significant technical decision, its context, and its consequences, kept alongside the code so later readers know why the system is shaped the way it is.
- Automated Dependency UpdatesVersion Control & Delivery
Bots that open pull requests whenever a dependency releases a new version, how they keep upgrades small and security patches fast, and how they turn into noise or a supply-chain risk when misconfigured.
- Backward CompatibilityVersion Control & Delivery
Keeping new versions working with old code, data, and clients, the extreme lengths platforms go to preserve it, and the accumulated cost of never being allowed to change.
- Brooks's LawMethod
Adding people to a late software project makes it later, because onboarding and coordination costs outpace the new capacity.
- Chesterton's FenceMethod
Do not remove something whose purpose you cannot explain.
- Code CommentMethod
Prose inside source code, useful only when it records a constraint the code cannot state.
- Definition of DoneVersion Control & Delivery
A team's shared checklist of what must be true before work counts as finished, such as reviewed, tested, documented, and deployed, which keeps hidden work from piling up behind items marked complete.
- DeprecationMethod
Marking something as superseded and scheduled for removal, without removing it yet.
- Documentation RotMethod
Documentation that has drifted from the system it describes, and is now worse than none.
- EntropyMatter & Energy
The measure of how many ways a system's parts can be arranged without changing how it looks, which always grows in total and gives time its direction.
- Factory GamePlay & Games
A genre whose core verb is building the machine that plays the game, turning the player into a systems engineer.
- Feature CreepMethod
A product accumulates features one reasonable addition at a time until the sum is bloated, slow, and hard to use.
- Feature FlagData & Content
A runtime switch that decouples shipping code from enabling behavior.
- FlanderizationMeaning & Society
A recurring character reduced, across a long run, to a single exaggerated trait.
- Gall's LawMethod
A complex system that works evolved from a simple system that worked; a complex system built from scratch never does.
- Live Service GamePlay & Games
A game operated as a running service rather than shipped as a finished artifact, with the consequences that shift implies.
- Long-Term SupportVersion Control & Delivery
A release line that receives security and bug fixes for years instead of months, letting users who value stability skip the constant upgrade treadmill.
- Not Invented HereMethod
The bias against adopting an outside solution simply because it wasn't built by your own team.
- Path DependenceMethod
Outcomes shaped by the sequence of past choices rather than by present merit.
- Premature OptimizationMethod
Spending effort making code fast before you know where it's actually slow trades clarity for speed you may not need.
- ProvenanceMethod
The recorded origin of a change or a claim — who made it, when, and on what evidence.
- RefactoringMethod
Changing the structure of code without changing what it does, in small verified steps, so that the next change becomes easy.
- Root Cause AnalysisMethod
Escalating past the visible symptom until you find the layer that actually produced it.
- Schema DriftData & Content
Divergence between a schema and the code, types, or documentation that describe it.
- Second-System EffectMethod
The tendency for a system's successor, freed of its predecessor's constraints, to become dangerously over-engineered.
- Sunk Cost FallacyMethod
Continuing an effort because of what has already been spent on it, rather than what remains to be gained.
- Worse Is BetterMethod
A simpler, less correct design that ships and spreads beats a more correct one that doesn't, because adoption compounds.
- Yak ShavingMethod
A chain of prerequisite tasks that stands between you and the task you meant to do.