Principles, Laws, and Razors in Software Engineering
A living list of principles tangential to software development, human behavior, project management, and system design.
Hanlon's Razor: Never attribute to malice that which is adequately explained by stupidity.
Dunning-Kruger Effect: Unskilled individuals tend to overestimate their ability, while experts tend to underestimate their own.
Ostrich Effect: The tendency to avoid or ignore negative information.
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.
Ringelmann Effect: Individual members of a group tend to become less productive as the size of their group increases.
Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law.
Brooks's Law: Adding manpower to a late software project makes it later.
Parkinson's Law: Work expands so as to fill the time available for its completion.
Ninety-Ninety Rule: The first 90% of the code takes 90% of the time. The remaining 10% takes the other 90% of the time.
Conway's Law: Organizations design systems that mirror their own communication structure.
Gall's Law: A complex system that works is invariably found to have evolved from a simple system that worked.
Occam's Razor: Entities should not be multiplied beyond necessity.
Hyrum's Law: All observable behaviors of your system will be depended on by somebody.
Sturgeon's Law: Ninety percent of everything is crap.
Pareto Principle: Roughly 80% of the effects come from 20% of the causes.
Goodhart's Law: When a measure becomes a target, it ceases to be a good measure.
Price's Law: 50% of the work is done by the square root of the total number of people who participate in the work.
Murphy's Law: Anything that can go wrong will go wrong.
Mosher's Law: Don't worry if it doesn't work right. If everything did, you'd be out of a job.
Law of Demos: In general, when something is being demonstrated, it will fail.
Postel's Law (Robustness Principle): Be conservative in what you do, be liberal in what you accept from others.
Tesler's Law: Every application has an inherent amount of complexity that cannot be removed or hidden.
Linus's Law: Given enough eyeballs, all bugs are shallow.
The Peter Principle: In a hierarchy, every employee tends to rise to their level of incompetence.
Chesterton's Fence: Do not remove a fence until you know why it was put up in the first place.
The Boy Scout Rule: Always leave the code better than you found it.
Single Responsibility Principle: A class should have one, and only one, reason to change.
Amara's Law: We tend to overestimate the effect of a technology in the short run and underestimate the effect in the long run.
Sayre's Law: In any dispute the intensity of feeling is inversely proportional to the value of the issues at stake.
Law of Triviality (Bikeshedding): Members of an organization give disproportionate weight to trivial issues.
< TODO: add more here >