- Keep it simple – complexity will come naturally over time.
- Automate everything, including failure recovery.
- Iterate your solutions – be prepared to throw away a working component when you want to scale it up to the next level.
- Use the right tool for the job, but don’t be afraid to roll your own solution.
- Use caching, where appropriate.
- Know when to favor data consistency over data availability, and vice versa.