Make each part do one thing well.
Use simple parts connected by simple interfaces.
Parts should be designed for testing.
Clarity beats cleverness.
Lean on data so algorithms can be simple.
Introduce complexity only when necessary.
Keep concerns separated.
Optimize finally when the design and the designer have matured.
Never hide failures.
Design so your work can be swapped out for better work.
Inspired from [Basics of the Unix Philosophy].