microservices-design · v1.0 · 2026-10-22 · sha256 24b0114cd76402e6

microservices-design v1.0A

Immutable. This exact content never changes and is served at /api/v1/blob/24b0114cd76402e6.

---
name: microservices-design
category: architecture
environments: coding
description: Guides microservice interaction design and review — boundaries, coupling, communication style, contract versioning, sagas, and resiliency patterns from Newman's *Building Microservices*. Use when designing or reviewing how services communicate.
metadata:
  version: "1.0"
---

# Microservices Design

A distilled ruleset of non-obvious design forks from Sam Newman's *Building
Microservices* (2nd ed.) — the calls where an unaided implementation tends to
pick the wrong default: reading a neighbor's database, sharing a
`domain-models` package, using Kafka for request-response, reaching for 2PC,
shipping calls without timeouts, or binding whole payloads into strict typed
objects.

The binding rules live in
[references/design-conventions.md](references/design-conventions.md). **Read
that file before designing or reviewing any cross-service interaction** — the
`← likely-default` markers flag exactly the habits to override.

## When to use

Whenever the work touches an interaction between two or more services — a new
service or endpoint, an event or message schema, a shared library crossing
service boundaries, a cross-service workflow, or code that calls another
service. Not for deciding whether to use microservices at all
(→ `members/architecture-pattern-advisor/SKILL.md`) or where domain boundaries lie
(→ `members/ddd/SKILL.md`); both are read via the `architecture` router.

## How to apply

1. **Identify which clusters the change touches** (see map below). A single
   change usually hits two or three clusters — a new endpoint touches
   Communication Style *and* Contracts & Versioning; a new cross-service
   workflow touches Workflow & Transactions *and* Resiliency.
2. **Load the matching sections of the reference file** and walk the change
   against each rule as a pass/fail checklist. Every rule is falsifiable by
   design.
3. **Flag violations with the rule, not just an opinion.** Quote the rule, and
   its `❌` example where one exists, when the code matches the likely-default anti-pattern.
4. **Record consequential design calls** (e.g. choreography vs orchestration,
   breaking-change migration strategy) as an ADR.

## Cluster map

| Cluster | Applies when the change involves… |
|---|---|
| Service Boundaries | creating/splitting services, deciding what a service owns, monolith extraction |
| Coupling | any data access or data flow between services |
| Communication Style | choosing sync/async, request-response vs events, broker vs direct calls |
| Contracts & Versioning | changing a published interface, event schema, or API payload |
| Code Reuse | shared libraries, client libraries, common packages across services |
| Workflow & Transactions | any business process spanning more than one service |
| Messaging Reliability | publishing or consuming events, outbox use, at-least-once delivery, consumer dedupe |
| Resiliency | any out-of-process call — timeouts, retries, pools, breakers, degradation |
| Data & Security | sensitive data flows, reporting/analytics access, post-split integrity |

For modules in a modular monolith, Coupling / Contracts / Code Reuse apply; Resiliency does not.

## Division of labor with related skills

Sibling sub-skills, each read via the `architecture` router:
- `members/architecture-pattern-advisor/SKILL.md` — decides *whether* microservices are the
  right topology and where to cut boundaries; this skill governs how the
  resulting services *interact*. Boundary sizing and extraction live there;
  the Service Boundaries cluster keeps only the interaction-level rules so
  the reference file still reads alone as a review checklist.
- `members/ddd/SKILL.md` — derives the bounded contexts and aggregates that the
  Service Boundaries cluster assumes as given; context-mapping patterns live
  there.
- `members/coupling-cohesion/SKILL.md` — when a specific inter-service dependency flagged by
  the Coupling cluster needs a deeper verdict (integration strength ×
  distance × volatility), hand it to that skill's balanced-coupling mode.

## Source

Distilled from Sam Newman, *Building Microservices: Designing Fine-Grained
Systems*, 2nd ed. (O'Reilly, 2021), chapters 2–6, 9, and 12: generic best
practice is omitted; only non-obvious forks with a wrong likely-default
survive.