(Keeping it Simple)
The first question to spring up after looking at the picture above could be,
Is there ever a perfect system?
No, not really, perfection is a figment of human imagination, it’s more like a goal that is achieved by someone. So, keeping goals in mind, a perfect system in a computer-development environment could be achieved. The goals of a system should match the requirements of the user, one cannot expect the performance of a Ferrari from a Ford Fiesta.
A system is designed considering all the consumer requirements, people play an important role in the development cycle.
Computer System Design Principles
- Use the KISS rule and adopt sweeping simplifications to see what is being done on your system, moreover to see what you’re doing. A design should be scalable but changing a parameter by a factor of ten requires a new design. Change a module, not the modularity. The less there is, the more likely you will get it right.
- Escalating complexity principle : Complex systems fail for complex reasons. Adding a feature increases complexity out of proportion.
- Safety margin principle : Keep track of the distance to the edge of the cliff or you may fall over the edge.
- Avoid excessive generality, be explicit : A system should be designed keeping in mind all assumptions are on the table.
- Open design principle : Let anyone comment on the design; you need all the help you can get, as long as it does not interfere with your system anonymity (if any).
- Design for iteration : because you won’t get it right the first time, so make it easy to change. Avoid rarely used components
- Principle of least astonishment : Choose interfaces that match the user’s experience, expectations, and mental models. People are part of the system.
- Atomicity : Golden rule of atomicity, Never modify the only copy!
- Coordination : One-writer principle, if each variable has only one writer, coordination is simpler.
- Durability : The durability mantra, Multiple copies, widely separated and independently administered.
- Security : Minimize secrets, because they probably won’t remain secret for long. Also, Check every operation for authenticity, integrity, and authorization
- Fail-safe defaults : Most users won’t change them, so set defaults to do something safe.