“For a successful technology, reality must take precedence over
public relations, for nature cannot be fooled.”
— Richard Feynman, Appendix F, Report of the Presidential Commission
on the Space Shuttle Challenger Accident, 1986
Every trade keeps commandments. Ours are mostly scar tissue with
punchlines — the collected paranoia of people who have shipped, built,
or launched something and lived to be sarcastic about it. This page
keeps them in two drawers: the general truths that survive any
discipline, and the scar tissue particular to each trade. Software gets
the deep shelves because it is the author’s trade; the others are here
because they are funnier. The named laws are indexed at the back, next
to the canon that keeps them.1
General Rules
Fault and Blame
It’s always your fault until it’s provably not your fault.
The problem belongs to whoever discovered it until it belongs to
someone else.
Don’t prove it’s someone else’s problem. Prove it’s not yours.
Users don’t care whose team owns the bug.
Never attribute to malice that which is
adequately explained by incompetence. — Hanlon’s Razor
Estimation and Process
It always takes longer than you expect,
even when you take into account Hofstadter’s
Law.
The first 90 percent of the code
accounts for the first 90 percent of the development time. The remaining
10 percent of the code accounts for the other 90 percent of the
development time. — the ninety-ninety
rule
When a measure becomes a target, it ceases
to be a good measure. — Goodhart’s
Law
A man with a watch knows what time it is. A
man with two watches is never sure. — Segal’s Law
Adding people to a late project makes it
later. — Brooks’s Law
Work expands so as to fill the time
available for its completion. — Parkinson’s Law
However menial and trivial your early assignments may appear, give
them your best efforts.6
There is always a premium upon the ability to get things done.
Confirm your instructions and the other fellow’s commitments in
writing.
Avoid the very appearance of vacillation.
Don’t be timid — speak up — express yourself and promote your ideas.
The quiet, mousey individual who says nothing is usually credited with
having nothing to say.
Be extremely careful of the accuracy of your statements. A wrong
answer is worse than no answer; if you do not know, say so, and say
you’ll find out right away.
Be as particular as you can in the selection of your boss — in its
effect upon your career, second in importance only to the selection of
proper parents.
Discipline-Specific Rules
Debugging
No matter how well it works, assume it’s broken somewhere.
If you didn’t test it, it doesn’t work.
If you only tested it once, it doesn’t work.
If it works on your machine, that’s where it belongs.7
The bug is never where you first think it is.
The harder you insist “that can’t be the problem,” the more likely
it’s the problem.
Simple things should be simple. Complex things should be possible.14
We should forget about small efficiencies, say about 97% of the
time. Premature optimization is the root of all evil.15
Every application has an inherent amount of
complexity that cannot be removed or hidden, only moved.16 —
Tesler’s Law
There are only two hard things in Computer Science: cache
invalidation and naming things.17
The best documentation is the code. The second-best documentation is
documentation.
The Software Laws
Conway’s Law
(1968): organizations design systems that mirror their communication
structures.
Wirth’s Law
(1995): software gets slower faster than hardware gets faster.
Zawinski’s
Law (1990s): every program attempts to expand until it can read
mail.
Greenspun’s
Tenth Rule (1993): any sufficiently complicated C or Fortran program
contains an ad hoc, informally-specified, bug-ridden, slow
implementation of half of Common Lisp.
Linus’s Law
(1999): given enough eyeballs, all bugs are shallow.
Atwood’s Law
(2007): any application that can be written in JavaScript, will
eventually be written in JavaScript.
The accident you planned for is not the accident you get.
Murphy was one of ours — an electrical engineer on a rocket-sled
program. See Systems, above.
Commandments
If it isn’t monitored, it isn’t running.
If it isn’t documented, it doesn’t exist.
If it works perfectly, you’re missing something.
The customer will always find the one workflow you never tested.24
Future You is a different person and deserves kindness.25
The root cause is usually human, even when the symptom is
technical.
Production gets a vote.
References
The Named Laws
Chronological, because the lineage is half the joke. Each entry links
to the law as it lives in the lists above — and every named law in the
lists links back here.
— three articles from Mechanical Engineering compiled into
the ur-text of this entire genre; still in print in revised editions.
The original is open on Archive.org.