microservices

  • A service that owns no data is a function

    A service extracted for organisational reasons but reading and writing another service’s tables has all the costs of a network hop and none of the independence. It cannot…

  • An event with a full payload is a distributed join waiting to happen

    A thin event carrying only an id forces every consumer to call back for the details, which is a synchronous dependency the event was meant to remove. A…

  • Shared libraries between services recouple them

    A package holding the shared domain model removes duplication and reintroduces exactly the coupling the split was for: a change to it requires every consumer to upgrade, which…

  • The consumer decides what it needs, not the publisher

    A publisher asked to add a field for one consumer will add it, and after five of those the event is a shared schema that nobody can change.…

  • Choreography and orchestration are both fine and different

    Choreography has each service react to events and know nothing about the whole; orchestration has one component call the others in order. The first is presented as the…

  • A correlation id through every service

    Centralised logs from four services are four streams in one place until something ties a single request together across them. That something has to be generated at the…

  • The distributed monolith is the usual first result

    Six services that must be released together, share a database and call each other synchronously have every cost of distribution and none of the benefit. It is the…

  • Context mapping before service boundaries

    Deciding services first and then discovering the relationships produces boundaries that cut through a transaction. Mapping the relationships first tells you which splits are cheap and which are…

  • Extracting a service without a rewrite

    The reporting code had one caller and a six-hour test run. Finding the seam, dealing with the shared schema honestly, and routing traffic gradually rather than switching.

  • The strangler pattern needs a router in front of it

    Replacing a system incrementally requires something able to send some requests to the old implementation and some to the new. Without it, the migration is all-or-nothing however carefully…