• Write unit tests to save you from regression bugs. Unit tests also force you to write code that is less tightly coupled and more logically factored.
  • Keep coupling to a minimum.
  • Apply the Principle of Least Astonishment - design components of your system in a way that they behave how people using your system expect them to behave.
  • Minimise cyclomatic complexity - number of independent paths through a given piece of code.
  • Write clear, unambiguous, self-explanatory names to minimise confusion.

Full post here, 6 mins read