I used to particupate in many discussions about microservices, but over time I began to notice one strange phenomena: when 10 people are talking about microservices every one of them has slightly different meaning of the word. “That’s weird, there should be some common definition for a microservice”. So that’s when I jumped into a rabbit’s hole.

The first big public work about “you should consider microservices” is 2014 article by Martin Fowler and James Lewis: https://martinfowler.com/articles/microservices.html
The term supposedly was born somewhere in ThoughtWorks, supposedly James Lewis, but I’m not sure and I don’t really care. For example, Martin Fowler has a reference to Fred George’s presentation from 2012 ( https://www.slideshare.net/slideshow/micro-service-architecure/17414807 ) already employing the “microservices” term — but in the end all those people are from the same circle related to ThoughtWorks, so it seems like they coined it. I’m fine with it.

When talking about “micro” there is an obvious question: how micro the micro should be? Fowler-Lewis article says:

In our conversations with microservice practitioners, we see a range of sizes of services. The largest sizes reported follow Amazon’s notion of the Two Pizza Team (i.e. the whole team can be fed by two pizzas), meaning no more than a dozen people.

Now that’s weird. The whole WhatsApp originally was built and supported by less than a dozen people. Does it mean WhatsApp is a microservice? To me it’s not, dozen of developers is a huge team.
One of the most hillarious arguments I heard is “hey, Google employs microservices, that’s why they scale”. The reason why Google’s case is so special is that their “microservices” are handled within two-billions-lines-of-code monorepo — that’s a sharp contrast to most of “microservices” you’d see anywhere in the wild. It’s because the model of Google is close to what intuitively is called “macroservices” or “modular monolith” rather than “microservices”. Yet some people still call it “microservices”.
In fact, before the “microservices” raise the EXACT same architecture used to be called Server Oriented Architecture (SOA) — the one devs were tired from because it was associated with “overcomplicated fragile enterprise thing nobody knows how it works” i.e. tons of randomly defined services busy chatting over network for most of the time.

As eBay, SoundCloud, Spotify, Gilt Groupe, Yelp, and many others figured out (sometimes too late) — if your understanding of “micro” is too fine-grained then you risk ending up spending most of your devs time handling cross-service communication and enjoying development of wonderfull infrastructure required for coordination/monitoring/debugging of the microservices instead of spending the time implementing features for end users — the phenomena I call “missmodularization”.
Particulary Spotify managed to go “almost Google scale” in terms of dev count, while in terms of features barely managing single audio streaming platform. And Spotify should have realized the problem of overchatty serices much earlier — they did implement a custom inter-service bus (Hermes), but instead of deducing “we did something wrong” they just went the whole “let’s build our own infrastructure” breaking bad mode.
It’s important to emphasize that all this hapened before Zipkin, Prometheus, Istio — you had much less ready-made tools for handling large amount of services.

That’s a technical background, and it’s not something new. Now, back to microservices again — why would you need to invent a new term for something that already existed for 10-15 years? My first suspicion is pretty obvious — AWS. The Fowler-Lewis article article mentions HTTP 4 times, AWS 1 time, Amazon 4 times, Netflix 9 times. It almost feels like selling one or two success stories as a general method. I’ve examined other mentioned “success stories”:

  1. The Guardian — “They migrated to AWS and use a microservices architecture to achieve continuous delivery and greater scale”.
  2. The UK Government — Digital Service (GOV.UK). “Primarily uses Cloud Hosting, which is often Amazon Web Services (AWS) and Microsoft Azure. The UK government has a “Cloud First” policy and uses the G-Cloud framework for procuring these services“.
  3. realestate.com.au — “The company is well-known for its large-scale adoption of cloud services and microservices, heavily utilizing AWS for its infrastructure”.
  4. Forward — Unknown. The name is too broad.
  5. comparethemarket.com — “Amazon Web Services (AWS) and a hybrid environment (some older services on-premise). They deployed their newer microservices on AWS and used MongoDB as their operational backend”.

Wow, what do we have here? Every one of them is using AWS, including Netflix. That’s suspicious to say at least.

To be fair, Fowler actually confirms the limits of the microservices:
https://martinfowler.com/bliki/MicroservicePremium.html - Microservice Premium
https://martinfowler.com/bliki/MonolithFirst.html - Monolith First
But then there goes the article from other author (Stefan Tilkov):
https://martinfowler.com/articles/dont-start-monolith.html - Don’t start with a monolith

So, what picture do we see? Consultants telling us there is a “new” way of buiding large systems called “microservices”, and for some reason everybody’s doing it on AWS. When is it microservices architecture and when is it not yet? Well, you decide, but it’s all AWS, don’t forget about it. This architecture has problems… but maybe there are none. Classic consulting thing “we can suggest options, but it’s for you to decide”. It reminds me descriptions of drug side effects: “constipation, epilepsia, death…”.

For example, in the Monolith First article Fowler hides behind a coward:

While the bulk of my contacts lean toward the monolith-first approach, it is by no means unanimous

In the same article he has stated the truth, but he just cannot sign it:

Almost all the successful microservice stories have started with a monolith that got too big and was broken up
Almost all the cases where I’ve heard of a system that was built as a microservice system from scratch, it has ended up in serious trouble.

So he knows that if you start with microservices you will definitely fail, but he cannot state it unequivocally. And then comes Amazon that just spreads this story all over the internet as a gospel about “Fowler said you should build your microservices on AWS” — which is true because he did not say you should not.

Everybody’s happy: Amazon sold their overpriced services to people that don’t need them, Fowler is still a well-known author-consultant, and actual developers? Well, nobody asks them. The modern discourse implies “you are doing microservices, otherwise you are outdated”…
But I do ask — where did this crap come from, I really missed the point? Why are people so obsessed with the word “microservices”? The question is more of a rhetoric, because you should answer it to yourself and recall the moment you were deceived.