Some principles I was told about at work today.
Principle of least astonishment
A typical formulation of the principle is: “If a necessary feature has a high astonishment factor, it may be necessary to redesign the feature.”
Single responsibility principle
The single responsibility principle states that every module or class should have responsibility over a single part of the functionality provided by the software, and that responsibility should be entirely encapsulated by the class. All its services should be narrowly aligned with that responsibility.
Separation of concerns
Separation of concerns is an important design principle in many other areas as well, such as urban planning, architecture and information design. The goal is to more effectively understand, design, and manage complex interdependent systems, so that functions can be reused, optimized independently of other functions, and insulated from the potential failure of other functions.