- Plan for problems. Design each layer of an application to work independently and redundantly. Use distributed architecture patterns: load balancers, web farms, clustering, mirroring and read-only replicas to manage failure.
- To get a better understanding of how the application will function in the real world, view every decision as a trade-off between possibilities.
- Scale out rather than scaling up, adding resources dynamically in response to demand, which allows you to scale back in as well. Simply scaling up is costlier in terms of technology cost vs returns.
- Scale storage and not just servers; more of small, fast disks are better than fewer, larger disks.
- Be prepared to try multiple ideas in rapid succession if the first (several) does not work.
- Be prepared to rewrite even the core code as you scale.
Full post here, 5 mins read