liveBook · Manning

Complexity

As explained in Bootstrapping Microservices, Second Edition: With Docker, Kubernetes, GitHub Actions, and Terraform

The difficulty of understanding, changing, operating, scaling, and coordinating the components and interactions of a software system.

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

Figure 2.2 Start simple and work up to complexity through a series of small iterations.

The diagram shows the development approach: begin simply and reach a more complex application through small iterations. section 2.4

How Bootstrapping Microservices, Second Edition: With Docker, Kubernetes, GitHub Actions, and Terraform covers it

How deep it goes
Explains architectural tradeoffs, service sizing, and incremental development without defining a numerical complexity measure.
Examples
Traces growth from one microservice through Docker and Docker Compose to a cloud deployment on Kubernetes.
What it assumes
Assumes version control for preserving iterations while introducing microservices, distributed applications, and monoliths.
What you can do after
Practice/perform complexity management by making small, recoverable changes and sizing services around domain concepts.
How it connects
Connects complexity to microservices, monoliths, domain-driven design, and iterative development.

Also explained in

Compare how 13 books explain complexity →

Related concepts

This explainer was generated by Manning's knowledge graph from the text of Bootstrapping Microservices, Second Edition: With Docker, Kubernetes, GitHub Actions, and Terraform. The section links point to the parts of the book it draws on.