Key Takeaways
- David Heinemeier Hansson shifted his daily engineering workflow from single-threaded writing to managing 16 parallel AI agent threads.
- He uses Herdr, an internal tool built on top of tmux, to trigger terminal bell alerts whenever an agent finishes a task and needs review.
- He links clusters of mini PCs across his Malibu and Copenhagen offices using Tailscale, accessing all machines directly from his phone or laptop.
- The developer role changes from typing syntax to acting as a director and editor, producing hundreds of lines of verified code per hour.
The Method
Most software developers treat coding as a serial task. You open an editor, write a function, run a test, and fix the bugs. Hansson abandoned that loop entirely after finding that running a single AI assistant on a local laptop created an artificial bottleneck.
“Programming with agents requires a different tool set. It really does,” Hansson said. “And the main change here is that you're going from single thread programming in your head to parallel processing.”
To break the single-thread limit, Hansson built a distributed terminal setup across physical machines:
1. Distribute compute across dedicated hardware. Instead of choking one laptop with multiple heavy tasks, Hansson assembled clusters of mini PCs across locations. “I went on this crazy phase just about a month ago realizing that doing this work on a single machine is not fast enough. It's like I've discovered multi-core programming, but I only have two cores. I'm like, 'What if I had 16 cores? What if I had 32 cores? What if I had 64 cores?'”
2. Mesh the machines via Tailscale. Hansson uses Tailscale to unite separate physical environments into one flat network. “Tailscale is essentially turning all the computers you have into a local network wherever you are. Like right now on my phone, I have direct access to all the computers in my Malibu office. I also have access to all my computers in my Copenhagen office.”
3. Manage queues with terminal user interfaces. In the terminal, Hansson relies on Herdr, a wrapper around tmux designed for agent swarms. “And Herdr is essentially tmux plus agent notifications. So whenever your agent is done and needs something for you, it goes ding, a little bell telling you it's ready for its human.”
By keeping 16 threads active, Hansson acts as an editor reviewing incoming pull requests and architectural decisions in real time. “Now I'm running 16 threads. I'm producing at some times hundreds of lines of hour or hundreds of lines of code per hour.”
Where This Breaks Down
This setup demands massive cognitive energy. Managing 16 concurrent threads means context-switching every few seconds. If you do not have clear architectural boundaries in your code base, parallel agents will step on each other, write conflicting abstractions, and generate hundreds of lines of plausible technical debt.
Parallel generation also magnifies sloppy specifications. If your initial prompt lacks clear test cases or clear domain constraints, an agent will run in the wrong direction at high speed. You end up spending more time unwinding bad pull requests than you would have spent writing the code manually.
What to Do With This
Pick two distinct, well-tested features from your backlog this week. Split your terminal using tmux or two terminal windows, assign each task to an independent agent session, and restrict your own input strictly to reviewing diffs and answering clarifying questions. Do not touch the keyboard to write raw syntax until both tasks complete.