Vibe Code vs Trad Code

7 min read

There’s a new holy war brewing. This isn’t emacs vs vi, spaces vs tabs, or even Linux vs Windows. This is bigger than all the other holy wars combined. It seems existential. It’s Vibe Code vs Trad Code.

The Set Up#

I’m founder and CEO of a company called DoltHub. We’re a fifteen person startup that spent the last eight years building Dolt, the world’s first version-controlled database.

Last week, I spent the week in Gas Town building DoltLite, a fork of SQLite with Git-style version control using storage inspired by Dolt’s Prolly Tree-based storage engine. I added ~20,000 lines of pure vibe-coded C code to SQLite. It’s write-only code. I’ve never set eyes on it. I even “launched” DoltLite with an announcement blog article. DoltLite already has two users I know of.

This has my engineers all in a tizzy. “You shipped a product where you haven’t looked at a single line of code?!?” “How are we going to support this?”

For now, I’m keeping DoltLite under my personal GitHub. I added this Support section to the announcement:

DoltLite will remain under my GitHub user profile in the short- to medium-term, indicating I personally support this project. DoltLite is first and foremost an experiment with supporting a purely vibe-coded application. I will reassess DoltHub’s support for DoltLite based on interest, usage, and maintainability.

If you love DoltLite and use it in production, please tell me via email or our Discord. We are absolutely open to moving DoltLite into the DoltHub GitHub organization and supporting it with the full weight of our company if usage demands.

But tensions are high. It feels like any small act of aggression could cause an engineer mutiny.

Definitions#

Let’s start with some definitions so we’re all on the same page.

Trad Code#

I didn’t invent the term Trad Code. I saw it in this tweet and immediately fell in love.

Trad Code is the way software has always been done: engineer in an editor, keystrokes by hand. Another engineer usually reviews. Major design decisions are discussed, reviewed, and agonized over.

The engineer is responsible for not only the code but knowing how it works. If you ask engineers in charge of Trad Code how it works, they go into painstaking detail on how exactly it is structured and breaks. If the code breaks, the engineer can be called at any time to fix it.

The engineer is not only responsible for if the Trad Code works but how it looks. Is it easy to read and extend? You can blame any line of Trad Code and shame the engineer who wrote it.

My Trad Code corpus is large. All software my teams and I have built up to this point. I’m very sure of the mechanics and trade-offs of how Trad Code works and is developed.

Vibe Code#

Our AI lord and savior, Andrej Karpathy, coined the term Vibe Coding with this famous tweet. I’m extending the definition.

Vibe Code is code written using an agent or swarm of agents. True Vibe Code is never read by a human. A single Claude Code session where you read the output is not Vibe Code, that’s more like Trad Code: Enhanced Edition. Vibe Coding is the only way to achieve 100X coding productivity. The minute you pop open a file and start reading, you lose almost all of the speed advantage of Vibe Coding.

By definition, if you never read the code, you don’t understand the code. You are not aware of major design decisions or patterns, only that the tests pass and the software survives contact with real world use cases. If someone asks you how something works, you ask an agent and copy-and-paste the answer into an email or text message.

As an Vibe Coding engineer, you are the foreman of an agent software factory. You are responsible for the factory producing output. You instruct the factory what to build and you examine the finished product. The factory is churning out product so fast that you have no hope of understanding the intricate details of how exactly the product was produced or works.

Vibe Coding costs money. I spent $3,000 in a week building DoltLite. Those tokens aren’t free. A Vibe Coder better be able to produce code worth more than the cost of the tokens.

My Vibe Code corpus is small. True Vibe Code has been around for less than six months. My Vibe Code experience is working with integrating Dolt into Gas Town, an agent orchestrator that writes itself. And now DoltLite. Therefore, there’s a lot uncertainty. Anything I say about Vibe Code is informed speculation. Plus, coding agents are getting better all the time, moving the goal posts out from under me. Take what anyone, but especially me, says on this subject with a giant grain of salt.

The Trade-Off#

I’m going to go Demetri Martin on you and drop a graph that I think explains both sides of the brewing holy war between Vibe Coders and Trad Coders.

Vibe Code vs Trad Code

This is a plot of software quality over time. Both axes are roughly log scale. As most of you know, linear on a log scale means slow. Exponential on a log scale means really fast. I’ve plotted how I think about Vibe Code and Trad Code on the chart. I made Vibe Code red to suck up to my Trad Code engineers. They’re definitely mad at me.

With Vibe Code, you get insane productivity for a week or a month, maybe more. We don’t have the data. I had all 87,000 SQLite tests passing in a day with a new 10,000 line (maybe) Prolly Tree storage backend in DoltLite. I asked my co-founder Aaron how long it would have taken him and he laughed. He said “so long I wouldn’t have tried”. After a bit of pressing he said “3-6 months for a small team of engineers”. After a week, I had a DoltLite good enough that I was willing to tell the world about and invite users to try.

But I have no idea how it works. I’m not confident it scales. I’m not sure it does what I think it does. In fact, I have evidence the agent took shortcuts. Moreover, Aaron read the code for four hours against my wishes and I quote, “I’m not sure the code does what you think it does”. If it breaks, I’m going to ask an agent to fix it. If the agent can’t fix it, what do I do?

At some point, I’m probably going to have to read the Vibe Code and understand it. At that point, I’m back in Trad Code, working off a possibly shaky foundation. This is where the Vibe Code graph levels off. The Vibe Code to Trad Code switch is going to at least slow me way down. Potentially, I’ll have to throw away the Vibe Code and make a better solution with Trad Code from scratch. My guess is the Vibe Code to Trad Code hand off will come on the order of months, maybe a year, if DoltLite becomes popular. I’m 90% certain it will happen, though definitely not 100%.

Trad Coders are nodding vigorously right now. “You should have just started with Trad Code!” “In a few months, max one year, my Trad Code is going to outperform your shitty Vibe Code.” “I understand how it works and agonized over every design decisions.” “It is built on a strong, grounded, architectural foundation.” “Any other engineer can read it, fix it, and support it.”

And I don’t think Trad Coders are wrong. At some point, I think Trad Code outperforms Vibe Code. At some point engineers have to understand what they’ve built to improve it.

Vibe Coders are looking at me waiting for the Trad Coders to stop whining. Would you rather have no software for a year or software that might not be maintainable in a year? Agents are getting better all the time. I haven’t met an issue that an agent couldn’t fix with my prompt wizardry. Maybe agents will get better faster than DoltLite will fail? Vibe Code could have no expiry. Again, Vibe Coders aren’t wrong. Software is better than no software. Agents are getting better. There’s a lot of uncertainty here.

Conclusion#

Both Trad Coders and Vibe Coders have valid points. This is the nature of the Vibe Code vs Trad Code holy war. We need some more time to see who is right. Maybe both are.

Whose side are you on? Are you Vibing out, shipping mediocre software so fast you’re making Trad Coders cry? Or are you reviewing every line of your artisanally-crafted, maybe AI-enhanced, Trad Code? Like all software holy wars before, you’ll have to pick a side. With DoltLite, I’m auditioning to be a general in the Vibe Code army. Come by our Discord and join me in the new #doltlite🪶 channel. Trad Coders not welcome.