System Design Space
Knowledge graphSettings

Updated: March 25, 2026 at 1:00 AM

Why microservices and integration are needed

easy

Introductory chapter: service integration, DDD, APIs and architectural boundaries.

Microservices are useful not as an architectural status symbol, but as a way to align domain boundaries, team structure, and responsibility.

In real design work, the chapter shows that the choice between a monolith, a modular monolith, and services starts with boundaries, contracts, latency, and integration cost rather than with transport or platform choice.

In interviews and engineering discussions, it gives the right language for talking about coupling, blast radius, degradation paths, and schema drift before the first RPC call even exists.

Practical value of this chapter

Design in practice

Define service boundaries and interface ownership before selecting concrete tooling.

Decision quality

Compare integration options by coupling, latency, blast radius, and operating effort.

Interview articulation

Use a clear chain: context, contract, failure risks, and evolution path.

Failure framing

Design degradation up front for network splits, timeout cascades, and schema drift.

Context

Building Microservices

A foundational practical source on service boundaries, integration and architecture evolution.

Читать обзор

The Microservices and Integration section helps you design distributed systems as a coherent set of services rather than an accidental dependency graph. In practice, microservice success is defined not by service count, but by boundary quality, contract discipline and integration decisions.

This chapter connects System Design with production consequences: choosing interaction models, managing API lifecycle and reducing cascading-failure risk in evolving platforms.

Why this section matters

Integration defines the real complexity of distributed systems

In practice, most incidents happen at service boundaries: contracts, retries, timeouts and compatibility during change rollout.

Microservices need explicit boundaries to work

Without bounded contexts and clear ownership, microservices quickly degrade into a distributed monolith with high coupling.

Communication model selection drives architectural trade-offs

Choosing sync vs async impacts latency, consistency, debugging effort and long-term operational cost.

API contracts define delivery speed

Versioning policy, backward compatibility and API lifecycle discipline are mandatory for independent team releases.

This competence is mandatory for senior system design

In interviews and production work, engineers are expected to justify service boundaries and integration choices via explicit risks and constraints.

How to go through microservices and integration step by step

Step 1

Define domain boundaries and ownership first

Start from business context: bounded contexts, data ownership, team responsibilities and change boundaries.

Step 2

Select interaction model per user and system flow

Split use cases into sync and async paths based on latency, consistency and acceptable degradation requirements.

Step 3

Lock API contracts and evolution rules

Define schema/versioning policy, backward compatibility, idempotency requirements and partial-failure behavior.

Step 4

Design reliability into integration pathways

Treat timeout, retry, circuit breaker, DLQ and observability signals as first-class integration design controls.

Step 5

Operationalize governance and feedback loops

Establish API reviews, contract testing, changelog discipline and integration quality metrics across teams.

Key integration trade-offs

Sync simplicity vs async resilience

Synchronous calls are easier to reason about, while asynchronous models often provide better resilience under dependency failures.

Shared database convenience vs service autonomy

Shared data stores speed up early delivery, but increase coupling; separated ownership improves autonomy at higher integration complexity.

Strong consistency vs availability and velocity

The stricter the consistency guarantee, the higher the latency cost and the lower the flexibility of independent scaling.

Central integration platform vs team autonomy

A central platform improves consistency but requires mature self-service capabilities, transparent SLAs and clear contracts.

What this section covers

Service boundaries and decomposition

Decomposition strategies, DDD principles and migration from monolith to microservices.

Integration and API operations

Communication patterns, API lifecycle management and resilient inter-service integration practices.

How to apply this in practice

Common pitfalls

Decomposing by technical layers instead of business capabilities and bounded contexts.
Using sync calls everywhere without resilience controls at service boundaries.
Ignoring API lifecycle management: versioning, backward compatibility and contract testing.
Treating shared database ownership as a permanent architecture decision rather than a transitional migration state.

Recommendations

Define service boundaries through domain ownership and change frequency, not org chart or code package layout.
Separate sync and async use cases explicitly and document expected behavior under dependency degradation.
Embed contract testing, schema governance and changelog discipline into CI/CD pipelines.
Capture integration trade-offs in ADRs: consistency level, latency impact, operational complexity and platform cost.

Section materials

Where to go next

Lock boundaries and contracts first

Start with Decomposition Strategies and Learning DDD, then continue with Building Microservices to establish durable service boundaries.

Strengthen integration delivery discipline

Move next to Inter-service Communication, EIP and Continuous API Management to systematize API evolution and interaction reliability.

Related chapters

Enable tracking in Settings