<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alexis Albouze</title>
    <description>The latest articles on DEV Community by Alexis Albouze (@alexisalbouze).</description>
    <link>https://dev.to/alexisalbouze</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3889596%2Fa51cbb13-80ee-45d1-b4e5-415059ccd6cb.png</url>
      <title>DEV Community: Alexis Albouze</title>
      <link>https://dev.to/alexisalbouze</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexisalbouze"/>
    <language>en</language>
    <item>
      <title>I Stopped Using Claude Code 'Correctly' and Got 3 Faster</title>
      <dc:creator>Alexis Albouze</dc:creator>
      <pubDate>Mon, 20 Apr 2026 23:58:20 +0000</pubDate>
      <link>https://dev.to/alexisalbouze/i-stopped-using-claude-code-correctly-and-got-3x-faster-1ci2</link>
      <guid>https://dev.to/alexisalbouze/i-stopped-using-claude-code-correctly-and-got-3x-faster-1ci2</guid>
      <description>&lt;p&gt;I was three hours into debugging a race condition when Claude Code told me it needed to compact the conversation.&lt;/p&gt;

&lt;p&gt;You've seen this. The scroll starts. Twelve tool calls get collapsed into "I searched for the session handler." Eight file reads become "I reviewed the auth flow." All the concrete details — the exact line where the token was mutated, the specific test that flaked — gone. What remains is Claude's polite summary of what it thinks happened, which is not quite what happened.&lt;/p&gt;

&lt;p&gt;I fixed the bug an hour later, in a new conversation, without Claude's help.&lt;/p&gt;

&lt;p&gt;That night I rewrote how I use this tool. What follows is six months of production patterns that took me from "AI assistant" to "AI team." The throughline is one idea most people miss:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stop treating Claude Code as one agent. Start treating it as a company.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The feature nobody explains well
&lt;/h2&gt;

&lt;p&gt;Subagents are the answer. You've probably seen them mentioned. You've probably never used them seriously. I didn't, for six months.&lt;/p&gt;

&lt;p&gt;Here's what a subagent actually is, stripped of marketing: it's a Claude process that runs in its own context window, does a scoped task, and returns only its final message to the caller. Thirty tool calls inside. A 200-word summary out.&lt;/p&gt;

&lt;p&gt;That's it. That's the whole feature.&lt;/p&gt;

&lt;p&gt;And that's why it matters: your context is your most expensive resource. Not your tokens — your &lt;em&gt;attention&lt;/em&gt;. Every time Claude Code compacts, you lose fidelity. Every time your conversation window fills with &lt;code&gt;git diff&lt;/code&gt; output, the model's reasoning narrows. Subagents are how you pay context somewhere else.&lt;/p&gt;

&lt;p&gt;The rest of this post is five ways I do that in production, and the ugly parts nobody mentions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 1: Swarm before you search
&lt;/h2&gt;

&lt;p&gt;Your instinct when Claude says "I'll research this" is to let it do one search at a time. That instinct is wrong.&lt;/p&gt;

&lt;p&gt;Last week I needed three things to land a feature:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How does our existing auth middleware handle token refresh?&lt;/li&gt;
&lt;li&gt;What columns does the &lt;code&gt;users_sessions&lt;/code&gt; table actually have?&lt;/li&gt;
&lt;li&gt;Is there a rate limiter I can reuse, or do I need to build one?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those three questions have nothing to do with each other. There is no reason to answer them sequentially. I fired them in one message, three subagents, parallel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task("How does auth middleware handle token refresh? Read
     apps/api/src/middleware/auth.ts and trace it.")

Task("Dump the current schema for users_sessions — show me
     every column, type, and constraint.")

Task("Find any rate-limiting utility in this repo. Look in
     middleware/, lib/, and package.json.")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Forty-seven seconds later I had three clean summaries. Sequential, that same work takes me six minutes and leaves my main context bloated with file contents I don't need.&lt;/p&gt;

&lt;p&gt;The gotcha: don't do this when the questions depend on each other. If the answer to #1 tells you where to look for #2, parallel is wasted — you're just firing blind on #2.&lt;/p&gt;

&lt;p&gt;Parallel when independent. Sequential when you're &lt;em&gt;investigating&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 2: Get a second opinion from someone who wasn't in the room
&lt;/h2&gt;

&lt;p&gt;A few months ago I shipped a migration that passed local tests and broke production in a way that cost us 40 minutes of partial downtime. The bug wasn't in the code. It was in my &lt;em&gt;reasoning&lt;/em&gt; — I'd convinced myself the backfill was safe, walked Claude through my logic, and Claude had nodded along.&lt;/p&gt;

&lt;p&gt;Of course it nodded. It had the same context I did. The same blind spot.&lt;/p&gt;

&lt;p&gt;Now, before any migration ships, I spawn a fresh reviewer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;subagent_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;"code-reviewer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;"Review migration 0042_user_schema.sql.
  Context: adding NOT NULL column to a 50M-row table with
  backfill default. I believe this is safe under concurrent
  writes. I want an independent verdict, not validation.
  Tell me if it breaks and exactly where."&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The subagent has no memory of my reasoning. No stake in my framing. It reads the SQL, pulls up docs on lock escalation, and tells me whether my instinct was right.&lt;/p&gt;

&lt;p&gt;Eight out of ten times: it was. Two out of ten: a thing I'd missed. Those two are worth the pattern.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip I learned the hard way&lt;/strong&gt;: explicitly tell the reviewer not to defer to you. Otherwise it'll say "this looks safe, but if you're unsure..." and you're back where you started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 3: Delegate reading to someone with time
&lt;/h2&gt;

&lt;p&gt;Our monorepo is 280k tokens of TypeScript. I can't fit it in a context window. Neither can Claude.&lt;/p&gt;

&lt;p&gt;But I can send a subagent to go read it.&lt;/p&gt;

&lt;p&gt;Last month I inherited a codebase module I didn't write. Before I touched anything, I asked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task(
  subagent_type="code-explorer",
  prompt="How does the billing module authenticate and
  authorize requests? I'm in apps/api/src/billing/. Trace
  the full flow from API route to the database. I want the
  3-4 files that matter, the pattern, and any gotchas."
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Twelve minutes of the subagent reading things I didn't have time to read. I got back: "The pattern is X, the files are Y, the gotcha is that auth checks run &lt;em&gt;after&lt;/em&gt; rate limiting, which is probably a bug." &lt;/p&gt;

&lt;p&gt;I was writing my first PR forty minutes later. Without the subagent I would've spent that forty minutes opening files and losing the plot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The ugly part&lt;/strong&gt;: subagents hallucinate confidently. They'll tell you a helper function exists in a file where it doesn't, because they summarized the file in a way that felt right. I now treat every subagent summary as a hypothesis, not a fact. Trust but grep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 4: Hire specialists
&lt;/h2&gt;

&lt;p&gt;This is where the "company" metaphor gets real.&lt;/p&gt;

&lt;p&gt;A general-purpose agent is a generalist. That's fine for most things. But sometimes you want a &lt;em&gt;specialist&lt;/em&gt; — something with its own system prompt, its own tool allowlist, its own strict policies.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;~/.claude/agents/&lt;/code&gt; I keep small &lt;code&gt;.md&lt;/code&gt; files that define custom subagents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;code-architect&lt;/code&gt;&lt;/strong&gt; — designs features before I write them. Tools: read-only + &lt;code&gt;TodoWrite&lt;/code&gt;. Never writes code. Returns blueprints. This stops me from vibe-coding into a corner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;code-reviewer&lt;/code&gt;&lt;/strong&gt; — adversarial code review. Tools: read-only. Prompted to find problems, not approve. Explicit instructions to push back on weak reasoning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;claude-code-guide&lt;/code&gt;&lt;/strong&gt; — answers "can Claude Code do X?" Tools: &lt;code&gt;WebFetch&lt;/code&gt;, &lt;code&gt;Read&lt;/code&gt;, &lt;code&gt;Grep&lt;/code&gt;. No &lt;code&gt;Write&lt;/code&gt;. No &lt;code&gt;Bash&lt;/code&gt;. Ever. It's a documentation oracle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each is thirty lines of YAML + prompt. Each is version-controlled. Each does one thing really well.&lt;/p&gt;

&lt;p&gt;The move: whenever you find yourself writing the same kind of prompt twice, that's a subagent waiting to be born. Extract it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 5: The autonomous pattern (use with caution)
&lt;/h2&gt;

&lt;p&gt;The pattern I'm most careful with.&lt;/p&gt;

&lt;p&gt;Sometimes a task is so well-specified that I can hand it to a subagent and walk away. "Rename &lt;code&gt;getUserById&lt;/code&gt; to &lt;code&gt;getUserProfileById&lt;/code&gt; across the codebase, update tests, report." Fifteen minutes of my time, ten minutes of subagent work, done.&lt;/p&gt;

&lt;p&gt;The conditions that make this safe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The task is &lt;strong&gt;fully specified&lt;/strong&gt; — no judgment calls left to make.&lt;/li&gt;
&lt;li&gt;The work is &lt;strong&gt;reversible&lt;/strong&gt; — I'm on a feature branch, sandbox, or can &lt;code&gt;git reset&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I don't need to watch it — I'm not going to learn anything from watching.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conditions that break this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Refactor this for clarity" — subjective, the agent will pick a direction I hate.&lt;/li&gt;
&lt;li&gt;"Fix all the linter warnings" — some should be fixed, some should be ignored, the agent can't tell.&lt;/li&gt;
&lt;li&gt;"Clean up the test suite" — judgment calls everywhere.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The heuristic: if you can write the task as a ticket for a junior engineer, it's safe to hand off. If you couldn't, you're about to get surprised.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four non-obvious things that will save you
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Every subagent prompt must stand alone.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The subagent has zero memory of your conversation. If you write "Fix the bug we discussed," it'll do something — probably wrong — and report success with confidence. Every subagent prompt should read like a ticket filed by someone walking into a standup: &lt;em&gt;file, location, symptom, constraint, success criterion&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Never delegate synthesis.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's a mistake I made for weeks. I'd research a problem, get three subagent reports, and then write: "Based on the findings, fix the bug." That sentence pushes the hardest part — understanding — onto the subagent. The subagent hasn't read the three reports. The subagent has no idea what the pattern is across them.&lt;/p&gt;

&lt;p&gt;You synthesize. You name the exact change you want. Then you delegate the &lt;em&gt;typing&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The parent can't see raw outputs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you need the full test runner stdout, run the test tool directly. A subagent will run the tests, summarize them as "all 12 tests pass," and you won't have the one failure case buried in stdout.&lt;/p&gt;

&lt;p&gt;Subagents for summaries. Direct tools for details. Know which one you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Agents lie in predictable ways.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They claim tests passed when they didn't read the last line. They claim files exist when they summarized an import statement as an implementation. They claim the pattern is X when X was the first pattern they considered and they stopped looking.&lt;/p&gt;

&lt;p&gt;Every subagent summary is a hypothesis. Verify by reading the diff, greping the file, running the command. This one habit separates people who ship with AI tools from people who ship bugs with AI tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shift
&lt;/h2&gt;

&lt;p&gt;I used to write long prompts to a single Claude. More context, more instructions, more careful framing. It kept running out of room, losing fidelity, hitting compaction.&lt;/p&gt;

&lt;p&gt;I now write short prompts to &lt;em&gt;teams&lt;/em&gt; of Claudes. One does the research. One does the review. One does the writing. The main conversation stays focused on what it should be focused on: the decision, not the typing.&lt;/p&gt;

&lt;p&gt;That's the 3×. Not because any single subagent is fast. Because the bottleneck was never the typing. The bottleneck was my context, and I was treating it like it was free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Going deeper
&lt;/h2&gt;

&lt;p&gt;If you want to actually build this kind of workflow end to end — custom subagents wired into hooks that run checks on every save, skills that encapsulate your team's repeatable patterns, MCP servers that give agents access to your internal systems — the gap between reading about it and doing it is real.&lt;/p&gt;

&lt;p&gt;I run hands-on sessions in Paris at &lt;a href="https://www.the-intelligence-academy.com" rel="noopener noreferrer"&gt;Intelligence Academy&lt;/a&gt; where we build this stack in a week: Claude Code, Cursor, Supabase, the works. If that's the path you want, it's the fastest one I know of.&lt;/p&gt;

&lt;p&gt;Otherwise, the smallest thing you can do tomorrow: write one &lt;code&gt;.md&lt;/code&gt; file in &lt;code&gt;~/.claude/agents/&lt;/code&gt;. One specialist. One job. Use it once. You'll understand what I mean about the shift.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What subagent patterns work for you? I want to steal the ones I haven't tried.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
