All work
Architecture PatternPlatform architecture

One app with clean seams, split only when the evidence says to

Skip the cost and complexity of microservices until there's a real reason to pay it.

Context

A team starting a new system, or reshaping an existing one, and deciding whether to begin with microservices.

The problem

Teams reach for microservices by default and start paying the price, in network calls, partial failures, and harder deployment and debugging, long before they have a reason to.

Constraints

  • One thing to deploy and debug while the system is young.
  • Integrations with outside systems must stay isolated behind clear boundaries.
  • Splitting a piece out later has to remain possible.

Approach

Start with one application, with clean seams built in. The parts that talk to outside systems sit behind connectors with a clear boundary, and everything else ships as one unit. The seams exist so a piece can be split off later, but only when there is a real reason to.

Key engineering decisions

  • One deployable now

    A single application avoids network calls, partial failures, and distributed debugging until they buy something.

  • Contract-shaped seams at external boundaries

    Outside systems sit behind connectors with explicit contracts, so the boundary a future service would need already exists.

  • Split on evidence

    A piece moves out of process when there is evidence it needs to, not as a stance taken on day one.

What it demonstrates

One thing to deploy and debug now, with the option to break pieces off later: the split becomes a decision made on evidence, not a stance taken on day one.

Technologies

  • Modular monolith
  • Domain-driven design
  • Out-of-process connectors
  • .NET

Related expertise

Working through something similar?

Start with the problem. The right engagement follows from there.

Start a Conversation