I’ve been reading about Software Architecture these days and I’ve found a book which I heartily recommend called The Art of Scalability and I want to share the twelve architectural principles that every software architect must be aware of when designing software solutions.
1. N+1 Design. Never less than two of anything, and remember the rule of three.
2. Design for Rollback. Ensure you can roll back any release of functionality.
3. Design to Be Disabled. Be able to turn off anything you release.
4. Design to Be Monitored. Think about monitoring during design, not after.
5. Design for Multiple Live Sites. Don’t box yourself into one-site solutions.
6. Use Mature Technologies. Use things you know work well.
7. Asynchronous Design. Communicate synchronously only when absolutely necessary.
8. Stateless Systems. Use state only when the business return justifies it.
9. Scale Out Not Up. Never rely on bigger, faster systems.
10.Design for at Least Two Axes. Think one step ahead of your scale needs.
11. Buy When Non Core. If you aren’t the best at building it and it doesn’t offer competitive differentiation, buy it.
12. Commodity Hardware. Cheaper is better most of the time.