Good takes effort

In software there is incidental work and inherent work. We adopt tools to do the incidental work so we can focus our creativity on the inherent complexity, which is where the value is.

I’ve been reflecting on all the swirl around vibe coding and AI code generation and come to a comforting conclusion: Good work takes effort, and there is no shortcut for that.

I’ve been doing a lot of AI assisted coding lately, using both Cursor and Claude Code. To get good output from these tools has taken a lot of effort. I don’t mean generating piles of shit code and then spending days reviewing and refactoring it. It's really the up-front effort and obsessive iteration which leads to good work.

I get there is a strong resistance to using AI tools as a craftsperson, and I understand that. An example from the No AI Webring manifesto:

Are you sick of seeing this nonsense pop up everywhere; of seeing the Web polluted by machine-generated drivel; of seeing idiots the world over go 'gosh' and 'wow' at meaningless pastiches because they've never appreciated a real work of art and don't understand why others do? Sick of no points of view, no skill, no originality, no creativity, no value? So let's get that nonsense out of here and acknowledge that human creativity is fundamentally irreplaceable.

But, that knee jerk reaction is not correct.

AI coding tools are just that; tools. Like all the tools we’ve had before – higher level programming languages, mainframe terminals, x86 architecture, laptops, object oriented and functional programming paradigms, integrated development environments, and so on – they make the work easier, but the level of effort required to create something good has never decreased. As particular parts of building software have been abstracted away, or done for us, we’ve been able to take on more complex ideas, which means more of our effort is going into the inherent difficulties of software development rather than the accidental difficulties.

Those of you who are familiar with Fred Brooks No Silver Bullet paper know exactly what I’m talking about.

Good work requires good taste, a point of view, skill, and creativity. All of those attributes require experience, and experience takes time and effort. You have to actually build stuff, get users to use it, maintain it, fix it, refactor it, and live with it for long periods of time. Acquiring that experience takes time and effort. There are no shortcuts.

At each step function improvement in development, like high level programming languages or AI helpers, we shift more of our effort from accidental work to intentional work, freeing up our brain cycles to work on more complex problems. The stuff our tools cannot do for us.

This means the effort remains constant, while complexity and scope can increase. It doesn’t mean we should go out and create more complex software. It does mean we can chase more complex problems.

AI assisted programming is not going to cause brain atrophy; at least not for people who stop using it to make their horse faster, and instead go out and build a race car.