Have you ever been in a conversation where somebody ends an argument with something like “But as we all know this will never work because of Conway’s Law”? And even worse, have you found yourself thoughtfully nodding even though you are not 100% sure what Conway’s Law exactly says?
I for one admit to have been in such a situation so I thought of noting down some of the laws, principles, theories or what have you, I often hear referenced in software development discussions. I included only the definitions and leave it up to the readers to look deeper into each one of them.
Organizations which design systems… are constrained to produce designs which are copies of the communication structures of these organizations.
Entities should not be multiplied without necessity.
Often paraphrased as:
The simplest solution is most likely the right one.
The problem of determining, from a description of an arbitrary computer program and an input, whether the program will finish running, or continue to run forever.
Adding human resources to a late software project makes it later.
A methodology for identifying the most important limiting factor (i.e. constraint) that stands in the way of achieving a goal and then systematically improving that constraint until it is no longer the limiting factor. In manufacturing, the constraint is often referred to as a bottleneck.
For many events, roughly 80% of the effects come from 20% of the causes.
Assuming that specific conditions are more probable than a single general one.
This list is far from being complete, so any suggestions to enrich it are more than welcome.
Just quoting some of this wisdom won’t get us very far. But maybe by taking another look to the truths we use, we can apply them better in the future.