Design principles:

  • Make the common easy, and make the uncommon possible.
  • Make it easy to use, and hard to abuse.
  • Do one job, and do it well.
  • Apply the Principle of Least Astonishment
  • Don't fix a performance problem that you don't have.
  • Today's unit tests are tomorrow's regression tests.