Software complexity grows as an application gains features, customers, and teams. Microservices can help manage that growth by dividing an application into services with firm boundaries. They also make the system harder to build at first than an equivalent monolith. The practical question is not how to eliminate complexity, but when and how to take it on. section 1.0 section 1.10.4
Keep complexity manageable at two levels:
- Size services around domain concepts, not a goal of making every service as small as possible. Services that are too small need more communication and can increase overall system complexity. section 1.14.5
- Start with working code and make small, tested changes. Preserve each iteration in version control so a failed change is easy to reverse; introduce tools and patterns as the application needs them. section 2.4
Grow from one service
A practical progression starts with one microservice, packages it with Docker, runs multiple services locally with Docker Compose, and eventually deploys them to Kubernetes in the cloud. Each stage adds capabilities—and complexity—when they become useful. section 12.9
The diagram shows the development approach: begin simply and reach a more complex application through small iterations. section 2.4












