So you can see what you are doing.
If it is good for everything, it is good for nothing.
Deterioration and corruption accumulate unnoticed—until the next use.
Get all of the assumptions out on the table.
Indirection supports replaceability.
You won't get it right the first time, so make it easy to change.
The application knows best.
Adding a feature increases complexity out of proportion.
Changing a parameter by a factor of ten requires a new design.
Complex systems fail for complex reasons.
The more one improves some measure of goodness, the more effort the next improvement will require.
Let anyone comment on the design; you need all the help you can get.
People are part of the system. Choose interfaces that match the user’s experience, expectations, and mental models.
Be tolerant of inputs, strict on outputs.
Keep track of the distance to the edge of the cliff or you may fall over the edge.
It is easier to change a module than to change the modularity.