Defaults Are Policy
Defaults are more than a convenience; they are policy.
A default is a decision about what happens when a user doesn’t tweak a setting or read the documentation. In practice, defaults shape how most people interact with a system.
That’s why they matter so much.
This isn’t just true for consumer apps and user-facing software. It applies just as heavily to the internal tools, APIs, libraries, and platforms we build as engineering teams. Whether it’s a helper script, a developer CLI, or a shared infrastructure module, the defaults we set shape the baseline quality and security of our entire team’s workflow.
Nobody combs through config options before running a tool. We take the path that’s already there. If the default is safe, most people stay safe. If it’s risky, most people inherit that risk. If it’s noisy or fragile, that becomes the norm. This isn’t a user failing - it’s a design choice.
A classic engineering move: ship with weak or unsafe defaults, then point to a setting that makes things safer. That’s not good enough. If the safe mode means:
- digging through docs
- finding obscure flags
- understanding tricky trade-offs
- overriding the “easy” preset then most people won’t bother. Just having a safe option doesn’t make up for an unsafe default.
Every default is a statement of priorities. For example:
- default-on telemetry means you value data collection
- default-open permissions means you value convenience over caution
- default-retained logs means you value future visibility over privacy
- default-floating dependencies means you value easy updates over reproducibility
- default-disabled safeguards means you value short-term ease over long-term safety These are policy choices, whether you admit it or not.
Safe defaults aren’t about assuming people are careless. They’re about respecting reality:
- people are busy
- docs are incomplete
- systems get inherited
- teams change
- expertise varies
- hacks become habits In that world, defaults have huge influence. Good defaults mean users don’t have to dodge as many pitfalls. Bad defaults mean users have to build safety themselves, one override at a time.
Sometimes you need less strict or less safe behaviour. That’s fine - but it should be a conscious choice. A good system makes the risky path available, but not invisible. It draws a line between:
- standard behaviour
- exceptional behaviour If the escape hatch is the main road, the policy has already changed, no matter what the docs say.
If you want to know what a system is actually about, look at its defaults.
The manual documents ideals.
The marketing documents intentions.
The defaults are the real policy.