Purpose
Think about the purpose of the software you write, it should be helping somebody.
We should design systems that can be easily maintained so that they can continue to be as helpful as possible.
Simplicity
We should struggle to design our software the simplest possible way. Aim for helping others understand the software.
Resist (unnecessary) change. Control complexity, do not create it. The desirability of a change matches its value divided by its required implementation effort.
Consistency
Do not keep forcing others to relearn the way the system works.
Planning
Do not solve a big problem, divide it in small ones.
Think before acting.
Perfection is the enemy of good.
Be only as generic as you need right now. Code should be designed based on what you know now.
Productivity
Keep your code base as small as possible.
Testing
Test everything.
Commenting
The real purpose of comments is to explain why, not to explain what.
Teams
Ask for help.