• Choose the right tools for the job.
  • Make it right then make it fast.
  • Design to allow for scale, but don't optimize without measuring (prematurely).
  • Write performant code 'by accident' by maintaining good coding habits.
  • Don't make unilateral decisions.
  • Search for existing solutions, but do not adopt them blindly.
  • When the existing solutions are not truly solutions, adapt them or work with others to build new ones.
  • Open source anything you build that could be useful to others.
  • Build reusable tools, but recognize when something has to be application specific and don't try to generalize for the sake of it.
  • Know your tools, but never assume you know them
  • Read the source code. do not trust the docs, your assumptions, or your friends. read the source code.
  • Untested code is legacy code.
  • Undocumented code is legacy code.
  • Refactoring is critical for sustaining good software development; not an inconvenient past-time.
  • Programming languages are implementation details
  • Data stores are implementation details
  • Distributed systems are awesome, and an enormous pain in the ass.