Splitting a codebase is easy. Splitting the coupling is the actual work, and it is the part that gets skipped.
The symptoms
- Releases go out in a fixed order, documented in a runbook.
- A schema change requires a meeting with three teams.
- Integration environments exist because nothing can be tested alone.
Each of these says the same thing: the boundaries were drawn around nouns in the codebase rather than around reasons to change.
Services should be separated by what changes together, not by what sounds like a separate thing.
What helps
Draw the boundary where the business capability is, not where the database table is. Give each service its own data and let it be wrong for a moment rather than synchronously correct forever. And be honest about whether the organisation actually needs independent deployability, because if it does not, a well-structured monolith will beat this every time.



4 Comments
Leave a comment
Sign in to leave a comment.
Signing in is unavailable right now.







Daan Visser
January 22, 2024The runbook test is brutal and accurate. We have one and I have never once thought of it as a symptom until now.
Muhammed Senussi
AuthorJanuary 22, 2024It is worth reading yours as a coupling diagram. Every ordering constraint in it is a dependency somebody chose, usually without meaning to.
Yara Mansour
January 24, 2024What would you tell a team that has already made this mistake and cannot start over?
Muhammed Senussi
AuthorJanuary 24, 2024Merge back the services that always deploy together. Nobody wants to hear it, but two services with a fixed release order are one service with extra latency. Recombining them is usually a week of work and removes a permanent tax.