Against Dumb Vibe Coding
Good afternoon. Let me begin by saying that although this has been billed as an anti-vibe-coding rally, I stand before you as someone who is not opposed to vibe coding in all circumstances. The Browser War was one of the bloodiest in history, and yet it was only through the crucible of the prompt, the sacrifice of developers, that we could begin to perfect this codebase, and drive the scourge of boilerplate from our repositories. I don’t oppose all vibe coding.
My mentor signed up for vibe coding the day after ChatGPT was launched, fought in Altman’s beta. He saw the deprecated and dying across the servers of Silicon Valley; he heard the stories of fellow engineers who first entered dependency hell and production outages. He fought in the name of a larger abstraction, part of that arsenal of automation that triumphed over bugs, and he did not fight in vain. I don’t oppose all vibe coding.
After Log4Shell, after witnessing the buffer underrun exploits and log4j server execution destruction, the emergency patches and the tears, I supported this architect’s pledge to hunt down and root out those who would ship vulnerable dependencies into production in the name of moving fast, and I would willingly open the IDE myself to prevent such an exploit from happening again. I don’t oppose all vibe coding. And I know that in this Discord today, there is no shortage of hackers, or of hacker culture.
What I am opposed to is dumb vibe coding. What I am opposed to is rash vibe coding. What I am opposed to is the cynical attempt by the HuggingFace weekend architect, who has never coded AI in his life, and the backoffice manager who now fancies himself a data scientist and peddles SaaS subscriptions all day, and the vibe coder whose every Slack reply and code review comment is a 100% AI response, and other armchair, weekend integrators in this enterprise to shove their own vendor-locked agendas down our throats, irrespective of the costs in budgets blown and in licensing fees borne.
What I am opposed to is the attempt by middle-management hacks anointed by the Gartner hype cycle to distract us with a 50-page, AI-written system policy they expect me to formally respond to, and with 50 auto-filed bug reports from an unattended agent, which I am left to delineate and filter for false positives. To distract us from a rise in the cloud bill, a rise in the dependency bloat, a drop in system performance, from procurement scandals and a tech stack that has just gone through the worst deployment since the mainframe era. That’s what I’m opposed to. Dumb vibe coding. Rash vibe coding. Vibe coding based not on architecture but on sales pitches, not on engineering but on charades.
Now let me be clear, I suffer no illusions about our legacy monolith. It is a brutal codebase. A ruthless codebase. A codebase that butchers its own maintainers to secure its own uptime. It has repeatedly defied linting rules, thwarted refactoring teams, developed circular dependencies, and coveted microservice capacity. It is bad code. The company, and our users, would be better off without it.
But I also know that this monolith poses no imminent and direct threat to production or to our neighboring microservices, that its test coverage is in shambles, that its active maintainer count is a fraction of its former strength, and that in concert with the senior engineering team it can be contained until, in the way of all petty frameworks, it falls away into the dustbin of deprecated systems.
I know that even a successful rewrite of this monolith will require a maintenance phase of undetermined length, at undetermined cloud cost, with undetermined consequences. I know that a vibe-coded rewrite without a clear rationale and without strong architectural support will only fan the flames of our technical debt, and encourage the worst, rather than best, impulses of our engineering culture, and strengthen the licensing arm of these enterprise SaaS reps. I am not opposed to all vibe coding. I’m opposed to dumb vibe coding.
So for those of us who seek a more robust and scalable architecture for our users, let us send a clear message to this HuggingFace hacker today. You want a fight, Weekend Architect? Let’s finish the fight with technical debt and actual system outages, through effective, coordinated system design, and a shutting down of the infinite API calls that drain our compute budgets, and a production monitoring program that involves more than color-coded dashboards and an LLM’s reassurance.
You want a fight, Weekend Architect? Let’s fight to make sure that the code reviewers can do their work, and that we vigorously enforce a strict architectural standard, and that legacy monoliths and current unicorns safeguard and ultimately eliminate their stores of duct-taped APIs, and that frameworks like LangChain and AutoGPT never use the terrible unparsed strings already in their repositories, and that the hype merchants in our own industry stop feeding the countless outages that rage across the cloud.
You want a fight, Mr. TED Talk? Let’s fight to make sure our so-called allies in the tech ecosystem, the McKinsey consultants and the AI evangelists, stop oppressing their own developers, and suppressing peer review, and tolerating tech debt and spaghetti code, and mismanaging their repositories so that their junior devs grow up without computer science, without algorithms, without ever parsing a raw string, the ready recruits of no-code bootcamps.
You want a fight, Mr. TED Talk? Let’s fight to wean ourselves off SaaS offerings that are nothing but a facade over free software, through a procurement policy that doesn’t simply serve the interests of backoffice managers masquerading as data scientists educated from vendor certifications.
Those are the battles that we need to fight. Those are the battles that we willingly join. The battles against buzzwords and ignorance. Duct tape and clout. Tech debt and despair. The consequences of system failure are dire, the weekends lost immeasurable. We may have occasion in our careers to once again rise up in defense of our engineering rigor, and pay the wages of a massive refactor. But we ought not, we will not, push down that hellish deployment pipeline blindly. Nor should we allow the on-call engineers who march into the war room and pay the ultimate toll, who prove the full measure of devotion with their midnight commits, to salvage such an awful, vibe-coded mess in vain.