Browse engineering laws

30 principles — full text on each page (crawlable HTML, no JS required).

  1. Conway's Law — Organizations design systems that mirror their own communication structure.
  2. Brooks's Law — Adding manpower to a late software project makes it later.
  3. CAP Theorem — A distributed system can only guarantee two of three: Consistency, Availability, Partition Tolerance.
  4. YAGNI — You Aren't Gonna Need It — don't build features until they are actually needed.
  5. KISS Principle — Keep It Simple, Stupid — most systems work best when kept simple.
  6. DRY Principle — Don't Repeat Yourself — every piece of knowledge should have a single, authoritative representation.
  7. Pareto Principle — Roughly 80% of effects come from 20% of causes.
  8. Lehman's Laws of Software Evolution — Programs that are used must be continually adapted or they become progressively less satisfactory.
  9. Goodhart's Law — When a measure becomes a target, it ceases to be a good measure.
  10. Occam's Razor — The simplest explanation is usually the correct one.
  11. Premature Optimization — Premature optimization is the root of all evil.
  12. Dunning-Kruger Effect — Unskilled individuals overestimate their ability; experts underestimate theirs.
  13. Hofstadter's Law — It always takes longer than you expect, even when you take into account Hofstadter's Law.
  14. The Ninety-Ninety Rule — The first 90% of the code accounts for the first 90% of development time. The remaining 10% accounts for the other 90%.
  15. Peter Principle — People in a hierarchy tend to rise to their level of incompetence.
  16. Gall's Law — A complex system that works evolved from a simple system that worked.
  17. Linus's Law — Given enough eyeballs, all bugs are shallow.
  18. Murphy's Law — Anything that can go wrong will go wrong.
  19. Hanlon's Razor — Never attribute to malice that which is adequately explained by stupidity.
  20. Hyrum's Law — With enough users, every observable behavior of your system will be depended upon by somebody.
  21. Law of Demeter — A module should only talk to its immediate friends, not to strangers.
  22. Robustness Principle — Be conservative in what you send, be liberal in what you accept.
  23. Fallacies of Distributed Computing — Eight false assumptions that programmers new to distributed systems commonly make.
  24. Amdahl's Law — The speedup from parallelization is limited by the sequential portion of the task.
  25. Knuth's Optimization Principle — Measure before you optimize — programmers spend time optimizing non-critical code.
  26. Inverse Conway Maneuver — Structure your teams to produce the system architecture you want.
  27. Broken Windows Theory — Neglecting small issues leads to a culture of neglect and larger problems.
  28. Boy Scout Rule — Always leave the code cleaner than you found it.
  29. Kerchkhoff's Principle — A cryptographic system should be secure even if everything about the system is public knowledge, except the key.
  30. Parkinson's Law — Work expands to fill the time available for its completion.

← DevLaws home