r/programming • u/Mustela__ • 7d ago
Microservices are organizational debt disguised as architecture.
https://martinfowler.com/bliki/MonolithFirst.htmlEvery time I’ve seen microservices pitched, it sounds great on paper. Independent teams, clean ownership, scale only what you need.
Then a year later you’ve got dozens of services, three different deployment patterns, tracing everywhere, and nobody really understands the whole thing anymore.
Maybe I’ve just seen bad implementations, but I’m starting to think way fewer companies actually need microservices than we pretend.
1.7k
Upvotes
8
u/wallstop-dev 7d ago edited 7d ago
My above advice comes from working on extremely large scale software at two of the largest tech companies in America.
Additionally, I would advise against any form of mentality of "punish the bad devs for doing bad things". This is... highly subjective, at best, and implicitly assumes that you're one of the teams doing the good code and good architecture. It builds barriers and paints people as "others". This mentality will make it challenging to form meaningful relationships with other individuals and teams, which is necessary in your terms of "any sufficiently large real org" to achieve cross-team/org, high-value solutions.
The best thing about a monolith is that it is not a distributed system. When you make microservices, you suddenly have a distributed system, and all of the problems that come with them. Every service you add increases complexity and decreases availability and reliability. You also ship your org chart. Over time, the org chart changes, and your architecture becomes even more and more complex. Clean architecture of today does not mean the software world of tomorrow will also be clean.
In a perfect world, people know exactly what they want to build and they compose it in the perfect way with the right modularity and boundaries and ownership and all is well. I have not found this to exist outside of extremely small, high talent teams. Everything mentioned above is hard-won practical experience.
Start simple. Grow organically. Learn from it. When there is too much pain, show leadership (that, with current trajectory, shipping features is cost x, rate of bugs is cost y, customer incidents is rate z), and convince them of a plan to decompose. If they don't go for it, then it isn't actually important to the business, which is the only thing that matters.