The short checklist
- Gather system requirements.
- Estimate capacity and constraints.
- Choose desirable system attributes.
- Break down the system layers.
- Identify bottlenecks and Single Points Of Failure.
- Think about handling failure (network, database, server failures).
- Consider trade-offs for each system layer.