Skip to main content

Microservices

Microservices are an architectural style in which an application consists of many small, business-aligned services. Each service is developed, deployed and scaled independently and communicates with the others via defined interfaces. Microservices increase flexibility and scalability — at the price of significantly higher operational complexity.

Characteristics of a microservices architecture

  • Business-aligned decomposition: The services follow business domains — in the sense of domain-driven design (DDD) and bounded contexts — not technical layers.
  • Own data ownership: Each service owns its data; other services access it only via interfaces.
  • Independent deployment: Each service can be released individually — typically as a container (Docker) on an orchestration platform (Kubernetes) with automated CI/CD pipelines.
  • Communication via APIs and events: synchronously via REST or gRPC, asynchronously via event streams (such as Kafka).
  • Team autonomy: Small teams own their services end-to-end — from development to operations.

Microservices vs. monolith: the honest trade-offs

CriterionMonolithMicroservices
Deploymentone artifact — every change is a full releaseservices can be released individually, short release cycles
Scalingonly as a wholetargeted per service, according to actual load
Team organizationcoordination on shared code requiredautonomous teams with clear service boundaries
Consistency & transactionssimple — one database, local transactionsdistributed data, eventual consistency, complex error handling
Operations & debuggingmanageabledistributed system: observability, network latency, new failure patterns
Entry costslowhigh — container platform, automation and monitoring are prerequisites

The table shows: microservices trade development and scaling flexibility for operational complexity. Those who do not have the necessary infrastructure or do not want to build it get the disadvantages without the advantages.

Microservices in legacy modernization

A common use case is the incremental untangling of grown monoliths — for example from outdated Java EE (EJB), C++ or .NET Framework — into cloud-native architectures. The strangler fig pattern has proven itself here: the new system grows around the old one and replaces it function by function, without a risky big bang; already migrated services deliver value immediately.

The most important pitfall is the wrong decomposition: those who split the monolith along technical rather than business boundaries end up with a distributed monolith — separately deployed but tightly coupled services, where every change affects several services. The domain decomposition is therefore the actual architectural work, not the technology.

Microservices in practice: when the monolith is the better choice

Microservices pay off when individual functions need to scale independently, many teams work in parallel or different release cycles justify the additional effort. For small teams and manageable domains, a well-structured, modular monolith is often the more economical choice — and with cleanly drawn module boundaries, later decomposition remains possible. In our experience, the right question is not “monolith or microservices?”, but: where do the business boundaries run — and which of them really need independent deployments?

Frequently asked questions

How big should a microservice be?
Size is not measured in lines of code but by the business boundary: a service should represent a delimited business context (bounded context) — small enough for one team to own it end-to-end, and large enough that closely related business logic is not artificially cut apart.
Are microservices always better than a monolith?
No. Microservices trade development and scaling flexibility for significantly higher operational complexity. For small teams and manageable domains, a well-structured, modular monolith is often the more economical choice — it can still be decomposed later if the module boundaries are drawn cleanly.
What is a distributed monolith?
The most common failure pattern of a microservices migration: the services are deployed separately, but are so tightly coupled in business terms that every change affects several services at once. This combines the disadvantages of both worlds — the operational complexity of a distributed system without the independence of real microservices. The cause is almost always a wrong business decomposition.

Related terms

Reviewed by Holger Schill, Executive Vice President Cloud & Enterprise on July 20, 2026