Microservices
Microservices only pay for their complexity when a few fundamentals are solid. These notes cover the aspects that decide whether you get independence — or a distributed monolith.
Topics
- Service boundaries
Why clear service boundaries are the most important part of microservices — and how to draw them without building a distributed monolith.
- Data ownership
Why each service must own its data — and why shared databases quietly undo microservice independence.
- Sync vs async communication
When to call another service and when to publish an event — and how chatty APIs recreate the monolith over the network.
- Consistency and sagas
How to keep business invariants correct across services without distributed transactions — outbox, idempotency, and compensating workflows.
- Resilience and failure
Timeouts, retries, backoff, bulkheads, and circuit breakers — designing so one slow dependency does not take down the platform.
- Security
Zero-trust between services, identity, authorization, secrets, and protecting data in a distributed system — what seniors must own beyond the perimeter.
- Contracts and versioning
How to evolve APIs and events without lockstep releases — compatibility, consumer-driven expectations, and deprecation discipline.
- Observability
Logs, metrics, and traces across service boundaries — correlation, SLOs, and debugging distributed failures without guessing.
- Deployability and testing
Shipping services independently — contract tests, environments, progressive delivery, and what “done” means when the system is distributed.