This document discusses patterns and principles for distributed application design. It covers basic concepts like client-server and multitier architectures. It discusses scaling issues like load balancing and sharing of resources. It then describes evolving to a more service-oriented approach with independently deployable services behind an API gateway and using service discovery. It covers patterns for communication, data consistency using eventual consistency with event sourcing and CQRS, and ensuring high availability. The key aspects are to think about security, high availability, communication patterns, and leveraging data-oriented microservices with eventual consistency between command and query models.