Ranking situations where I'd use Microservices

Microservices are a modern approach to software architecture. There's a bit of controversy regarding them where some developers think every application needs to be split, whereas others think they're responsible for many outages.

S Tier

Netflix scale streaming platform

An application of this scale would have hundreds of different components. Attempting to make changes would become near impossible if everything was contained within a monolith.

E-commerce platform

Splitting into microservices on an E-commerce platform makes a lot of sense, especially when operating at a large scale. For online shopping things like quick deployments and observability are important. Microservices make this much easier.

Systems with hundreds of engineers

A hundred engineers working on a single codebase is a horror movie. Typically, enterprise applications have different microservices each managed by their own team. Whilst there is a serious need for communication between them, it beats the latter.

A Tier

AI platform with separate training and inference pipelines

Training and inference differ significantly in workloads. When a new model is being trained, the training system might consume hundreds of GPUs, whilst at the same time users are still generating images and expecting responses within seconds. Keeping these together creates unnecessary coupling

Marketplace platform

Marketplace platforms naturally have distinct business domains. Uber as an example has things like rider management, payments, customer support, and many others. They each evolve on their own and require changes done separately.

B Tier

Startup with 10-20 engineers

This one can go either way. At this point, one codebase definitely feels crowded, but still small enough so that microservices can create more problems than they solve. It comes down to the product owner or the technical lead to discuss whether the team would benefit from being split into smaller groups. In this day and age with AI assisted development, it is more common to follow this split up into smaller teams.

Growing SaaS products

It honestly depends. A rapidly growing SaaS product may need microservices. If areas such as billing, reporting, and other background jobs start to evolve into separate systems, it's important to consider splitting up. Until then though, a structured monolith is much simpler to maintain.

C Tier

Internal company tools

A majority of internal company tools don't need microservices. There are usually only a limited number of users, and low traffic. This might sound bad but they aren't as important as client-facing applications. That being said, at large companies these internal tools may benefit from a microservices approach. Usually though, a clean monolith with good permissions, logging, and maintainable code is good enough

D Tier

Personal side projects

If I am a recruiter and see a developer who has 8 repositories on a little side project I would block the GitHub profile. Having a microservice implementation for projects which are less than 3 months old is overkill. Development can slow down heavily with this approach and doesn't properly give you an understanding of the benefits.

Small CRUD applications

Applications which spend their entire lives performing simple reads and writes from a database should not need multiple services. There's no real benefit in terms of scalability. If anything, maintenance becomes much more difficult.

Hackathons

The project has only been alive for 4 hours, and doesn't even have a database yet. Requirements aren't even outlined properly, so discussions of splitting up the codebase shouldn't even exist.

F Tier

Todo apps

I've never personally seen one, but I know they're out there. Creating a to-do list does not require multiple codebases, analytics, and any real advanced cloud infrastructure. The entire application could fit inside a controller and a database table.

Projects built to learn Kubernetes

I understand, but also I probably wouldn't put it on my resume

My take

Most applications don't start at Netflix scale, but instead just a few users and one engineer trying their best. Microservices are great when they solve a real scaling or organisational problem, but they're a pain when solving an imaginary future one. If your application has hundreds of engineers, it might be time to consider a microservices approach. If it's a todo app with 5 users, probably not. The best architecture isn't the most impressive and detailed, but one which your team can build and maintain successfully.

My cat

Leave a comment

Stay updated