Follow these design principles to make your application more scalable, resilient, and manageable.
- Design for self healing. In a distributed system, failures happen. Design your application to be self healing when failures occur.
- Make all things redundant. Build redundancy into your application, to avoid having single points of failure.
- Minimize coordination. Minimize coordination between application services to achieve scalability.
- Design to scale out. Design your application so that it can scale horizontally, adding or removing new instances as demand requires.
- Partition around limits. Use partitioning to work around database, network, and compute limits.
- Design for operations. Design your application so that the operations team has the tools they need.
- Use managed services. When possible, use platform as a service (PaaS) rather than infrastructure as a service (IaaS).
- Use an identity service. Use an identity as a service (IDaaS) platform instead of building or operating your own.
- Use the best data store for the job. Pick the storage technology that is the best fit for your data and how it will be used.
- Design for evolution. All successful applications change over time. An evolutionary design is key for continuous innovation.
- Build for the needs of business. Every design decision must be justified by a business requirement.