Hyrum's Law
With enough users, every observable behavior of an interface becomes a dependency for somebody.
Hyrum's law states that with a sufficient number of users of an interface, every observable behavior of that interface will be depended upon by somebody, regardless of what the interface's contract promises. The observation, attributed to a Google engineer named Hyrum Wright, does not distinguish between behavior a specification documents and behavior that merely happens to be true of one implementation — error wording, iteration order, timing, even outright bugs. Enough callers, and all of it becomes load-bearing.
This makes "it was never part of the documented contract" a weak defense when a change breaks someone. The claim is often true and beside the point: Documentation Rot means the written contract rarely covers every observable property, and a caller who noticed a convenient regularity has no way to know whether it was intentional. Removing an undocumented behavior is not obviously safer than removing a documented one; it is only less defensible, because the maintainer can point to a specification and call the breakage someone else's mistake. The underlying fault is the kind Chesterton's Fence warns against — a change made without knowing what depends on the thing removed produces a Regression that looks unrelated to its cause. Catching the dependency in Code Review, or tracing a Root Cause Analysis back to the exact caller, is far cheaper than discovering it in production.
Versioning schemes exist partly to manage this. A Semantic Versioning major bump signals that behavior, documented or not, may change, and a Deprecation window gives dependents time to notice and adjust before it does. Neither eliminates Hyrum's law — a minor version can still break someone who relied on accidental behavior — but both convert a Silent Failure into an announced one, which is the most a maintainer can reasonably offer.
See also3
User Agent String
The header every browser sends to identify itself, which grew into a pile of mutual impersonations because sites served different pages to different browsers, and why it's being frozen.
Web Platform6 connections
Postel's Law
Be conservative in what you produce, liberal in what you accept — a design rule for interoperating systems.
Method14 connections
API Translation Layer
Software that implements one platform's API on top of another's, so unmodified programs run somewhere they were never built for.
Graphics & Rendering18 connections
Linked from11
- API Translation LayerGraphics & Rendering
Software that implements one platform's API on top of another's, so unmodified programs run somewhere they were never built for.
- 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.
- ChangelogVersion Control & Delivery
A curated, human-readable record of the notable changes in each version of a project, written for the people who use it rather than the people who built it.
- Chesterton's FenceMethod
Do not remove something whose purpose you cannot explain.
- DeprecationMethod
Marking something as superseded and scheduled for removal, without removing it yet.
- JavaScriptWeb Platform
The programming language of the web browser, written in ten days in 1995, standardized as ECMAScript, and now run everywhere from servers to build tools despite quirks it can never remove.
- OpenAPIWeb Platform
A standard, machine-readable format for describing HTTP APIs, listing every endpoint, parameter, and response shape, from which tools generate documentation, client libraries, mock servers, and tests.
- Postel's LawMethod
Be conservative in what you produce, liberal in what you accept — a design rule for interoperating systems.
- Semantic VersioningVersion Control & Delivery
A version-numbering convention where the number communicates the kind of change.
- User Agent StringWeb Platform
The header every browser sends to identify itself, which grew into a pile of mutual impersonations because sites served different pages to different browsers, and why it's being frozen.