All insights ARCHITECTURE · DESIGN

Modular monolith or microservices: how do you choose an architecture?

A practical comparison of a modular monolith and microservices in terms of business boundaries, team, deployment, data and operational cost.

Separate modularity from deployment

A modular monolith divides the code into domains with clear interfaces, while the system is deployed as a single unit. Microservices also split the units of deployment. Either approach can be well organized or a mess; the number of services is not, on its own, a measure of design quality.

The practical question is how much independence you actually need. If two parts change together and rely on the same data, splitting them early can add coordination overhead. If one part needs a different deployment cadence or scaling profile, separating it is worth considering. The decision should rest on a need you can articulate.

Draw boundaries around the business work

Service boundaries can be built around business capabilities. AWS documentation describes decomposing by business capability and stresses that the approach requires an understanding of the business. That is why it matters to involve domain experts, rather than just splitting services by layers such as screens, tables and integrations.

In an ordering system, for example, the catalog and billing may be separate domains. Before splitting them, you need to understand who holds the state of the transaction and what happens when a payment succeeds but the order update fails. This is a design scenario, not an automatic recommendation to split every ordering system.

Account for the added operational work

Every independently deployable unit needs a way to be built and monitored, plus secrets management and incident handling. Interfaces between components also become contracts that have to be managed over time. Do not assume the team already has all of these capabilities just because the cloud makes it quick to spin up a service.

  • Is there a proven need to deploy this domain independently?
  • Who owns an incident that spans more than one service?
  • How are contracts and events versioned?
  • How does the system behave when only some services are available?

When to start with a single unit

With a small team or a domain that is still evolving, you can build clear boundaries within a single deployment unit and test them as you go. Separate responsibilities, restrict data access and define interfaces, and document where dependencies are intentional. This lets you learn before also committing to an operational split.

The choice is not a lifelong commitment. Define signals that would justify revisiting it: releases delayed by coordination, differing availability requirements or independent team ownership. Without such signals, a broad migration can turn into a project with no clear business outcome.

Decide, and keep a path for change

Write a short decision record covering the context, alternatives, benefits and costs. If you choose to split, pick one domain and use it to rehearse deployment, failure and rollback. If you choose a modular monolith, establish how you will prevent every part from directly accessing all data.

The first step is to map three core processes and identify which parts change together. Boundary design can start there. A target number of services set in advance is no substitute for that information.

From reading to working togetherArchitecture & System Reviews

These guides were written with the help of AI tools. Examples are illustrative and do not describe client projects or results. Applying the recommendations requires a look at your system and needs.

About Bechor’s professional background
LET’S MAKE IT REAL

Let’s test this on your project.

Have an idea, a need or a question that hasn’t settled yet? Let’s work out together what’s right to do.

Let’s talk A direct conversation. A clear direction. A step that fits you.

Accessibility settings

Adjust the display to suit you. Settings run on your device and send nothing to anyone.

You can also zoom the site with your browser. Your device’s reduced-motion setting is always respected.

Accessibility statement & contact

Privacy & cookies

This site uses the Meta (Facebook) pixel to measure how well its advertising works: page views and messages sent. There are no other analytics tools. You can turn measurement off here at any time.

What is stored on your device
NamePurposeTypeDuration
bechor:accessibility:v1Remembers the accessibility settings you choseFunctional, at your requestUntil you delete it
bechor:privacy-notice:2026-10-25Remembers that you closed the privacy noticeEssentialUntil you delete it
bechor:ads-optoutRemembers that you turned ad measurement offEssential, at your requestUntil you delete it
_fbpMeta cookie that recognises the browser for ad measurementAdvertising and measurementUp to 90 days

Your preferences are kept only in your browser’s localStorage, are never sent to the server and contain nothing from the contact form. The _fbp cookie is created by the Meta pixel and is deleted when you turn measurement off.

Full privacy policy