Liam Asman's Blog

Vibe Coding

essay

-

“Vibe Coding” is a term used to describe the creation of software simply by prompting an LLM, and accepting whatever it outputs.

Although the term soon became the butt of some jokes, I believe there is a place for ‘Vibe Coding’ in serious software development.

Post on X (formerly known as Twitter) by Andrej Karpathy (@karpathy). 11:17pm, 2 February 2025. There\'s a new kind of coding I call \"vibe coding\", where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It\'s possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. Also I just talk to Composer with SuperWhisper so I barely even touch the keyboard. I ask for the dumbest things like \"decrease the padding on the sidebar by half\" because I\'m too lazy to find it. I \"Accept All\" always, I don\'t read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I\'d have to really read through it for a while. Sometimes the LLMs can\'t fix a bug so I just work around it or ask for random changes until it goes away. It\'s not too bad for throwaway weekend projects, but still quite amusing. I\'m building a project or webapp, but it\'s not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works. Andrej Karpathy has been credited with coining the term "Vibe Coding".

Let’s be clear; this is not a replacement for software development. Unchecked, untested code should not make its way to production. I do not believe AI will be a replacement for programmers any time soon, and certainly not in its current state.

What AI can do is improve a developer’s productivity. If I do not know how to build an iOS app, AI can get me started, or if I do not know a particular API, AI can point me in the right direction. This is AI used as a learning aid. All the AI’s output should be read, understood. Anything that is confusing should be clarified and verified. Production code should be tested, and the test cases designed by a human.

If I need to write a suite of similar looking tests, AI can help me generate them. This is AI used as a productivity tool to remove tedious, repetitive tasks. Again, all the AI’s output should be checked.

‘Vibe coding’, at its extreme, involves blindly accepting whatever the LLM has generated. We do not check the output, we do not understand it. We run the program, and if it does something wrong, we tell the AI to fix it. Edge cases are ignored, and the code is not backed by a comprehensive test suite. This is code that is fragile. This is code that is unmaintainable.

This is code that is not fit for production.

But it is fit for a prototype. It is fit for a proof of concept. It is fit for a hackathon.

To build good software fast, we need an engineering mindset. We need to test early and often and get fast feedback. A common issue in commercial software development is that the business doesn’t know what it wants, or isn’t aware of all the issues or edge cases that need business consideration.

A prototype that can be built quickly with vibe coding can be shown to the business team and used to gather feedback. It can be used to explore the problem space. It can be used to explore the solution space. It can be used to explore the user experience. It can be used to explore the technology stack. It can be used to explore the business model.

Once you have your feedback, and you move to writing production quality software, the vibe code may be referenced, but picked from with consideration. Standard software engineering practices should be followed; pair-programming and test-driven-development must not be forgotten about. Ensure those that see the prototype understand that it is an early prototype for gathering feedback, and not production quality code - we all know how sales people can take a prototype and run with it!

I expect that in the future AI will be a competent pair-programmer. I do not think we are at that stage yet. To blindly trust AI code would be a mistake. But we do not need to trust it for it to be useful.

So get vibing! Try it yourself, but remember to set boundaries. Start a dialogue with your teams about how to use AI in your software development process. Finally, share your experiences! The more we share our experiences of using AI, the faster the engineering community can learn and adapt to this rapidly evolving technology.

#technology #coding #programming #ai #artificial intelligence #vibe coding #software development #llm #large language model #cursor #copilot #chatgpt #prototype #rapid development