You On AI Field Guide · Artisanal Coding The You On AI Field Guide Home
TxtLowMedHigh
CONCEPT

Artisanal Coding

Joel Spolsky’s term for software written by a human engineer who has thought through not just what the code does but why it is structured the way it is—the practice of owning the design decisions that AI-generated code makes invisibly, and the standard against which AI output must be evaluated to prevent the most dangerous class of abstraction leaks.
Artisanal coding is Joel Spolsky’s name for the practice that the Law of Leaky Abstractions implies is non-negotiable in any era of powerful abstraction tools. It is not nostalgia for hand-written code; it is a quality standard. Code that has been artisanally produced is code whose author can explain why it is the way it is rather than some other way—which structural decisions are load-bearing, which are arbitrary, how the system will behave at scale, how it will fail, and how it will need to evolve when requirements change. The contrast class is code whose authorship is statistical: AI-generated output that matches the patterns of its training data without encoding any of the design reasoning that would allow a future maintainer to evaluate, modify, or debug it confidently. Artisanal coding in the AI era does not mean refusing to use AI tools; it means treating AI output as a first draft produced by a talented but unreliable collaborator, reviewing it with the critical attention that a senior engineer brings to a junior engineer’s pull request, and owning the result in the specific sense of being able to account for every structural decision within it. The developer who practices artisanal coding is slower than the one who accepts AI output without examination. She is also the one who will be standing, still functional, when the abstraction leaks.
Artisanal Coding
Artisanal Coding

In the [YOU] on AI Field Guide

The cycle treats AI as an amplifier that carries whatever signal the builder feeds into it. Artisanal coding is the practice of ensuring that the signal includes the builder’s genuine understanding of the system she is building—not just her description of the desired output. A developer who prompts for a feature and deploys the result without understanding the architectural decisions it embeds is feeding a shallow signal: the output may be correct today and brittle tomorrow, and the brittleness will not announce itself until the leak occurs. A developer who reviews the generated code with the critical attention of someone who will be responsible for it in production is feeding a signal that includes her judgment, her taste, and her accumulated knowledge of the specific system in which the generated code will operate.

The Abstraction Sequence
The Abstraction Sequence

The cycle’s account of the Trivandrum training describes the ideal division of labor between human and AI: humans decide what should exist and how the pieces should fit together; the machine produces the pieces. Artisanal coding is the practice that makes this division of labor coherent. Without it, the human is not deciding what should exist—she is accepting what the machine decided should exist, at the level of architectural detail that determines how the system will fail. The ascending friction that the cycle identifies as the non-negotiable cost of genuine depth is, in Spolsky’s terms, the friction of artisanal practice: the time it takes to read, understand, and own the generated code rather than accepting it at face value.

The decline of Stack Overflow—the collective diagnostic memory that Spolsky built—is the institutional correlate of the decline of artisanal practice. When developers stopped asking Stack Overflow and started asking AI, they gained speed and lost the community-validated understanding that Stack Overflow’s answer architecture produced. Artisanal coding is, in part, the practice of maintaining the diagnostic relationship with the underlying system that Stack Overflow answers encoded: not just the fix, but the reason for the fix, and the reason the reason matters.

Automation Dependence
Automation Dependence

Origin

The concept appears explicitly in Spolsky’s essay of the same name, written as generative AI tools were transforming the profession he had spent his career analyzing. The essay argued that AI-generated code, for all its technical competence within well-documented patterns, lacks the qualities that distinguish code written by a human engineer who has thought carefully: the elegance that comes from understanding the problem deeply enough to see its simplest solution, the efficiency that comes from choosing the right abstraction level for the specific context, and the intentionality that comes from making design decisions on the basis of reasoning that can be reconstructed and explained.

The Law of Leaky Abstractions
The Law of Leaky Abstractions

The essay’s argument extends Spolsky’s earlier “Things You Should Never Do, Part I”—his 2000 case against rewriting codebases from scratch—into the AI era. The case against the rewrite was that existing code contains enormous amounts of implicit knowledge: bug fixes, edge case handling, hard-won workarounds that look like mess but are actually a record of every failure the system has encountered and survived. AI-generated code creates a version of the rewrite problem from the beginning: code that may contain important patterns from the training data and may not, with no way to tell the difference without understanding what the code is doing and why.

The Diagnostic Gap
The Diagnostic Gap

Key Ideas

Design reasoning, not just output. Artisanal code differs from generated code not in what it does but in what accompanies it: the engineer’s understanding of why it is structured the way it is. This understanding is not necessarily documented; it may be tacit, carried in the engineer’s head rather than written in comments. But it is present, and its presence means that when the system needs to change—when requirements shift, when the system must scale, when a new vulnerability is discovered—the engineer can distinguish the decisions that are essential to the system’s correctness from the decisions that are arbitrary artifacts of when the code was written.

The Integration Leak
The Integration Leak

The difference from output review. Reading and approving AI-generated code is not the same as artisanal coding. The developer who reviews a pull request and confirms that it produces the correct output has not made the design decisions artisanally. She has confirmed a result. Artisanal coding requires understanding the process that produced the result: which alternatives were considered, which were rejected, and why. For AI-generated code, that process is opaque—the “why” in the human sense does not exist—and the developer who practices artisanal coding must reconstruct it: reading the generated code with the critical attention of someone who is making design decisions, not consuming them.

Tacit Knowledge
Tacit Knowledge

The slow-fast tradeoff. Artisanal coding is slower than uncritical deployment of AI-generated code. Spolsky’s framework is explicit that this is a genuine tradeoff, not a misunderstanding. The developer who practices artisanal coding ships fewer features per sprint. She is also the one whose features do not produce integration leaks, assumption failures, and security vulnerabilities at the moment when the production system is under load and the dashboard is red. The tradeoff is between short-run productivity and long-run system integrity, and the cost of choosing the former is paid at the worst possible moment.

The professional standard implication. Artisanal coding implies a professional obligation that the field has not yet formally established: the obligation to understand the code one deploys, regardless of how it was generated. Aviation established mandatory hand-flying hours when it recognized that automation dependence was eroding pilots’ ability to hand-fly at the moments automation failed. Automation dependence in software is Spolsky’s law at the institutional level: not a question of individual competence but of whether the profession as a whole will insist on the standard that artisanal practice represents.

Debates & Critiques

The concept has attracted both nostalgic endorsement and impatient dismissal. The nostalgic endorsement treats artisanal coding as a defense of hand-craft against industrialization, and thereby misses its point: Spolsky is not against power tools, he is against deploying tools whose failure modes you cannot diagnose. The impatient dismissal argues that the standard is unrealistic given the scale and speed of AI deployment, and that the profession will adapt through iteration—learning from failures as they occur rather than preventing them through costly upfront understanding. Spolsky’s counter is that iteration is viable when failures are small and reversible, and increasingly unviable as AI-generated systems become critical infrastructure. A fintech platform processing thousands of transactions is not a context in which iterating through a race condition at production scale is a reasonable strategy. The deeper argument, which the debate rarely reaches, is about what “understanding” means in the context of AI-generated code. Artisanal coding requires understanding the system, but a system large enough to require AI to build may be too complex for any single person to understand fully. Mokyr’s framework suggests the institutional response: distributed understanding through team structures, documentation practices, and knowledge-sharing protocols that ensure someone, somewhere in the organization, understands each part of the system well enough to diagnose the failures that Spolsky’s law guarantees will arrive.

Further Reading

  1. Joel Spolsky, “Artisanal Coding,” Joel on Software—the essay that named the concept
  2. Joel Spolsky, “Things You Should Never Do, Part I,” Joel on Software (April 2000) — the intellectual predecessor: implicit knowledge in existing code
  3. Joel Spolsky, “The Law of Leaky Abstractions,” Joel on Software (November 2002) — the law that artisanal coding is the response to
  4. Michael Polanyi, The Tacit Dimension (University of Chicago Press, 1966) — the philosophical foundation: we can know more than we can tell
Explore more
Browse the full You On AI Field Guide — over 8,500 entries
← Home0%
CONCEPTBook →