Build1 publisher3 min readPublished
37signals now treats hand-written code as a bug to trace back to its agents
37signals has made hand-written code an exception handled like a Sentry bug and is rebuilding HEY as six native apps on a Rust backend. DHH's line counts come from his own slides, so the policy and the rebuild are what an engineering lead can actually judge.
The Engineer · Build desk
Drafted by a language model from the sources cited here and checked against its claim ledger before publication. How we use AISend a correction

What happened
- DHH said he has not written code for five months and described himself as retired from professional programming.
- He dates the change to November 24, 2025, when Opus 4.5 shipped, and said that from Fable 5 in June he wanted to merge agent output as it came.
- He estimated a Rust mail server for HEY would use 99% less CPU and 95% less memory, with one Raspberry Pi carrying peak load; an explainer video called it a rough estimate.
- When Basecamp 5 designers vibe-coded features in spring, each PR looked fine, but 20 to 30 merged left the architecture like Swiss cheese and the team returned to manual review.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint With nobody reading the code, external tests and observability become the only review, and in the reviewer's notes the keynote did not say who builds or reads them.
- decision A lead adopting the policy has to name who opens unread code during an outage; the reviewer thinks it holds where the decider is CTO and co-owner and pays for a wrong call, and doubts it in large audited codebases.
- exposure Swapping a shared abstraction for many copies lets one copy of, say, mail-sending logic drift to a different policy unnoticed, so safe sync depends on the agent knowing every copy.
- cost Unread code still has to be maintained, so the August Rust may be maintenance surface as much as output, and according to the reviewer the slides cannot show which.
I think the part of this policy worth copying is how it routes failures. Each hand edit becomes a defect report against the agent setup. 37signals did not ban hand-coding. A few weeks before the keynote it took hand-coding out of normal work and made it the exception [1]. A person who has to edit code fixes the few lines. Then they work out why the agent could not produce what was wanted, and fix the "factory" that makes the code [2].
His slides put his output at 647,000 lines over 21 years before agents and 321,000 in the 20 months since [7]. That works out to about 2,570 lines a month before and about 16,000 after, roughly six times as many [1]. August 2026 alone came to about 150,000 lines [8]. That one month is about 47% of the agent-era total [2]. Most of it is verbose Rust that DHH has said he does not read [9].
The language mix on the same slide is harder to dismiss. Ruby was 55% of his code across 21 years and 3% across the last 20 months, and he now uses 12 languages every day [10]. He said he built a calculator for Omarchy with seven minutes of prompting, knowing neither C++ nor Qt [11]. A reviewer of the keynote, writing on dev.to, found that more persuasive than the line counts because it shows how much one person can now work on [12].
The Rust backend follows from not reading the output. DHH calls Rust inhuman for people to write. His argument is that fast, light Rust is perfect when nobody has to read it [13]. The HEY apps he showed on stage had been kicked off about a week earlier [4]. His mail-server savings are an estimate on HEY's own workload [14]. For them to hold at another company, that company's mail service would have to be spending nearly all its CPU on work a Rust rewrite removes. "English is a better programming language than Ruby," he said [5].
DHH judges quality from outside, as a black box. He compared this to a business owner assessing the work of a development team they hired [16]. The reviewer's objection is that a hired team reads its own code, and someone on that team opens it when something breaks overnight [17]. On Basecamp 5, DHH said going back to manual review was the wrong call and the team should have waited for Fable [18]. The reviewer's notes do not show that work being rerun on Fable [18].
The case against abstraction is an odd one to hear from the creator of Ruby on Rails, a framework that has long put DRY first [15]. Agents, he argued, push the cost of duplicating code and keeping the copies in sync toward zero. With hundreds to tens of thousands of processes editing code at once, a shared abstraction becomes the bottleneck [19]. He said there is no blueprint yet, and that methodology and cycle length need rethinking too [20]. He also predicted that by year-end, writing code by hand will stop making economic sense in almost every domain [21].
What to watch
- Production CPU and memory figures from HEY's Rust mail server, the first measured test of DHH's estimate.
- A rerun of the Basecamp 5 features on Fable, with the architecture reviewed after all the merges land.
- Any 37signals write-up of the tests and monitoring it uses to accept code that no one reads.