While browsing inside some old repository of mine I stumbled upon this little set of principles. Of course, I could not resist but to publish them here.
This set of principles was established by two of the creators of the X Windowing system. Much before Mac or Windows. Much, much before. And today (I dare to think) this little set stands out as a real gem of architectural principles.
- Do not add new functionality unless an implementer cannot complete a real application without it.
- This principle was modified during the design of X version 11 (X11) to: “Do not add new functionality unless you know of some real application that will require it.”
- It is as important to decide what a system is not as to decide what it is. Do not serve all the world’s needs; rather, make the system extensible so that additional needs can be met in an upwardly compatible fashion.
- The only thing worse than generalizing from one example is generalizing from no examples at all.
- If a problem is not completely understood, it is probably best to provide no solution at all.
- If you can get 90 percent of the desired effect for 10 percent of the work, use the simpler solution. (See also Worse is better.)
- Isolate complexity as much as possible.
- Provide mechanism rather than policy. In particular, place user interface policy in the clients’ hands.
Do I need to elaborate on these more ?
(PS: for a good introduction into the X11 Windowing system one can start here: http://en.wikipedia.org/wiki/X_Window_System )