These are some of my thoughts on what modern software development should take into account - or at least somewhat good development.
So what are laws and why do we need them? Since the beginning of time all societies, cultures and religions have had some form of law, those that did not, ceased to exist. They provide a moral compass, a shining light to keep people on a common path.
There are however many laws and many interpretations of those laws, many are in direct contradiction of each other. In the US eggs must be washed before sale and refrigerated, those same eggs would be illegal in the EU where washing is banned.
The 7+1 laws presented below are universal and have been distilled from decades of research, experience and failure in the software development world by the giants. They apply to all software development irrespective of scale, domain and technology.
|Agile||Failure is inevitable, plan for it, do it quickly, and most importantly learn from it.|
|Conways Law||organizations which design systems … are constrained to produce designs which are copies of the communication structures of these organizations|
|Brook’s Law||Adding more people to a late project, makes it later|
|Kernighan’s Lever||Debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?|
|The Cone of Uncertainty||You won’t know how long it will take until it’s complete.|
|Dijkstra’s Law||Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better.|
|Theory of Constraints||An organisation can only be as agile as it’s least agile department|
The 8th and arguable most important law of all deserves a section all on it’s own - Keeping things simple.
A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system. – John Gall
Any intelligent fool can make things bigger and more complex… It takes a touch of genius - and a lot of courage to move in the opposite direction. - E. F. Schumacher
It seems that perfection is attained, not when there is nothing more to add, but when there is nothing more to take away. - Antoine de Saint Exupéry
Economic Complexity: AWS re:Invent 2017: Models of Availability (ARC321) - State - Relationships - Uncertaintity - Irreversability