[This was also cross-posted to the Tucows Developer Blog]
Inspired by Phil Haack’s article 19 Eponymous Laws of Software Development, I decided to collect laws, axioms and rules pertaining to mainstream software development and put them in a nice, easy-to-read table.
This is by no means a complete list of laws; I’ve purposely stuck to the ones that apply to everyday software development and steered clear of the more theoretical ones. Maybe I’ll compile a more complete list someday.
You’ll notice that some of the laws come from the world of biology — they also appear in some lists of software laws, and I think they still apply.
The Law | Who Said It | What it Says |
---|---|---|
Amdahl’s Law | Gene Amdahl | The speedup gained from running a program on a parallel computer is greatly limited by the fraction of that program that can’t be parallelized. |
Augustine’s Second Law of Socioscience | Norman Augustine | For every scientific (or engineering) action, there is an equal and opposite social reaction. |
Brooks’ Law | Fred Brooks | Adding manpower to a late software project makes it later. |
Clarke’s First Law | Arthur C. Clarke | When a distinguished but elderly scientist states that something is possible he is almost certainly right. When he states that something is impossible, he is very probably wrong. |
Clarke’s Second Law | Arthur C. Clarke | The only way of discovering the limits of the possible is to venture a little way past them into the impossible. |
Clarke’s Third Law | Arthur C. Clarke | Any sufficiently advanced technology is indistinguishable from magic. |
Conway’s Law | Melvin Conway | Any piece of software reflects the organizational structure that produced it. |
Cope’s Rule | Edward Drinker Cope | There is a general tendency toward size increase in evolution. |
Dilbert Principle | Scott Adams | The most ineffective workers are systematically moved to the place where they can do the least damage: management. |
Ellison’s Law of Cryptography and Usability | Carl Ellison | The userbase for strong cryptography declines by half with every additional keystroke or mouseclick required to make it work. |
Ellison’s Law of Data | Larry Ellison | Once the business data have been centralized and integrated, the value of the database is greater than the sum of the preexisting parts. |
The Law of False Alerts | George Spafford | As the rate of erroneous alerts increases, operator reliance, or belief, in subsequent warnings decreases. |
Fisher’s Fundamental Theorem | R. A. Fisher | The more highly adapted an organism becomes, the less adaptable it is to any new change. |
Fitts’ Law | Paul Fitts | The time to acquire a target is a function of the distance to and the size of the target. |
Flon’s Axiom | Lawrence Flon | There does not now, nor will there ever, exist a programming language in which it is the least bit hard to write bad programs. |
Gilder’s Law | George Gilder | Bandwidth grows at least three times faster than computer power. |
Godwin’s Law | Mike Godwin | As an online discussion grows longer, the probability of a comparison involving Nazis or Hitler approaches one. |
Grosch’s Law | Herb Grosch | The cost of computing systems increases as the square root of the computational power of the systems. |
Hartree’s Law | Douglas Hartree | Whatever the state of a project, the time a project-leader will estimate for completion is constant. |
Heisenbug Uncertainty Principle | Jim Gray | Most production software bugs are soft: they go away when you look at them. |
Hick’s Law | William Edmund Hick | The time to make a decision is a function of the possible choices he or she has. |
Hoare’s Law of Large Programs | C. A. R. Hoare | Inside every large problem is a small problem struggling to get out. |
Hofstadter’s Law | Douglas Hofstadter | A task always takes longer than you expect, even when you take into account Hofstadter’s Law. |
Jakob’s Law of the Internet User Experience | Jakob Nielsen | Users spend most of their time on other sites. This means that users prefer your site to work the same way as all the other sites they already know. |
Joy’s Law | Bill Joy | smart(employees) = log(employees), or “No matter who you are, most of the smartest people work for someone else.” |
Kerckhoffs’ Principle | Auguste Kerckhoffs | 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. |
Linus’ Law | Eric S. Raymond, who named it after Linus Torvalds | Given enough eyeballs, all bugs are shallow. |
Lister’s Law | Timothy Lister | People under time pressure don’t think faster. |
Metcalfe’s Law | Robert Metcalfe | In network theory, the value of a system grows as approximately the square of the number of users of the system. |
Moore’s Law | Gordon Moore | The number of transistors on an integrated circuit will double in about 18 months. |
Murphy’s Law | Captain Edward A. Murphy | If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it. |
Nathan’s First Law | Nathan Myhrvold | Software is a gas; it expands to fill its container. |
Ninety-ninety Law | Tom Cargill | The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time. |
Occam’s Razor | William of Occam | The explanation requiring the fewest assumptions is most likely to be correct. |
Osborn’s Law | Don Osborn | Variables won’t; constants aren’t. |
Postel’s Law (the second clause of the Robustness Principle) | Jon Postel | Be conservative in what you send, liberal in what you accept. |
Pareto Principle (a.k.a. “The 80-20 Rule”) | Suggested by Joseph Juran, named after Vilifredo Pareto | For many phenomena, 80% of consequences stem from 20% of the causes. |
Parkinson’s Law | C. Northcote Parkinson | Work expands so as to fill the time available for its completion. |
Pesticide Paradox | Bruce Beizer | Every method you use to prevent or find bugs leaves a residue of subtler bugs against which those methods are ineffectual. |
The Peter Principle | Laurence J. Peter | In a hierarchy, every employee tends to rise to his level of incompetence. |
Reed’s Law | David P. Reed | The utility of large networks, particularly social networks, scales exponentially with the size of the network. |
Rock’s Law | Arthur Rock | The cost of a semiconductor chip fabrication plant doubles every four years. |
Sixty-sixty Rule | Robert Glass | Sixty percent of software’s dollar is spent on maintenance, and sixty percent of that maintenance is enhancement. |
Spector’s Law | Lincoln Spector | The time it takes your favorite application to complete a given task doubles with each new revision. |
Spafford’s Adoption Rule | George Spafford | For just about any technology, be it an operating system, application or network, when a sufficient level of adoption is reached, that technology then becomes a threat vector. |
Sturgeon’s Revelation | Theodore Sturgeon | Ninety percent of everything is crud. |
Tesler’s Law of Conservation as Complexity | Larry Tesler | You cannot reduce the complexity of a given task beyond a certain point. Once you’ve reached that point, you can only shift the burden around. |
Weibull’s Power Law | Waloddi Weibull | The logarithm of failure rates increases linearly with the logarithm of age. |
Wirth’s Law | Niklaus Wirth | Software gets slower faster than hardware gets faster. |
Zawinski’s Law | Jamie Zawinski | Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can. |
121 replies on “Laws of Software Development”
Walch’s law of Blogging and Podcasting:
E=I^2 – Ego equals Influence squared
QrazyQat’s First Law: People referring to Occam’s Razor will usually say it completely wrong, just like you did.
Greenspun’s Tenth Rule seems appropriate here as well: “Every sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.”
In case any of you were wondering, the laws in this list that caught my interest the most were two that I hadn’t heard before:
Spafford’s Adoption Rule For just about any technology, be it an operating system, application or network, when a sufficient level of adoption is reached, that technology then becomes a threat vector.
Dr. Robert Lob’s Law:
Whatever message you are trying to convey, the listener will only hear what is relevant to their current thought process.
also known as Bob Lob Law
amdahl’s law is not only about parallel processing. it is a general statement about performance enhancement. also, unlike many of these laws, amdahl’s is a quantitative law with an equation and everything.
also, where is greenspun’s 10th rule of programming? “Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.”
I like Flon’s Axiom – very good to keep in mind before making generalizations about a programming language.
One of the most obvious ones is missing:
One thing is one thing, the other thing is completely another thing.
Love it! Esp. Joy’s Law!
~Mad Cow
Vierck’s Law: The half life of any developed software product, library, or tool is approximately 18 months.
http://www.mispedia.org/Vierck's_law.html
Two more laws from the days of yore:
1) Build a system that even a fool can use, and only a fool would want to use it.
2) Any program over 100 instructions can be simplified by 3 instructions (without losing any functionality).
-RDH
You forgot Niven’s laws:
#1 Never throw shit at an armed man
#2 Never stand next to someone throwing shit at an armed man
Larry Niven; great SF writer.
…Mike
Conway’s Law resonates with me. I’ve spent too much time working with a POS system that was 20 years out of date when it was first coded. I have recently discovered that it was coded to look just like the system that it was supposed to replace. Now, I know what your thinking, and this is an awful way to create software. But, I work in financial services so predictable results with minimal risk (read: standard deviation) over decades is actually a very good way for my company to operate.
wagen’s law: the desire to coin new laws exceeds the number of useful laws.
I once saw a “law” attributed to a system engineer regarding Windows Live Search and Microsoft’s attempting to build a system to rival google.
It went something like…
“You build a large system from small *working* systems, not from scratch.”
Later, I tried to find the source but couldn’t. Anyone recall hearing that before? If so, who was the source?
From Edge.org, Hurst’s Law: Any unbounded bitstream tends to irrelevance.…
Check the quote again on Hoare’s Law. It’s “program”, not “problem”.
O’Toole’s Commentary on Murphy’s Law
Murphy was an optimist.
@QrazyQat: In the chart, if a breezier paraphrasing the law exists, I used that instead. Hence, wherever possible, I linked the name of each law to a page that had a more technically correct description (including formulae, where applicable).
For the curious, Occam’s Razor is typically phrased in Latin as entia non sunt multiplicanda praeter necessitatem, which translated, means “Entities should not be multiplied beyond necessity”.
The same germ of thought that gave rise to Occam’s Razor also gave rise to Antoine de Saint-Exupery’s line:
@TJ: Some sources on the ‘net say “Program”, others say “Problem”. Although there is a fine distinction between a problem and a program in computer science (technically, a program is a solution), since Hoare is an academic, I thought that he’d be more likely to use the term “problem”.
I going to need to do more digging around to see which version of the quote is the correct one.
Scape’s Law:
What ever it is that hits the fan will not be distributed evenly.
B. Gehm’s corollary to Clarke’s Third Law.
“Any technology which is distinguishable from magic is insufficiently advanced.”
I always see the “ninety-ninety” law written this way, and it makes no sense:
“The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.”
It should be:
“The first 90% of the code accounts for the first 10% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.”
Or am I missing something?
Cole’s Law:
Thinly sliced cabbage
worth adding – Schneier’s Law (Bruce Schneier):
“Any person can invent a security system so clever that she or he can’t think of how to break it.”
http://en.wikipedia.org/wiki/Schneier's_Law
Murphy’s Lemma
Any disaster against which reasonable precautions have been taken will not happen. Eg. the mere presence of a fire extinguisher will prevent fires from starting.
The 9th law of unemployment
The less stimulating your life is the more interesting baseball becomes.
Really enjoyed the list – I don’t work in software or computers – but many of these are very true in the real world of manufacturing.
1) Since solutions could be said to be the dual of problems, an imaginative Haskeller may call programs “co-problems”.
2) I have a law of my own. It’s Bitwize’s Corollary to Greenspun’s Tenth Rule: “Any sufficiently complicated Common Lisp or Scheme program will eventually be rewritten in C++, Java, or Python.”
I prefer to translate Ockham’s Razor as “Do not unnecessarily multiply dependencies”.
This is not only a legitimate translation in context, which conveys the same meaning as yours, it also has direct application to system programming as well as general problem solving.
Your code is more reliable if you don’t insist on calling every known module on CPAN, and you don’t use callouts to /usr/bin and /sbin because you’re too lazy to bother figuring out how to write six extra lines of native code instead.
Back in my misspent and paranoiac youth, I coined a theory that goes:
Walter’s Theory Of Police:
If you are traveling by car and see a police patrol car, the odds of you seeing another police car before your trip is over goes up by some tangible amount. If you see a second police car, your odds of seeing a third police car before the end of your trip increase again.
==
I was never brash enough to call it a Law.
What Intel giveth Microsoft taketh away!
@Don: Or am I missing something?
Apparently, a sense of irony. (-:
Don’t forget Nurick’s Law of Creeping Features:
“Just because you can doesn’t mean you should.”
Don McArthur asks:
“Or am I missing something?”
A sense of humor?
http://en.wikipedia.org/wiki/List_of_adages_named_after_people
Publish your sources!
@Don:
Many people don’t catch that bit, but the law is “correct” as originally written. The “mistake” is actually a second gem hiding in the same law. Taking all of the cuteness out of the original phrasing, the law would become something like:
“The first 90% of the code takes 90% of the estimated development time. The last 10% of the code also takes 90% of the estimated development time. As a result, the actual development is nearly twice (180%) of the estimate.”
>“You build a large system from small *working* systems, not from scratch.”
>Later, I tried to find the source but couldn’t. Anyone recall hearing that before? If so, who was the source?
IIRC it was Gall in his excellent little book “Systemantics”.
http://www.amazon.com/Systemantics-Systems-Work-Especially-They/dp/0812906748
Norman’s Standard Estimate
It will take two weeks plus an extra two months for every meeting I have to attend about it.
@Jake: I did not know such a list existed on Wikipedia, so that list was not a source. Hence I didn’t link to it.
I don’t know who came up with this:
The success of a technology depends on how useful it is for money-making or porn.
After all those laws and comments with more laws I think it must be time for only one more.
Fabulous Furry Freak Brothers
Got a lot, smoke a lot. Got a little, smoke it all.
You forgot Furrygoat’s Law:
http://www.furrygoat.com/2005/05/furrygoats_law.html
“Every program attempts to expand until it can read RSS feeds.”
LeMel’s Law of Media Technology Maturity
A media technology is considered mature when it’s name stops being appended to the ends of the titles of content. (e.g., “Jaws 3D”)
Don’t know if he wrote it, but it was in “Computer Lib/Dream Machines” by Ted Nelson:
“Any idiot can learn to use computers, and many do”
Westheimer’s Law: To find out how long a program will actually take, double the estimate given by the programmer and change to the next higher unit. For example, if the estimate is two days, it will take four weeks.
I’m looking for the law that says:
87% of statistics are made up on the spot.
Any clue who’s law that is?
Hanlon’s Law: Never attribute to malice that which is adequately explained by stupidity.
I love this one :
In theory, there is no difference between theory and practice; In practice, there is.
— Chuck Reid
didn’t Harlan Ellison pen a corollary to Sturgeon’s Revelation to the effect of:
“…And 90% of what remains is crap, too.”
(i don’t imagine ellison ever said ‘crud’, and i wish i could find/recall the place where he wrote this… anyone with a better memory than me?)