← Back to catalog
Engineer-to-Architect and Durable Thinking Skills

Designing Microservices Architectures

Level: Practitioner2 daysVirtual / In-personDraft

Design microservices well: service boundaries, communication, data, and the tradeoffs versus a monolith.

Overview

Microservices promise independent deployment, team autonomy, and scale, and they can deliver all three. They also turn every function call into a network call, every transaction into a distributed problem, and every deployment into an operational discipline. Most microservices failures are not technology failures; they are boundary failures, made by teams that split a system before understanding it.

This is a hands-on, practitioner course. It starts with the honest question most courses skip: whether you need microservices at all, and what a well-structured monolith gives up by comparison. From there it follows the gradient of decisions a designer actually faces: where to draw service boundaries, how services should communicate, how to manage data without shared databases, and how to keep a distributed system observable and resilient. We deliberately go deep on boundaries, communication, and data rather than surveying every tool in the ecosystem. Every module ends with a design lab, and each module builds on the one before, carrying one system through the whole course.

Who Should Attend

  • Developers and technical leads designing or evolving service-based systems
  • Architects deciding whether and how to decompose a monolith
  • Engineers joining a microservices effort who want to understand the design decisions behind it

Learners who want a broader grounding in architecture first should take Fundamentals of Software Architecture.

Prerequisites

  • Solid experience building server-side applications
  • Familiarity with REST APIs and basic distributed concepts
  • Comfort reading and discussing system diagrams

What You Will Learn

  • Judge when microservices are worth their cost, and argue the monolith case honestly
  • Identify service boundaries using domain analysis and coupling criteria
  • Design inter-service communication, choosing between synchronous and event-driven styles
  • Design data ownership per service and handle transactions and queries that span services
  • Apply resilience patterns so one failing service does not take down the system
  • Plan an incremental migration from a monolith without a risky rewrite

Course Outline

Day one: should you, and where to cut

  • The Microservices Tradeoff
    • What microservices actually buy you: deployability, team autonomy, targeted scale
    • What they cost: distribution, operational load, and eventual consistency
    • The modular monolith as a serious alternative, not a consolation prize
    • Lab: given a case-study system and its constraints, argue for or against microservices and defend it
  • Finding Service Boundaries
    • Decomposing by business capability and by subdomain
    • Bounded contexts as boundary candidates, and where DDD helps
    • Granularity: the forces that push services apart and the forces that pull them together
    • Lab: draw service boundaries for the case-study system and justify each cut
  • Communication Between Services
    • Synchronous calls: REST and gRPC, and the coupling they create
    • Asynchronous messaging and events: decoupling at the price of complexity
    • Contracts, versioning, and not breaking your consumers
    • Lab: design the communication style for each interaction in your boundary map, with stated reasons

Day two: data, resilience, and getting there

  • Data in a Distributed World
    • Database per service: why shared databases quietly recreate the monolith
    • Sagas and eventual consistency in place of distributed transactions
    • Queries that cross services: composition, CQRS, and read models
    • Lab: design the data ownership map and a saga for one multi-service transaction
  • Resilience and Observability
    • Designing for partial failure: timeouts, retries, circuit breakers, and bulkheads
    • Observability: correlated logs, metrics, and traces across service hops
    • Deployment and platform concerns at a design level: containers, orchestration, and gateways
    • Lab: run a failure walkthrough of your design, find the cascading failure, and fix it
  • Migration and Evolution
    • The strangler fig: carving services out of a monolith incrementally
    • Sequencing: which service to extract first and why
    • Knowing when to merge services back together
    • Lab: write a phased migration plan for the case-study monolith and present the first two steps

Extended Version

The three-day version keeps the same gradient and adds depth and a capstone:

  • Deeper event-driven design: event storming the case study and designing around domain events
  • Service mesh, API gateway, and platform tradeoffs in more depth
  • Testing strategies for distributed systems: contract tests and testing in production safely
  • A capstone: teams design a complete microservices architecture from a fresh brief and defend it in review