Laws of Software Engineering

Collection of laws, principles, and aphorisms that are widely recognized in the software engineering community.

Atwood's Law

Any application that can be written in JavaScript, will eventually be written in JavaScript.

Brooks's Law

Adding [human resources] to a late software project makes it later.

Choose Boring Technology

Consider how you would solve your immediate problem without adding anything new.

Conway's Law

Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.

Cunningham's Law

The best way to get the right answer on the internet is not to ask a question; it's to post the wrong answer.

Doerr's Law

We need teams of missionaries, not teams of mercenaries.

Fitt's Law

The time to acquire a target is a function of the distance to and the size of the target.

Gall's Law

A complex system that works has evolved from a simple system that worked. A complex system built from scratch won't work.

Goodhart's Law

When a measure becomes a target, it ceases to be a good measure.

Greenspun's tenth rule

Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.

Hofstadter's Law

It always takes longer than you expect, even when you take into account Hofstadter's Law.

Hyrum's Law

With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody.

Kerchkhoff's principle

In cryptography, a system should be secure even if everything about the system, except for a small piece of information - the key - is public knowledge.

Kernighan's Law

Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?

Knuth's optimization principle

Premature optimization is the root of all evil.

Law of Leaky Abstractions

All non-trivial abstractions, to some degree, are leaky.

Linus's Law

Given enough eyeballs, all bugs are shallow.

Lady Lovelace's Objection

The Analytical Engine has no pretensions to originate anything. It can do whatever we know how to order it to perform.

Moore's Law

The complexity for minimum component costs has increased at a rate of roughly a factor of two per year. Certainly over the short term this rate can be expected to continue, if not to increase. Over the longer term, the rate of increase is a bit more uncertain, although there is no reason to believe it will not remain nearly constant for at least 10 years.

Norvig's Law

Any technology that surpasses 50% penetration will never double again.

Parkinson's Law

Work expands so as to fill the time available for its completion.

Peter Principle

People in a hierarchy tend to rise to "a level of respective incompetence."

Postel's Law

Be conservative in what you send, liberal in what you accept.

Shirky principle

Institutions will try to preserve the problem to which they are the solution.

Wirth's Law

Software gets slower faster than hardware gets faster.

Zawinski's Law

Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.