Back
Development 27 Apr 2026 4 min

Microservices — One of the Most Expensive Mistakes at the Start

Why microservices are not the default architecture, but a tool for a specific problem. Two real cases: when it was a mistake and when it was justified

Microservices — One of the Most Expensive Mistakes at the Start

Dear Error

Microservices are one of the most overrated things in development. A team starts a project and immediately says, "let's break it into services, it will be scalable." Sounds logical. In practice, this is premature scaling, you are scaling something that doesn't exist yet. There's no load, no team, no problems. But there are already services, interactions between them, and infrastructure that someone has to maintain.

Splitting a system into microservices too early

My case

I had a specific example. We needed to create a recommendation system for an online store. The idea was to implement it as a separate microservice in Go, so that we could change the provider and keep it "flexible." The service accessed an external API, filtered data, and checked product availability. It took about three weeks.

In the next version of the backend, we simply implemented this within the main application in PHP. Without a separate service, without unnecessary infrastructure. And at that moment it became clear: the microservice was redundant. We thought "microservices = correct," instead of thinking: "does this solve the problem now?"

When justified

This does not mean that microservices are unnecessary. Here's the opposite case: we were receiving audio from clients in chunks, there was a high I/O load, and PHP objectively couldn't handle it. We moved one endpoint to a separate service in Python (FastAPI). This was justified: a specific problem, a technical limitation, a targeted solution.

Microservices are justified when there is a specific bottleneck, different types of load, the need for isolation, and a team to support it. There's no need to split the system into 10 services; often, one additional process is enough.

A justified extraction of one heavy dedicated service
A service extraction is justified only when it removes a concrete technical bottleneck.

Main question

Microservices offer flexibility but come at a cost: development time, deployment complexity, monitoring, logging, network issues, data synchronization. Without DevOps practices and experience, you start spending more time on infrastructure than on the product.

The main question is always the same: is this needed now, or is it a fear of the future? Developer maturity is not about building complex systems. It's about not complicating things without reason.

architecture microservices

More on this topic

Latest published materials from the same category or adjacent topics.

Learning to Befriend Someone Else's Code
Development 27 Apr 2026

Learning to Befriend Someone Else's Code

Reading someone else's code for the first time is almost always stressful. But there is an algorithm that removes the chaos and provides an entry point

Read
Boilerplate is not evil
Development 27 Apr 2026

Boilerplate is not evil

DTOs, mappers, layers, and model separation seem unnecessary when the system is small. But as the project grows, boilerplate limits the area of changes, makes the code predictable, and speeds up the team's work

Read
Numbers Never Lie
Development 27 Apr 2026

Numbers Never Lie

How metrics changed my approach to optimization. A real case: from 'something is slow' to a 2-3 times increase in conversion through specific data

Read