Marc is dragging the red dry-erase marker across the glass partition with a rhythmic, screeching sound that makes the back of my neck prickle. It is 2:04 AM. We have precisely 14 beta users, 4 of whom are related to Marc by blood or marriage, yet the whiteboard looks like a schematic for a moon landing. There are boxes for Kafka, clusters for Kubernetes, and a complex web of 24 microservices that apparently need to communicate over a service mesh. Sarah is nodding, her eyes glazed with the kind of exhaustion that usually leads to high-stakes gambling or joining a cult. She is arguing that RabbitMQ might be more robust for our messaging layer. I’m just sitting there, thinking about how I finally matched all 64 of my socks this morning and how that was the most productive thing I’ve done in 4 days.
There is a specific kind of madness that takes hold of a technical founder before they reach product-market fit. It is the Fear of the Thundering Herd-the terrifying, hypothetical moment when 100,004 users simultaneously decide to sign up for an app that currently only allows you to upload photos of slightly burnt toast. To prepare for this imaginary apocalypse, we build bunkers of complexity. We spend 54 hours configuring Prometheus metrics for a database that contains fewer rows than a standard spreadsheet. It feels like work. It looks like engineering. But really, it is just a very expensive form of hiding. We are hiding from the fact that we don’t know if anyone actually wants the burnt toast app.
The Precision of Constraint
Her entire professional life is dedicated to finding a single, tiny, moving vein in a screaming 4-year-old. She doesn’t have the luxury of over-engineering her environment. She has a needle, a tube, and a finite amount of time before the situation devolves into total chaos. Precision, she says, is born from simplicity, not from having 14 different backup options. We, on the other hand, are currently building a nuclear reactor to power a nightlight.
– Elena T., Pediatric Phlebotomist
I look back at the board. Marc has now added a layer for ‘global edge caching’ because, in his mind, our 14 users (mostly located in a 4-mile radius of this very office) might suddenly migrate to 4 different continents by Tuesday. We are burning through our seed capital at a rate of $4,444 a month just to keep the staging environment alive. This is the ‘Web Scale’ trap. We read blog posts from engineers at companies with 444 million users and we think their solutions are our solutions. They aren’t. Their solutions are our poison. They are solving problems of scale; we are failing to solve the problem of existence.
24 Min
Cognitive Latency per Auth Flow
Every added microservice adds latency, both network and human.
Every time we add a microservice, we add latency. Not just network latency, but cognitive latency. It takes 24 minutes just to explain how the auth flow works to a new hire, assuming we could ever afford to hire someone. We have 34 different Git repositories for a project that could comfortably fit in a single directory on a $14-a-month VPS. There is a profound, almost spiritual relief in simplicity that we have collectively decided to ignore.
The Cathedral of Failure
To ship one feature
By the time it launched
I remember my first real failure. It wasn’t because the server crashed under load. It was because it took us 74 days to ship a single feature because the ‘architecture’ required 4 different PRs across 4 different services, each with its own CI/CD pipeline that failed 54% of the time for reasons involving Docker subnets. By the time the feature went live, the user who asked for it had already deleted their account. We had built a cathedral for a congregation that never showed up.
This is why the modern obsession with cloud-native everything feels so hollow. We are told that ‘serverless’ will save us, but then we spend 44 hours debugging cold starts and IAM permissions. We are told that ‘containers’ are portable, but we spend weeks fighting with orchestration. There is an alternative that nobody wants to talk about because it doesn’t look good on a resume: the boring, reliable, single-box solution.
We need to regain the courage to be small. Scaling is a high-class problem. It is a problem you earn the right to have. Until you have 1,004 users complaining about lag, you don’t have a scaling problem; you have a marketing problem or a product problem. If you can run your entire business on a robust, well-managed server without the overhead of a thousand moving parts, you should. This is the philosophy of companies like Fourplex, which prioritize the efficiency of the machine over the vanity of the architecture. They understand that a single, powerful VPS can handle significantly more traffic than most startups will see in their first 4 years of operation. It’s about being lean, not just in your business model, but in your very lines of code.
Simplicity is the ultimate sophistication, but we treat it like a lack of ambition.
Losing the Human in the YAML
I think about Elena T. again. She doesn’t use a robotic arm guided by AI to draw blood, even though that technology probably exists in some research lab in 4 different cities. She uses her hands and her eyes. She focuses on the human in front of her. We are losing the human in the YAML. We are so worried about the ‘system’ that we’ve forgotten the ‘service.’ I once spent 4 days-four whole days-trying to get a Kubernetes ingress controller to handle SSL certificates correctly. Do you know what those 4 days could have been spent on? Talking to the 14 people who actually use the app. Finding out why only 4 of them ever come back a second time.
The Shame of the Pi
There is a secret shame in admitting that your app could run on a Raspberry Pi. It feels like you’re not a ‘real’ engineer. But the reality is that the best engineers are the ones who can resist the urge to build.
They are the ones who look at a request for a message queue and say, ‘Can we just use a database table for now?’ They are the ones who realize that 94% of the time, the bottleneck isn’t the CPU or the RAM, but the communication overhead between people and the complexity of the deployment process.
The Tyranny of Future-Proofing
Marc is now drawing a diagram for a disaster recovery plan that involves 4 different cloud providers. I want to tell him that if our 14 users lose their toast photos for 24 minutes, the world will keep spinning. I want to tell him that my socks are matched and it feels better than any distributed system I’ve ever designed. But he’s in the zone. He’s solving the puzzle. And that’s the real danger-engineering is a puzzle that is so satisfying to solve that we often forget why we were building the thing in the first place.
We tell ourselves we are ‘future-proofing.’ But the future is a fickle thing. In 4 months, the toast app might be a tire-pressure app or a defunct LLC. The code we write today to handle ‘scale’ will likely be the very thing that prevents us from pivoting when we realize we were wrong about the market. It is easier to move a small boat than it is to turn a tanker, yet we keep building tankers in our backyards and wondering why we can’t reach the ocean.
Mistakes Made
Wasted Capital
The Real Reason
I’ve made this mistake 14 times if I’ve made it once. I once spent $2,344 of a previous company’s money on a Redshift cluster before we had even defined what our data schema looked like. I thought I was being proactive. I was actually being a coward. I was afraid of the messy, manual work of analyzing data in a CSV file, so I built a high-tech sandbox to hide in.
What would happen if we just stopped? What if we deleted the clusters and the queues and the sidecars? What if we just ran a single, well-optimized monolith on a solid server? We would probably find that we have 44% more time to actually build features. We would find that our deployment time drops from 24 minutes to 4 seconds. We would find that we can actually understand the whole stack again.
The Beauty of Constraint
Elena T. has the one she’s using. She makes it count. There is a beauty in that kind of constraint. It forces you to be better. It forces you to be present.
As Marc finally puts the cap back on the marker, satisfied with his 4-dimensional map of a hypothetical future, I realize that the only way out is through. Not through the cloud, but through the reality of the present. We don’t have a scaling problem. We have a focus problem. And no amount of Kafka is going to fix that.