Sep 15, 2026

How do microservices actually work?

Understanding how data moves through microservices, why the tools can feel overwhelming, and why AI makes architectural knowledge more important than ever.

Vitor Águila
by Vitor Águila
How do microservices actually work?

Understanding how data moves through microservices, why the tools can feel overwhelming, and why AI makes architectural knowledge more important than ever.

You start learning microservices, and suddenly you have a long list of other things to learn. Docker. Kubernetes. Networking. A service mesh. Message brokers. Monitoring. Somewhere along the way, someone mentions Istio, and you open another tab. Each topic has its own documentation, tutorials, and vocabulary. You can spend a lot of time on them individually and still struggle to explain what happens after a user clicks a button.

Where does the request go? Which component decides whether it is allowed? How does one service find another? Where did that number on the dashboard come from? Those connections are often the hardest part to learn. The individual tools start making sense before the architecture does, particularly when you are early in your career and haven't had much opportunity to work with a complete system.

cover.png## There is a lot to hold in your head

Knowing the definition of a pod is useful. So is knowing what a proxy does. But putting them together takes another kind of understanding: how traffic reaches the pod, what the proxy does with it, and whether the application ever receives it. The same goes for observability. You might know that Prometheus collects metrics and Grafana displays dashboards. Looking at a chart, though, you still need to understand who produced the measurement and what it tells you about the request you just sent.

For someone early in their career, it can feel as though every explanation requires three things they haven't learned yet. Even choosing what to study next becomes difficult. Trial and error helps, but it can also take a long time. When you change a configuration and the application starts working, you don't always know which assumption was wrong. You have a working example and an explanation still to figure out. Having one complete example to return to can help. You can study the request first, come back to the permissions later, and then look at the measurements. Keeping the same services and behavior in view gives each new concept somewhere to fit.

AI makes this more interesting, and easier to get wrong

Now we can ask an agent to create the services, write the deployment files, add a broker, and configure the mesh. That is a useful way to get past the setup work that used to keep people from experimenting at all. It also means the system can grow much faster than our understanding of it.

Imagine asking an agent to fix a request that keeps returning a permission error. It changes a policy, the request succeeds, and the immediate problem appears to be solved. You still need to understand whether the new policy allows exactly what you intended. A successful request won't tell you if the change also gave another service access it shouldn't have. Without enough understanding of the architecture, it is hard to judge the proposed fix. You end up asking the same agent whether its own changes are correct, because you don't yet know what evidence to look for yourself.

That is the part I want to help with. AI can explain a configuration, suggest an experiment, and help investigate a failure. Those interactions become much more useful when you can follow the reasoning and recognize when the result doesn't match your intention. Nobody needs to memorize every Kubernetes field before using an agent. But being able to say “this request should reach that service, through this path, with these permissions” gives you something concrete to check its work against.

Making the architecture visible

An arrow between two boxes leaves a lot unexplained. Following a request gives that arrow meaning: there is a destination to find, a connection to make, and a policy to enforce before the application's code can do its job. That is why I put together a case study with an interactive guide and a runnable local system. I wanted to help people see how data moves and how the components cooperate, with something concrete behind each explanation. The guide illustrates those relationships; the local system lets you investigate the behavior yourself.

For example, the lab includes a reader identity that can access the catalog but cannot access orders. Seeing the orders request stop at the proxy helps connect an authorization rule to something observable. There is a reason for the rejection, and a place where it happens. Events and metrics get their own explanations too. They are easy to group together as “things happening in the background,” even though they serve different purposes and move through the system differently. Showing those flows alongside the request helps make the architecture easier to reason about as a whole.

I also wanted the explanation to stay connected to code. When something catches your attention, there is an implementation behind it that you can inspect and change. That connection gives the visual guide somewhere to go beyond the animation.

A place to build confidence

The audience I had in mind includes people who are still asking basic questions. A junior developer should be able to be curious about service meshes without feeling embarrassed about not fully understanding containers yet. Someone experienced in another area should be able to explore this one without already knowing all its terminology. Learning this takes time. A case study won't remove that, and mistakes are still part of the process. My intention is to make those mistakes easier to investigate: enough context to form a guess, something visible to test it against, and code you can read when the result surprises you.

Being able to explain why a request failed, question an overly broad fix from an agent, or connect a dashboard to the service behind it is meaningful progress. Those are things you can carry into another project, even when its tools and configuration look different. That is what I wanted to build: a place where developers can get comfortable asking how the system works, and start finding answers they can verify for themselves. The case study is called Mesh Lab. It is free to explore, and the source code is on GitHub.

Continue Reading