Years ago I wrote about my enthusiasm for automation of toil. The advent of coding agents is the first time I’ve faced automation of a task I enjoy. I enjoy developing software, and I enjoy coding.
For fun projects, the ‘return’ on the investment is ‘fun’—and sometimes the fun is in the coding, sometimes it’s in solving the problem, and sometimes it’s in solving the problem by coding.
I found programming fairly young. I was lucky to have a computer and a technologist father who encouraged my interest. I enjoyed coding: making something “go”. I also enjoyed solving problems. Initially these were problems like “how do I make it do what I want” or pursuing an interest in a language or tool.
It was fun to write toy programs (and still is!), but what really excited me was solving problems for people. I built a few systems as a high-school student. Being able to turn tasks that required toil into automated tasks was rewarding. I built a tool that automated scheduling students into “career day” slots. It took as inputs all of the available presenters, rooms, and student’s ranked preferences, computed a schedule, and printed schedule cards for everyone. This turned a task that a few volunteers spent hours doing into a much smaller data-entry task, and allowed flexibility that was infeasible with the old approach (like accepting more preferences).
Excelling in a software career means both broadening and deepening the class of problem you solve. Broader problems mean bigger impact and broad problems are often also deep: requiring deep expertise across many parts of a business. Bringing more people into a problem multiplies your impact, which often means shifting from writing code yourself to being a force multiplier as a technology leader.
AI coding agents are power tools for software developers. The work that can be delegated successfully to a machine is machine work. Like power tools for physical materials, their existence will evolve the field dramatically, they will continue to improve, and the way we approach problems will change to effectively use them.
In any field, before work can be automated the lower level work is often delegated to apprentices or other junior participants in the field. This is how apprentices learn and is a way for more experienced craftspeople to get more done. Introducing automation for these tasks means we need to adjust what it means to be an apprentice software developer. We still have to teach the fundamentals, but how we do that and even what we mean by “the fundamentals” will change.
The advent of new forms of power tools able to perform a higher level of work is disruptive. It’ll change how and where we apply human effort.
Craft doesn’t disappear, it relocates.
Using these new power tools to make high quality solutions to problems is still craft, and requires skills. We’re very early in this next step of software creation. Shifts like this have come before—physical wiring to stored programs, machine code to assemblers to compilers to high level languages, and now, this.
New crafts will arise. Injection molding didn’t just speed up making plastic parts, it created the craft of designing for injection molding. The same will happen here.
In the world of solving problems by creating or modifying software, the advent of AI coding agents will accelerate what has always been true: the code is not the point, solving the problems is the point.
The craft of design will become even more important, because accelerating authoring of code will make composable design and good architecture an even larger force multiplier.
Elegance doesn’t go away if you’re using power tools. Using available tools to solve problems is timeless.
I’ll be elaborating more on this over the next several weeks.