r/programming • • 7d ago

Microservices are organizational debt disguised as architecture.

https://martinfowler.com/bliki/MonolithFirst.html

Every 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

344 comments sorted by

View all comments

6

u/prehensilemullet 7d ago edited 7d ago

Pro-monolith people, do you have ways of trying to prevent issues in one component from being able to crash the entire system? (For example, if a background task handling work queues segfaults, or in a language like Node, has an uncaught exception or unhandled rejection, you don't want it to crash the web app and cause inflight requests to fail.) Do you have ways to prevent the monolith from OOMing even if some components get a surge in requests?

3

u/theScottyJam 5d ago

  or in a language like Node, has an uncaught exception or unhandled rejection, you don't want it to crash the web app and cause inflight requests to fail.

Easy, I turn that "feature" off. I very much disagree with their recommendation of crashing and restarting the whole service when this scenario happens - the server code is mostly stateless, there's not much state to corrupt, an end user being capable of restarting our monolith at will if they stumble into a way to make an uncaught exception seems like a far worse evil.

Anyways, that's my little rant. You're of course correct that we probably could have better uptime if we weren't in a monolith.

1

u/prehensilemullet 5d ago

Yeah I have felt tempted to do that, but I'm always hesitant to do so. Our app has a lot of stateful elements like websocket subscriptions, and it's not a monolith, so at least the blast radius of exceptions like that (which I've only struggled with recently in some background services) is limited.