Here's my take on timeless system design principles that every Architect and Software Engineer should know.
Conway's law is one of the most insightful theories on how organizational structure influences product and system design.
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure
— Melvin E. Conway
"Product errors reflect Organizational Errors" - Elon Musk (interview with Tim Dodd ) https://youtu.be/cIQ36Kt7UVg
Boundaries and communication structures of teams often translate into design choices, interfaces, and assumptions. Usually, product design and organizations act as a positive feedback loop, and it's hard to distinguish which leads to what.
Metcalfe law explains network effects and behavior of the connected systems, including social media.
Many product designs, adoption, and social design of applications revolve around the Network Effect.
CAP theorem suggests design tradeoffs in a distributed system. In a nutshell, CAP theorem says, You can only have two of the following
- Partition tolerance
A simple approach to reason with CAP theorem is to consider two partitions( x & y ) on two nodes. If we write to one of the partitions (x), that will cause the node(y) to be inconsistent, resulting in loss of Consistency. If both x and y were to remain consistent, then partition (y) will have to act as if it's not available, leading to the loss of Availability.
PARCELS theorem is an extension of CAP theorem and suggests even in the absence of partitions; an additional tradeoff exists with Latency and Consistency
Here's an excellent overview of both CAP and PACELC theorem link.
Postel's Law (Robustness Principle)
The robustness principle, also known as Postel's law, is named after Jon Postel, who worked on TCP specifications. Postel's law can be summarized as follows.
"Be conservative in what you send, be liberal in what you accept."
Programs that send messages to other programs/systems should conform to specifications. Programs that receive messages from other systems should accept non-conformant input as long as they can disambiguate. In short, this philosophy of being stringent on what you send and considerate of what others send you is how the internet still works and has been able to accommodate a variety of endpoint devices.
These are overarching design principles , if you want a good primer on more practical system design principles and approach check out these links bellow.