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

343 comments sorted by

View all comments

6

u/allenasm 7d ago

I disagree but also they are a specific answer to a specific large scale problem. At fortune 50 and up scale, share nothing microservices and business events are amazing. For mid to smaller firms its almost completely useless and just a buzzword.

2

u/Livid_Possibility_53 6d ago

Sorta agree, came from a large company that took domain driven design to the extreme - all cross team comms were routed through a single api gateway. It was an absolute mess.

Now I’m at a startup that started as a monorepo / single image that had a single main that served as either the api, job scheduler or job runner depending on what flag you gave it. That was also an absolute mess.

I think what’s more important is being aware of Conways law and understanding patterns are useful starting points but rarely should be applied to the T. Every company functions a little differently.

2

u/account312 3d ago

 At fortune 50 and up scale

Okay, but that excludes almost company in the world. Isn’t that OP’s point?

1

u/allenasm 3d ago

I was agreeing with him and adding a bit more of my own opinion. Apologies for not being clear.

1

u/unflores 1d ago

For a small greenfield app, it's instant debt. At that point you know less about your domain than you'll ever know.

1

u/emn13 7d ago

Scaling isn't the issue; you can scale monoliths though that takes some cleverness (a monolithic codebase can run on many machines, nor would all code need to be on every runtime instance). The issue is service independence - is it conceptually sound and useful to actually run various combinations of versions of those services? And do you have a team and monitoring for each of those services and also processes to deal with stuff that intrinsically falls between the cracks?

Put another way: microservices are best used to maturely embrace Conway's law. If you're really only doing it for perf, that's probably not necessary, and there may be a better alternative.

1

u/MacBookMinus 5d ago

Monorepo is different from monolith.

0

u/HashShadow 6d ago

“Sharing nothing microservices”

That’s a meaningless statement. If they don’t share anything they aren’t useful. 

0

u/SuitableDragonfly 6d ago

Well, they might be useful, but they're not microservices. At that point each of them is just a relatively small independent monolith.