Laws for Software Engineers

A collection of laws related to software engineering that are fun to know and work surprisingly well.

Software Engineering is not always fun and sometimes we face results we never except, but there exits a set of laws people came up with over time to answer these failures and patterns.

1. Amara's Law

We tend to overestimate the effect of a technology in the short run and underestimate the effect in the long run.

2. Brook's Law

Adding manpower to a late software project makes it later.

3. Conway's Law

Organizations design systems that mirror their own communication structure.

4. 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.

5. Gall's Law

A complex system that works is invariably found to have evolved from a simple system that worked.

6. Goodhart's Law

When a measure becomes a target, it ceases to be a good measure.

7. Hofstadter's law

It always takes longer than you expect, even when you take into account Hofstadter's Law.

8. Kerckhoffs's principle

A cryptographic system should be secure even if everything about the system, except the key, is public knowledge.

9. Knuth's optimization principle

Premature optimization is the root of all evil.

10. Linus's law

Given enough eyeballs, all bugs are shallow.

11. Moore's Law

The number of transistors in a dense integrated circuit doubles about every two years.

12. Murphy's law

Anything that can go wrong will go wrong.

13. Ninety-ninety rule

The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time.

14. Norvig's Law

Any technology that surpasses 50% penetration will never double again.

15. Pareto Principle

For many outcomes, roughly 80% of consequences come from 20% of causes.

16. Parkinson's Law

Work expands so as to fill the time available for its completion.

17. Postel's Law

Be conservative in what you do, be liberal in what you accept from others.

18. Peter principle

In a hierarchy, every employee tends to rise to his level of incompetence.

19. Price’s law

50% of the work is done by the square root of the total number of people who participate in the work.

20. (5) Laws of Software Estimates

Software estimates are waste, non-transferable, wrong, temporary and necessary.

21. Sturgeon's Law

Ninety percent of everything is crap.

22. Wirth's Law

Software is getting slower more rapidly than hardware is becoming faster.

Conclusion

These laws are collected from various sources and I learned a thing or two in the process. There are still some laws and principles I might have missed since I tried to avoid more technical one. While these are not absolute by any means, being aware of these helps us save ourselves from chaos sometimes.