Categories
Uncategorized

Laws of Software Development

Moses wielding a cell phone

[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”

[…] muitas outras leis e corolários relacionados ao software [1][2]. Tomeis as 10 que são mais genéricas e com as quais me deparo todos os dias. Existem muitas […]

Joey,

This list of software development laws is really something.
I was browsing for information on this kind of list and found yours. Really help a lot here.

Thanks man!

Leave a Reply

Your email address will not be published. Required fields are marked *