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.
|Who Said It
|What it Says
|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
|For every scientific (or engineering) action, there is an equal and opposite social reaction.
|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.
|Any piece of software reflects the organizational structure that produced it.
|Edward Drinker Cope
|There is a general tendency toward size increase in evolution.
|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
|The userbase for strong cryptography declines by half with every additional keystroke or mouseclick required to make it work.
|Ellison’s Law of Data
|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
|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.
|The time to acquire a target is a function of the distance to and the size of the target.
|There does not now, nor will there ever, exist a programming language in which it is the least bit hard to write bad programs.
|Bandwidth grows at least three times faster than computer power.
|As an online discussion grows longer, the probability of a comparison involving Nazis or Hitler approaches one.
|The cost of computing systems increases as the square root of the computational power of the systems.
|Whatever the state of a project, the time a project-leader will estimate for completion is constant.
|Heisenbug Uncertainty Principle
|Most production software bugs are soft: they go away when you look at them.
|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.
|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
|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.
|smart(employees) = log(employees), or “No matter who you are, most of the smartest people work for someone else.”
|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.
|Eric S. Raymond, who named it after Linus Torvalds
|Given enough eyeballs, all bugs are shallow.
|People under time pressure don’t think faster.
|In network theory, the value of a system grows as approximately the square of the number of users of the system.
|The number of transistors on an integrated circuit will double in about 18 months.
|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
|Software is a gas; it expands to fill its container.
|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.
|William of Occam
|The explanation requiring the fewest assumptions is most likely to be correct.
|Variables won’t; constants aren’t.
|Postel’s Law (the second clause of the Robustness Principle)
|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.
|C. Northcote Parkinson
|Work expands so as to fill the time available for its completion.
|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.
|David P. Reed
|The utility of large networks, particularly social networks, scales exponentially with the size of the network.
|The cost of a semiconductor chip fabrication plant doubles every four years.
|Sixty percent of software’s dollar is spent on maintenance, and sixty percent of that maintenance is enhancement.
|The time it takes your favorite application to complete a given task doubles with each new revision.
|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.
|Ninety percent of everything is crud.
|Tesler’s Law of Conservation as Complexity
|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
|The logarithm of failure rates increases linearly with the logarithm of age.
|Software gets slower faster than hardware gets faster.
|Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.