Principles
The laws we keep relearning
Every engineer can quote a few of these. Fewer have watched one play out in production. Here they are, with the articles that put them to the test, and the debates they start.
The laws
01 #conways-law
Conway's law
“Organizations design systems that mirror their own communication structure.”
02 #hyrums-law
Hyrum's law
“With enough users of an API, every observable behavior of your system will be depended on by somebody.”
03 #galls-law
Gall's law
“A complex system that works is invariably found to have evolved from a simple system that worked.”
04 #brooks-law
Brooks's law
“Adding people to a late software project makes it later.”
05 #premature-optimization
Premature optimization
“Premature optimization is the root of all evil (or at least most of it) in programming.”
06 #kernighans-law
Kernighan's law
“Debugging is twice as hard as writing the code. So if you write it as cleverly as you can, you are not smart enough to debug it.”
07 #postels-law
Postel's law
“Be conservative in what you send, and liberal in what you accept.”
08 #goodharts-law
Goodhart's law
“When a measure becomes a target, it ceases to be a good measure.”
09 #littles-law
Little's law
“The average number of requests in a system equals their arrival rate times the average time each one spends inside (L = λW).”
10 #amdahls-law
Amdahl's law
“The speedup from running in parallel is limited by the part of the work that must stay sequential.”
11 #cap-theorem
The CAP theorem
“When the network partitions, a distributed data store has to choose between consistency and availability.”
12 #distributed-fallacies
The fallacies of distributed computing
“The network is reliable, latency is zero, bandwidth is infinite… and every one of these assumptions is false.”
13 #law-of-demeter
The law of Demeter
“A unit should talk only to its immediate collaborators, not to their collaborators.”
14 #hofstadters-law
Hofstadter's law
“It always takes longer than you expect, even when you take into account Hofstadter's law.”