Category
Software Engineering

Published
Dec 6, 2025

Read
4 min

Hand, Craft, and Vibe Coding

Definitions

Gene Kim's Vibe Coding definition in combo with our industry's lack of a tight definition irks me.

This definition is shit. Commands, buttons, no code tools, etc. have been able to generate code for decades.

I think Andrej Karpathy's definition—the term's original author—hits on the correct essence.

Specifically, the forget that the code even exists is what matters most.

Some Software Engineers are currently using the term Vibe Coding when their process is more nuanced. They are not forgetting the code exits, they are caring. As such, I propose we have tighter definitions:

  • Vibe Coding: AI assisted coding where the author DOES NOT care about implementation details
  • Craft Coding: AI assisted coding where the author DOES care about implementation details

In the context of hand coding we have a more complete picture:

Type Production Caring
Hand Coding Hands Optional
Craft Coding AI Assisted True
Vibe Coding AI Assisted False

The nuance of caring about implementation details—typically for maintenance concerns—is the distinguishing factor of Craft vs. Vibe. Subjective qualities such as elegance, beauty, and readability come into play just as objective qualities like computation and memory efficiency do. Regardless, the distinction is binary.

Implementation details matter to the author or they don't.

It's worth noting the author doesn't have to be human, but instead an agent using a Cognitive Cloak

Spectrum

The spectrum from hand to craft to vibe are all means to produce code. The recent step change of low code, no code, and now AI assisted code tools mean more humans can manifest their ideas via machine. High-level languages surfacing around the 1960s were the first step change in authoring software where the AI assisted technology of today is the most recent. In both cases the technology democratizes the ability to author software.

The low-level programmers of the 1960s saw high-level languages—and the humans that used them—as inferior. Software Engineers of today originally had—and many still have—the same feelings toward AI assisted technology and its adopters. I am team adopter.

Means

Code is a means to an end.

That does not mean craft, care, and beauty are irrelevant. However, it does mean they are optional. As a Software Engineer of ~15 years, I did not enjoy writing that sentence. As long as code facilitates the desired result(s) then it served its means to the desired end.

Software Engineers know this implicitly even if they've never confronted this fact explicitly. It's always been this way. Even before the current age of AI assisted technology.

At the small scale, a function body's implementation can vary immensely where its signature is the contract to attain expected results. You can see a plethora of human hand-coded examples demonstrating the implementation variance of simple functions via sites like Codewars, LeetCode, etc.

At the large scale, a system architecture facilitates characteristics—typically speed, efficiency, performance, etc.—of a particular program, product, or service. As long as the system delivers the characteristics—just like a function signature's promise—then the implementation details do not matter.

As a Software Engineer who does care about the details this leaves me in conflict.

Resolution

Resolving this conflict is quite simple however. We simply need to tease apart perspectives:

  • Creator
  • Consumer

It's the consumer that does not care. The creator can optionally care—just as I outlined in the table above. It is to the creator's benefit to care (especially if part of a team), but they technically do not have to. In fact, there are modes of creation that warrant Vibe Coding over Craft Coding. If you're already a software engineer then prototyping is a prime use case. If you are not a software engineer then it's simply a matter of your goal. Do you just want an end result or do you care to understand how it works? There is no wrong answer.

I hope the introduction of the Craft Coding term can capture the useful nuance in software engineering circles at minimum and in the zeitgeist at maximum.

If you have any thoughts, ideas, or suggestions, don't hesitate to contact me on Twitter @derekknox. If there is already a term capturing this concept, I'd love to hear about it. I think Addy Osmani's AI-Assisted Engineering is most accurate, but it lacks the succinctness Craft provides compared to Vibe.