Featured image of post Fourteen projects, one head

Fourteen projects, one head

Agents made the doing cheap. What fourteen sessions cost is walking into each one cold, and the one head doing the walking.

This post spent most of a morning sat in a terminal pane waiting for me. It wasn’t stuck and it wasn’t hard, I’d just bounced between five other panes that were shouting louder, and every time I glanced back at it there was a perfectly reasonable question on the screen that I didn’t have the room in my head to answer yet (which is fitting, given what it’s about).

Fourteen was an accident

I didn’t set out to run fourteen of anything. What happened is that my projects kept growing and then splitting into more and more logical pieces (a library becomes a core module and four adapters, a tool sheds a package that deserves a life of its own), and every piece wanted a session of its own working on it. Then one day I looked up and I had fourteen active sessions on fourteen different projects.

Oddly, fourteen turned out to be the limit of my dev server rather than the limit of me. It simply won’t hold any more, and I suspect the number would have crept higher if I’d had the hardware (which says more about me than it does about the server).

My own limit is lower, and it’s been very consistent once I started paying attention to it. Up to about eight, I’m fine, my attention holds and I can keep a picture of every stream in my head. At ten it gets hectic. By fourteen my head starts throbbing and promising me a crushing migraine if I don’t back off quickly… so fourteen is for short bursts, and only short ones.

Every pane is a doorway

You know the feeling of walking into the kitchen and forgetting what you went in there for? There’s a name for it, the doorway effect, and if you fancy a search, a psychologist called Gabriel Radvansky spent a fair while showing that walking through a door really does make you forget (as a once-would-be psychologist, I find that massively satisfying). Your brain treats the doorway as the end of one scene and the start of another, and files what you were holding as belonging to the last room.

Switching panes does exactly that to me, fourteen times over. Agents have made the doing cheap, so cheap that it’s no longer the bottleneck. What costs me now is the arriving: walking into a pane cold, from a different project, with eight or so other ideas still rattling about upstairs, and working out what this one needs from me before I can give it anything.

And the thing that makes arriving expensive is what’s waiting on the other side of the door. The hardest bit is when a model goes a bit rogue and greets me with a wall of text, part reasoning and part answer, with whatever it needs from me buried somewhere in the middle. Separating those out takes time I haven’t got, and with neurons firing all over the place trying to keep up with the other panes, having to stop and read a page of stuff that isn’t actionable (or isn’t important to me) is properly jarring.

Sometimes it’s jarring enough that I don’t action it at all. I just quietly deprioritise that pane on the fly and move on to one that’s easier to read, and the project behind it stalls… sometimes for hours, sometimes for days! That’s on me, of course, it’s my triage that leaves it sat there… but nine times out of ten it’s the first screen that decides which way the triage goes.

Making the room readable from the door

So most of what I’ve built over the summer has been about how the sessions talk to me, which is a different problem from how they talk to each other (that one’s had a post or two of its own already).

The biggest one is an output style, which is Claude Code’s way of telling a model how to shape everything it says back to you. One morning I asked a session to write me one, because Opus 5 had started handing me walls of text and I was finding it harder and harder to drive several sessions consistently. It was horrendously verbose (and judging by the grumbling online, I was far from the only one who thought so). The brief was scannable and easy to switch into, but I didn’t want it crippled either. I’ve been at this for twenty-six years, jargon doesn’t scare me and neither does complexity, what I can’t stand is complexity for the sake of it and no clear next step. The Working voice style it turned into opens on the situation exactly as I’d have put it:

Every response is read cold. You are one of many sessions open at once, and the person reading has just switched to this pane after twenty minutes somewhere else.

From there it’s fairly simple stuff. The verdict goes on the first line, so I know from the doorway whether the room is done, stuck or waiting on me. Whatever it needs from me goes on the last line, where I can’t miss it. Numbers instead of adjectives. And, crucially, it doesn’t cap anything: a big spec review still gets thirty findings if there are thirty findings, they just come in a shape I can take in on the way past.

Then there are the references. A bare !18 means something to the session that just opened that merge request, and nothing whatsoever to me arriving from another project, so now every reference comes with a label and a link, every time it’s mentioned. “The race accounting tests MR”, with the link. If my memory happens to have it to hand, the label is enough and I don’t even need to click. And the link gets repeated in every reply, because one given three replies ago has gone beyond the fold and I’m not scrolling back for it. I’m across more than a hundred projects, so a number that only makes sense inside one of them is a lookup I’m going to put off.

Decisions in a spec got the same treatment. They used to be D1 and OQ3 and 2c.2, which is fine while you’re living in that spec and gibberish when you come back to it from three projects away, so now they get names. A heading like “the local-apply decision” tells me what was settled without my having to open anything.

None of it makes a session any cleverer, it just means I can tell from the doorway what the room wants from me.

It looks a lot like management

Talking this through with Claude, the obvious bait it dangled was that I’d come full circle. I wrote a week or so ago about choosing the engineering side of the coin on purpose, and here I am with fourteen workers who never sleep, checking their status and unblocking them, which sounds an awful lot like a manager’s job.

I don’t think it is, quite. What I’m doing all day is still highly technical, I’m just not the one at the keyboard writing every line. It’s moved me past hands-on coding and up into architecture, deciding how the pieces fit, what each module is for and where the edges go, and that’s where I’ve always felt most comfortable. The bits that look like management (the status pages, the handover notes, the labels on everything) aren’t for a team, either. They’re for the one part of the setup I can’t run fourteen of, which is me.

And the hard part isn’t the agents that are always awake. It’s making myself step back and stop. More than a few times Hailey has been very pissed off with me, and told me to stop “clauding” when I’m supposed to be spending time with her and the family. She’s right every time, and the verb has stuck.

Flow, at fourteen

So is it worth it? Ask Hailey and you’ll get one answer. Ask me and I’ll tell you it’s almost addictive.

Back in the pre-AI days I’d perform all sorts of rituals and sacrifices to the coding gods to reach a flow state, that lovely place where the hours vanish and the work just pours out. That’s no less true now. I still get there, it just looks kinda different: moving fluidly between sessions and projects with a speed I could never have had on one single-threaded project, coding by hand. Once the momentum builds it’s very easy to get into that groove, and much harder to get out of it (which is the bit Hailey has opinions on).

Fourteen streams are separate projects doing separate work, so the advantage of having them all running at once is massive, and the throughput has been phenomenal. The changelog page on this site has logged fifteen hundred-odd releases since May, six hundred and sixty-odd of them in August alone! My GitLab activity graph tells the same story, rather less politely:

My GitLab activity graph from December to October: empty until May, when the projects moved over from GitHub, then solid dark squares almost every day from June onwards

(The empty half was me still being on GitHub, before you ask.)

The quality is getting better too, and that’s the bit that keeps me at it. Every refinement to a skill, every new model, every little tweak to the tooling pays off fourteen times over when you’re running at this scale… including, as it turns out, a style guide that makes a model tell me what it needs before it tells me what it thinks.

So this pane gets its answer the next time I walk through its door. Probably.

Built with Hugo · Theme Stack designed by Jimmy