AI Newsway

3,000 Merged Changes, Zero Rollbacks: Inside Anthropic's Two-Week Speed Sprint

Deterministic CPU instruction counts replaced noisy stopwatch timings as the CI gate, while p75 time-to-typeable on claude.ai fell from 3.1 seconds to 0.55

|6 min read0
AI Summary
Anthropic published an engineering account of a two-week August sprint that made claude.ai and its desktop app about three times faster, merging over 3,000 changes with no rollback. At the 75th percentile, time to a typeable page dropped from 3.1 seconds to 0.55. The team gated CI on deterministic metrics such as Valgrind instruction counts rather than noisy wall-clock timing, and ran more than 150 concurrent Slack threads with Claude in each.
Server infrastructure of the kind behind claude.ai, whose client-side load path Anthropic rebuilt during a two-week performance sprint
Server infrastructure of the kind behind claude.ai, whose client-side load path Anthropic rebuilt during a two-week performance sprint

The most portable idea in Anthropic's new engineering post is not that claude.ai got about three times faster in a fortnight. It is the tripwire the team left behind: a CI gate on CPU instruction counts that can only ever move downward, which turns every future pull request into a performance test.

Key takeaways

  • At the 75th percentile, a fresh claude.ai load reached a typeable page in 0.55 seconds, down from 3.1; a new Claude Code session went from 0.8 to 0.3 seconds.
  • More than three thousand changes merged across the two weeks with no customer-facing incident and no rollback.
  • Two hot paths saw instruction counts fall 48% and 31%, which translated to wall-clock reductions of 78% and 44% β€” the proof that let the team gate CI on counts instead of timings.

Why instruction counts, and not stopwatches

Latency is what a user feels, but a millisecond reading is too noisy to fail a build on. Anthropic's workaround was to hunt for numbers that are deterministic instead of representative, then prove each one tracked real latency before trusting it.

The proof case ran on the routine that assembles a conversation's message tree. Profiling under Valgrind showed a quarter of its instructions were megamorphic dictionary lookups, resolving the same message ID three separate times. Fixing that, and a status-line scanner in Claude Code output, cut instructions by 48% and 31%. Wall-clock time on the same paths fell 78% and 44%. Only then did the counts become permanent ceilings in CI, with a nightly job lowering each ceiling whenever a build comes in under it.

The discipline around that mattered as much as the mechanism. A benchmark that turned out flaky, or that moved without moving user latency, was deleted rather than tolerated β€” otherwise the model climbs a hill nobody wanted climbed. React commit counts, V8 coverage call counts, style recalculations and DOM mutations all went through the same audition.

What the 3x is measured against

Scope was set before anything shipped. Claude read usage telemetry through a Datadog MCP server and picked out four journeys accounting for 95% of activity β€” launching the app, starting a conversation, opening an old one, and sending a message. Those became thirteen instrumented measurements spanning web and desktop, each one bounded by a user interaction at the start and a render at the end.

Twelve of the thirteen targets were met by day three. The wins were unglamorous: a static composer baked into the HTML so typing works during React initialisation, a precompiled V8 code cache so the desktop shell skips a recompile, a composer that stays mounted between conversations, session prefetching on hover, and a 90% cut in sidebar re-renders. Anthropic puts the aggregate saving at tens of thousands of user-hours of waiting per day.

The bugs that only counting could see

What followed reads less like a performance backlog than an audit of things no dashboard had been watching. A hook census found 6,900 hooks re-rendering the composer on every keystroke. One :root:has() selector was charging 24 milliseconds to every DOM change. A forgotten location.reload() was firing half a million times a day without appearing in any load metric. Identical cache snapshots were being cloned into IndexedDB twice a minute on the main thread.

The strangest one was a second-long freeze on finished code blocks, traced to em dashes. A single non-Latin-1 character forces V8 to hold the entire string as UTF-16, which drops every syntax-highlighting regex onto a slower two-byte path. Twenty lines that copy the block into a one-byte string first made it go away.

Layout shift makes the point most directly. Each sidebar jump scored about 0.008 on Cumulative Layout Shift, well inside the 0.1 threshold that marks a page as good β€” so the standard metric said nothing was wrong. Reading the raw Layout Instability API and tagging shifts by page region instead showed that 31% of web loads moved something after the page was already usable.

Zero rollbacks is the harder number

Three thousand merges in two weeks is a throughput claim. No incidents and no rollbacks, across hot paths as exposed as first paint and the composer, is a process claim, and it is the one worth copying.

The arrangement was conventional in its parts: automated review plus at least one human approval on every pull request, unit tests written before the optimisation they protect, anything user-visible behind a short-lived flag, and staged rollout from employees to 1% of users to everyone. What was unconventional was the volume β€” close to two hundred flags opened and more than half retired within the fortnight, with roughly a third of all pull requests carrying new telemetry or guardrails rather than fixes. Instrumentation was treated as part of the change, not a follow-up ticket.

Why it matters

Measurement used to be step zero: ship a metric, wait for data, then begin to understand the problem. With an agent that can optimise against any number it is handed, measurement becomes step one of the climb β€” and the scarce resource shifts to deciding what deserves a number at all. That is the same inversion visible in other agent-heavy engineering efforts, from a 832,000-line Rust rewrite to Perplexity keeping deploy rights human while agents wrote the code.

Anthropic is careful not to oversell it. Its own write-up says the loop was productive but not autonomous: targets, tradeoffs and approvals stayed human, and a standing task was pushing the model to be less conservative about scope than it is by default. The uncomfortable implication for teams reading this as a template is that the bottleneck moves to review capacity and to taste about what to measure β€” neither of which scales by adding agents.

FAQ

Which model ran the sprint?

Anthropic says it used Claude Tag in beta, running an internal research model it describes as roughly comparable to Opus 5.5. All of the work was coordinated inside one shared Slack channel rather than a dedicated tool.

Were the changes reviewed by humans?

Yes. Every pull request went through automated review and required at least one human approval, and user-visible changes shipped behind feature flags with incremental rollouts to employees, then 1% of users, then everyone.

Can a team copy this without an internal model?

The mechanism is model-agnostic: prove a deterministic metric correlates with latency, then ratchet it in CI. The throughput is not β€” three thousand merges in two weeks assumed review capacity and instrumentation that most teams would have to build first.

How do you feel about this article?

SJ

Discussion

Sign in to post
Loading...

Related articles

Claude Code Projects Returns as a Coordinator That Runs Parallel Cloud Threads
Developer Tools

Claude Code Projects Returns as a Coordinator That Runs Parallel Cloud Threads

Anthropic's redesigned Claude Code Projects puts a coordinator above worker threads, each a full cloud session on its own branch, with shared memory.

Seung Jung6 days ago
Researchers Reached OpenAI's Internal Repo Through a Forum Image Bug
Developer Tools

Researchers Reached OpenAI's Internal Repo Through a Forum Image Bug

Hacktron AI chained a libheif heap overflow with an OpenAI SSO flaw to reach employee Codex accounts and the openai/openai monorepo. Both bugs are patched.

Seung Jung6 days ago
Plugin4Shell: A Zero-Click RCE Hits Claude Code, Codex, Copilot and Gemini CLI
Developer Tools

Plugin4Shell: A Zero-Click RCE Hits Claude Code, Codex, Copilot and Gemini CLI

A zero-click RCE called Plugin4Shell bypasses the commit pinning AI coding agents use to keep plugins trustworthy. Two of four vendors have shipped a patch.

Seung Jung6 days ago
Companies Are Now Licensing Their Private Source Code as AI Evaluation Data
Developer Tools

Companies Are Now Licensing Their Private Source Code as AI Evaluation Data

A consumer product with more than 200,000 users and a fintech platform that has processed over 100,000 bank statements have done something unusual with their pr...

Seung Jung9 days ago
832,378 Lines of Rust in 14.5 Weeks: Inside an Agent-Run Rewrite
Developer Tools

832,378 Lines of Rust in 14.5 Weeks: Inside an Agent-Run Rewrite

GitHub converted 430,000 lines of TypeScript into 832,378 lines of Rust in 14.5 weeks using coding agents. Memory use fell from 1,383MB to 126MB.

Seung Jung5 days ago
Meta Hands WhatsApp Business Setup to Claude and Codex via MCP
Developer Tools

Meta Hands WhatsApp Business Setup to Claude and Codex via MCP

Meta has opened WhatsApp Business account setup to AI coding agents, publishing a WhatsApp Business Tools MCP server that lets Claude Code, Claude Desktop, Open...

Seung Jung8 days ago