Chesterton's Fence
Do not remove something whose purpose you cannot explain.
Chesterton's fence is G. K. Chesterton's parable about reform: coming upon a fence across a road, the sensible reply to "I see no use for this, let us clear it away" is "go away and think. When you can come back and tell me that you do see the use of it, I may allow you to destroy it."
Applied to code, it argues against deleting a guard, a workaround, or an odd-looking line simply because its purpose is not evident. Much production code encodes constraints that are invisible from the code itself — a browser quirk, an ordering requirement, an upstream bug. Removing one produces a fault that looks unrelated and reappears months later.
The productive form of the principle is not conservatism but investigation: find the reason, then decide. If the fence turns out to be a real constraint, that is exactly the fact worth recording — see Code Comment, whose useful form answers "what breaks if you rewrite this?".
The principle has a mirror, and both are needed. A fence whose reason has expired should come down; keeping it forever is Technical Debt with a good story. And a fence nobody can explain because nobody wrote it down is why Documentation Rot is a correctness problem, not a tidiness one.
See also5
Hand-picked in the note itself — the neighbours worth reading next.
Defensive Default
A substituted value that papers over a missing input and hides the misconfiguration that produced it.
Method9 connections
Root Cause Analysis
Escalating past the visible symptom until you find the layer that actually produced it.
Method21 connections
Naming
Choosing identifiers so the code states its own meaning without commentary.
Method21 connections
Code Review
A second person reading a change before it lands, and the practices that make it worth the time.
Version Control & Delivery15 connections
Unreachable Code
Code no input can execute — usually a guard against a state the surrounding invariants forbid.
Testing & Verification10 connections
Related2
Nearby in the graph rather than deliberately chosen. Looser, sometimes surprising.
Linked from9
Notes elsewhere in the wiki that reach for this one.
- Branch CoverageTesting & Verification
The proportion of conditional outcomes exercised — the strictest ordinary coverage metric, and the most informative.
- Code CommentMethod
Prose inside source code, useful only when it records a constraint the code cannot state.
- Defensive DefaultMethod
A substituted value that papers over a missing input and hides the misconfiguration that produced it.
- Documentation RotMethod
Documentation that has drifted from the system it describes, and is now worse than none.
- NamingMethod
Choosing identifiers so the code states its own meaning without commentary.
- Plausible MechanismMethod
A causal explanation that was inferred rather than tested, and reads as more rigorous for being specific.
- Root Cause AnalysisMethod
Escalating past the visible symptom until you find the layer that actually produced it.
- Technical DebtMethod
The future cost of a present shortcut, metaphorically accruing interest.
- Unreachable CodeTesting & Verification
Code no input can execute — usually a guard against a state the surrounding invariants forbid.