The Sacred and the Profane

Recently I have been building several vibe coded projects.

  • A tool that makes charts and maps from a bunch of data sources
  • A small system that deploys apps
  • A travel planning tool
  • etc.

They work well enough, but in each case I’ve been wondering: Why bother even building these tools when Claude can just do the thing the tool is doing?

Do we need code anymore at all? Code is limited in ways that are good and bad. One of my favorite sayings is that often the best thing and the worst thing about something or someone is the same thing.

Code is limited, precise, specific and grounded. We can’t always figure out how to use it to solve our problems but we can almost always figure out how it does what it does.

Most of the world isn’t like this. The world is full of messy, dynamic problems with unpredictable outcomes. In the range of Kind and Wicked, the world is wicked and code is kind.

As coders we have been using our tools to carve out kind regions of the world, where we can define, execute and enforce rules or data structures which make things “efficient”. We tend those regions carefully. They are sacred. They give us things the wicked world can’t easily deliver: efficiency, repeatability, auditability.

Our ability to do this made us feel special. Like wizards or the priests in the Temple. We brought order out of the chaos. What’s been interesting about LLMs and some other new AI tools is that they are able to straddle the boundary between the two realms. You can give an LLM a bunch of messy content and it will return a nice JSON object. It can also expand a set of clear rules into a rambling, whimsical poem in the voice of a pirate. It seems better at this than we are. It is unsettling!

In each of the projects I am building, I am not just using Claude to build the code. I am building Claude into the code. Part of the UX is always an ability to request that Claude perform some action for you.

It’s not a perfect translator. But it can take a request like “make map of all the pear trees in Seattle,” figure out what you meant, search across data sources for the right dataset, select the appropriate fields, call the APIs, etc. It’s another surface for the UI which also has buttons and screens etc.

The deploy system I’ve been building is shaped this way. It knows about apps and how to deploy them, along with their environment variables and secrets. The tedious part was onboarding each app: every one has a different layout, a different build, etc. I use Claude to look at a new project and propose the config. Claude’s changes for this app were made through a structured (MCP) interface, so we have an exact record of what Claude did. We trapped the fire in a box and the system will now do the same thing, every time.

Claude could do that part too, though, right?

Aren’t we barreling towards a world where all we need is the AI? Say what you want and AI will do it. You don’t need to worry about the details. I hope not. Not only will this be a clear attrition of our agency, I hope it will always be important to people to know what really happened. The world is confusing and opaque enough and I think we don’t need any more layers of abstraction.

I want to be able to be sure about something. I want to see the logs.

I know the world is wicked. I know that AI will allow us to expand our capabilities. But in a world where you can be anything, it’s important to try to be kind.