My new basic stance
One strange aspect of this moment in software is that we have so little idea what others' work lives are like. Tools are proliferating, people are adapting (or not) in different ways, and there's a lot of hype and speculation. I've never been more uncertain about what I'd see if I picked a random programmer and looked over their shoulder.
Perhaps I can help the situation by sharing my current standard programming stance:
- There's a handful or two of Claudes,1 each corresponding to something I'm doing.
- There's the thing I'm working on (usually a Web interface to something), which is my basic visual-cognitive reference as I think about what I want to be happening.
- There's me, consuming information from (1) and (2) and interacting with both the Claudes and the product, as the situation requires.
I find various aspects of this striking:
- So much of my real-time reasoning is mediated by the product itself. Very often, in the before-times, I'd reason about a problem and then reason mostly about the code, looking at the code, with the product figuring in my reasoning by (i) having been part of my initial plan and (ii) constraining decisions as I remember things about it on the fly. These days I often stare at the product I'm working on, as a user, all day.
- Obviously I need to keep as much of the system in mind as I can, so that I'm not just throwing wishes into the machine. This is, structurally, not new; I've always had to think about the system while planning. It's just more tempting to get ahead of oneself now.
- As I've written about several times now, observability is what makes this work. The more and better information the system exposes programmatically, the better the Claudes can reason about it, and the better I can reason about it (in admin panels, via Claudes, or manually). Another underrated benefit of "observability maximalism" is that it helps me keep the system more vividly in mind. The less effort it takes to learn about the system's data or its components' functioning, the more brainpower is left over to be thinking about the whole system.
- This is closest to2 "level 6" of Steve Yegge's eight levels of AI adoption. Although I can imagine some fancy orchestrating tools I'd like to build, so far it hasn't been worth it to try: it would require a large investment, I don't think it would make me sufficiently more productive, and I don't have a sufficiently clear vision of what a great orchestrating tool would look like. (I'm really quite grateful to the people who are working hard in this area.)
This approach will probably seem radical to some (I rarely work in an IDE) and primitive to a few (I don't use those cutting-edge orchestrators and rarely have more than six or so Claudes at work). It's quite different from what I was doing a year ago, but I hope it is a low-hype, common-sense, effective way to use AI.