ecabigting
← Back to Blog

Prematurely Distributing Your Load

by Eric Thomas D. Cabigting
Prematurely Distributing Your Load
[ ai generated ]

I have watched a team spend three weeks arguing about how to split their code across ten servers for a product that had twelve users. I have seen a developer propose a system so layered and abstract that a simple login form needed six different services to finish. I have been on calls where building a single button turned into a debate about rewriting the entire platform. These are not hypotheticals. They are patterns that repeat across our industry, and they are spreading to side projects and volunteer teams where no one is getting paid to tolerate the pain.

The problem starts with a simple requirement. Maybe it is a login form. Maybe it is a dashboard. Then the questions begin. How will this grow to millions of users? Should we split everything into tiny pieces? Do we need a specialized database? What about cloud containers and orchestration? The team reaches for complexity before it understands the problem it is solving. It is not architecture. It is anxiety pretending to be foresight.

I have been guilty of this myself. Early in my career, I would study the tech stacks of large companies and copy them into projects that had none of the same constraints. I spent weeks setting up distributed systems and automated deployments for a tool that only three people used. I drew diagrams with boxes and arrows. I wrote configuration files before I wrote user stories. I was proud of the setup. I showed it to people who nodded politely. Then the project died because I had spent more time configuring infrastructure than talking to the users. I thought that using the same tools would force the same results. I confused the tools of maturity with the path to maturity. A startup does not become a large company by building like one on day one. It becomes large by surviving long enough to outgrow its first stack. The stack is a side effect of success, not a cause.

The video that inspired this post captures that spiral perfectly. Two developers try to build a feature, and within minutes they are discussing enterprise patterns, exotic debugging techniques, and rewriting everything in a new language. The satire works because we have all sat in that meeting. We have all heard a colleague say that a single codebase will not scale, even though the product has not launched.

The truth is that most applications do not need to spread across many machines on day one. They need to be understood by the people who build them. A single, unified codebase is not a sign of weakness. It is a sign of focus. When your team is small and your problem is unclear, the last thing you need is network delays between parts you cannot yet define. You need working code that you can throw away when you learn more.

This is where fundamentals matter. Clean code in one place beats scattered code that no one can trace. A simple database query beats a messaging system when you have one customer. You solve the problem first. Then you let the architecture grow to fit the solution. If the solution is simple, the architecture should be simple too.

Artificial intelligence is making this harder and easier at the same time. It is easier because AI can help you write a working prototype in an afternoon. It is harder because AI can also generate an elaborate infrastructure plan, deployment scripts, and a fifty-page runbook before you have validated a single assumption. It will draw you beautiful diagrams of systems that do not need to exist yet. It will happily suggest splitting your landing page into ten separate services because that is what it has seen in its training data. The tools are powerful. The future is intelligent. But if you let AI build complexity before you have earned it, you will end up with a system that only an AI can maintain. And when that system breaks at the worst possible moment, you will not know where to look.

My rule is simple. Ship with protection. Keep the basics working. Build something unified that you understand. Break it apart only when the pain of keeping it together is real. Use AI to speed up what you already know, not to replace the thinking you still need to do. An AI-generated distributed system is still a distributed system, and it still hurts when it breaks at three in the morning. There is no artificial intelligence that will wake up for you.

The teams I help today want to start with heavy infrastructure and end with a button. I tell them to reverse that order. Start with the button. Understand why it exists. Watch real people click it. Ask them what confused them. Fix that before you worry about scaling. When the button is making money or saving time, then you can ask if it needs to run on its own server. Complexity is not a virtue. Shipping is.

Architecture should emerge. It should not be purchased in advance with interest you cannot afford.

Continue Reading.