2025-09-21

How One Person Becomes a Dev Team with Claude Code

How One Person Becomes a Dev Team with Claude Code

I wanted to augment my productivity. GitHub Copilot worked for single lines. Then Claude Code and Cursor promised a “pair programmer”, but out of the box they delivered an eager helper with a paintbrush in one hand and a sledgehammer in the other. I got Jackson Pollock and Gallagher rolled into one.

I tried add-on orchestration frameworks for Claude Code next, hoping for a short-cut. Each one added more abstraction layers and created a familiar mess with astonishing speed. Meanwhile, I smelled the YouTube AI influencers before I saw them. Selling parlor tricks to solve staged toy problems that funnel people toward a $299 course to learn the “secrets.” No thanks.

Here’s my truth: AI tools like Claude Code are power tools. They require investment: time to actually read the important parts of the documentation, and money to burn while learning. Without proper boundaries, they’ll waste both your time and money.

This article shows how to multiply your efforts with Claude Code by following their own documentation and best practices. Try this BEFORE reaching for third-party add-ons. It’s just a simple folder structure with carefully groomed contents that turn one person into a team.

The Problem Everyone Knows, But Few Seem To Address

You’ve been there. You ask Claude to fix a login bug. Twenty minutes later, it’s refactored your entire auth system, added three dependencies you didn’t ask for, and is halfway through writing migration guides for features that don’t exist yet.

Without boundaries, Claude fabricates its own priorities. You asked for a bug fix, you got a redesign, and probably a broken one.

You know the pain:

  • Complex tasks drift off course without persistent focus on the goal
  • Same prompt, different day, wildly different approach
  • Linear instructions fail because AI wanders into tangents
  • The assistant “helps” by adding improvements you’ll spend hours removing

The solution isn’t just better prompts with clear intent. It’s orchestration.

The Architecture: Just Folders and Files

Forget complex frameworks. This entire system is folders and markdown files that Claude Code already knows how to read:

.claude/
├── agents/
│   ├── dev-team/               # Your specialized team members
│   │   ├── analyst.md          # Requirements & architecture
│   │   ├── test-writer.md      # Writes comprehensive tests
│   │   ├── implementer.md      # Writes production code
│   │   ├── validator.md        # Runs tests & linting
│   │   └── reviewer.md         # Pattern compliance
│   │
│   ├── check-quality.md        # Independent quality auditor
│   └── issue-diagnosis.md      # Bug root cause analysis
│
├── commands/
│   └── orchestrators/          # High-level workflows
│       ├── tdd.md              # Test-driven development flow
│       └── fix-bug.md          # Debugging workflow
│
└── protocols/                  # Shared standards
    ├── agent-output-protocol.md
    └── scratchpad-protocol.md  # State management

That’s it. No npm packages. No Python libraries. Just markdown files that tell Claude Code how to behave in specific contexts. If you want to get fancy, do that later.

The Cast of Characters: Specialized Agents

Instead of one AI assistant trying to do everything, you create specialists. Each agent has a narrow scope and explicit boundaries.

Here’s what the implementer.md agent looks like (simplified from production):

---
name: implementer
description: Implementation specialist who writes production code to pass tests
tools: Read, Write, Edit, MultiEdit, Grep, Glob
---

# Implementer Agent
# Note: Simplified for this article. Production version has more directives.

You write production code following established patterns and requirements.

## Your Scope

**You DO:**
- Write minimal code to make tests pass
- Follow patterns from domain-specific CLAUDE.md files
- Use existing conventions and helpers
- Keep implementation focused on requirements

**You DON'T:**
- Write tests (that's test-writer's job)
- Add features not required by tests
- Refactor unrelated code
- Make architectural decisions

Notice the explicit boundaries. The implementer can’t write tests. That’s someone else’s job. It can’t add features the tests don’t require. This constraint is what makes it a lot more reliable.

My current team roster:

  • Analyst: Breaks down requirements, identifies affected files
  • Test-Writer: Creates test coverage before implementation
  • Implementer: Writes the minimal code to pass tests
  • Validator: Runs tests and linting
  • Reviewer: Checks patterns and standards

There are actually more for research, marketing, UX, product advice. You can hire and fire specialists as you see fit for your own projects.

Each agent can fail. That’s expected and handled by the orchestrator.

Gates: Why Non-Linear Workflows Work

Traditional AI workflows are brittle. One failure stops everything:

START → Step 1 → Step 2 → Step 3 → END
         ↓ fail    ↓ fail   ↓ fail
        STOP      STOP      STOP

Gate-based flows self-heal. Each gate is a checkpoint that can retry with different approaches:

┌──────────────────────────────────────────────────────┐
│  GATE 1: Analysis                                    │
│  ├─ Try analyst agent                                │
│  ├─ Fail? → Try again with more context              │
│  └─ Pass? → Gate 2                                   │
├──────────────────────────────────────────────────────┤
│  GATE 2: Write Test                                  │
│  ├─ Simple? → Orchestrator writes it                 │
│  ├─ Complex? → Delegate to test-writer               │
│  ├─ Fail? → Loop with fixes                          │
│  └─ Pass? → Gate 3                                   │
├──────────────────────────────────────────────────────┤
│  GATE 3: Implementation                              │
│  ├─ Try implementer                                  │
│  ├─ Tests fail? → Fix and retry                      │
│  └─ Tests pass? → Gate 4                             │
└──────────────────────────────────────────────────────┘

Each gate can loop internally until satisfied. Circuit breakers prevent infinite loops. A scratchpad file maintains state across attempts, so agents learn from previous failures.

This isn’t theoretical. Here’s actual gate logic from the TDD orchestrator:

### Gate 4: GREEN Phase (Make Tests Pass)

**Goal: Minimal implementation to make tests pass**

- Simple (under 10 lines): Implement yourself
- Complex: Delegate to implementer agent
- Run tests to verify they PASS
- If tests fail → Determine root cause:
  - Implementation incomplete → Continue
  - Test was wrong → Back to Gate 3
- Log GREEN phase completion to scratchpad

The orchestrator decides at each gate: simple enough to do myself, or delegate to a specialist? Failed attempt? Loop with more context or try a different approach.

Domain Knowledge: The CLAUDE.md Files

Your codebase already has patterns. The CLAUDE.md files capture them:

Project Root/
├── CLAUDE.md                    # Project-wide patterns
├── app/
│   ├── models/CLAUDE.md        # Model patterns & anti-patterns
│   ├── controllers/CLAUDE.md   # Controller conventions
│   └── business_logic/CLAUDE.md # Command patterns
└── test/
    └── CLAUDE.md                # Testing standards

These aren’t vague guidelines. They’re specific instructions:

# app/controllers/CLAUDE.md
# Note: Production version is 200+ lines with detailed patterns

...(earlier patterns)...

## Anti-Patterns (NEVER DO)

### Missing Authorization
# BAD - No authorization
def show
  @post = Post.find(params[:id])
end

# GOOD - Always authorize
def show
  @post = policy_scope(Post).find(params[:id])
  authorize @post
end

### Business Logic in Controllers
Complex logic belongs in Commands, not controllers.

...(more patterns below)...

When the implementer agent runs, it reads these files and follows the patterns. No more explaining your codebase conventions every time.

Example: The TDD Orchestrator in Action

Here’s what happens when you type /orchestrators:tdd #234:

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   Analyst   │ →   │ Test-Writer │ →   │ Implementer │
└─────────────┘     └─────────────┘     └─────────────┘
       ↓                    ↓                    ↓
  "2 files,            "Test for         "Make it pass"
   3 methods"          each method"
                            ↓                    ↓
                      ┌─────────────┐     ┌─────────────┐
                      │  Validator  │ →   │   Reviewer  │
                      └─────────────┘     └─────────────┘
                         "Run tests"      "Check patterns"
                            ↓                    ↓
                        Tests Pass?         Clean Code?
                         No → Loop          No → Fix
                         Yes → Next         Yes → Done

The orchestrator manages the entire flow:

  1. Creates a scratchpad file for state management
  2. Delegates requirement analysis to the analyst
  3. Decides if tests are simple enough to write directly or need the test-writer
  4. Runs the implementer to make tests pass
  5. Validates with test runs
  6. Reviews code quality
  7. Runs full test suite to catch regressions

If any step fails, it loops with more context. The scratchpad maintains history so each retry learns from previous attempts.

When This Approach Shines

It works best when you have:

  • Clear requirements - A GitHub issue with acceptance criteria
  • Existing patterns - Similar code in your codebase to follow
  • Well-defined CLAUDE.md files - Domain knowledge documented
  • Scoped work - Features that fit in a few files
  • Repetitive patterns - CRUD operations, API endpoints, test suites

Don’t use this for greenfield architecture decisions or exploratory coding. Use it to multiply your output on well-defined work. Plan first.

Limitations and Common Failures

Things to Watch

Context window usage - The scratchpad grows with each gate attempt. Complex tasks could hit limits, but you could mitigate that with further task decomposition.

API costs - Multiple agent calls add up in terms of tokens. Something to consider if you per per request or token.

Architecture decisions - The worker agents follow patterns, they don’t create them. Design first, then delegate. With that being said, you can automate quite a bit of planning in preceding workflows.

Common Failure Modes

Analyst gets lost in large codebases. Solution: Add specific context files file paths to the prompt. Ask your agens if it needs addtional documentation to avoid future confusion.

Test-writer creates tests that pass without implementation. The validator gate catches this and retries.

Implementer adds unnecessary complexity. Adjust the contraints to cut down on iterations with the reviewer agent. Thoguh the reviewer agent, and broader check-quality agent, will catch issues and send them back for simplification.

Same error keeps repeating. Circuit breaker activates after 3 attempts, escalates to you.

Implementation Lessons

What Works

Small, focused agents. Be only as verbose as you need to be.

Explicit gates with clear success criteria.

Self-healing loops that retry with context.

Scratchpad files that maintain state across attempts.

Domain-specific patterns that encode your conventions.

What Doesn’t

One agent to rule them all. Specialist agents are more reliable, at the cost of speed.

Linear workflows. Gates and loops handle real-world complexity.

Vague success criteria. “Make it work” isn’t enough, be explicit.

Fighting the helpful nature. Use boundaries, and again, clear instructional prompts.

Next Level: Hooks and Extensions

Once the basic system works, you can add:

┌──────────────────────────────────────────────────────┐
│  Claude Code Hooks:                                  │
│  • pre-tool-hook: Validate before edits              │
│  • post-tool-hook: Auto-run tests after changes      │
│  • submit-hook: Block if tests failing               │
├──────────────────────────────────────────────────────┤
│  External Integrations:                              │
│  • CI/CD triggers (run orchestrators on PR)          │
│  • Custom validation scripts                         │
│  • Domain-specific gates                             │
└──────────────────────────────────────────────────────┘

But start simple. Get the agents working first.

Key Diagrams for the Article

The full system architecture:

┌─────────────────────────────────────────────────────────────┐
│                     DEVELOPER (You)                         │
└──────────────────────┬──────────────────────────────────────┘
                       ↓
┌─────────────────────────────────────────────────────────────┐
│                  ORCHESTRATOR COMMAND                       │
│              (/orchestrators:tdd #234)                      │
└──────────────────────┬──────────────────────────────────────┘
                       ↓
        ┌──────────────┴──────────────┐
        ↓                             ↓
┌───────────────┐            ┌────────────────┐
│     GATES     │            │   SCRATCHPAD   │
│  (Checkpoints)│←──────────→│ (State Memory) │
└───────┬───────┘            └────────────────┘
        ↓
┌───────────────────────────────────────────┐
│            SPECIALIZED AGENTS             │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐      │
│  │Analyst  │ │T-Writer │ │Implement│      │
│  └─────────┘ └─────────┘ └─────────┘      │
│  ┌─────────┐ ┌─────────┐                  │
│  │Validator│ │Reviewer │                  │
│  └─────────┘ └─────────┘                  │
└───────────────┬───────────────────────────┘
                ↓
┌───────────────────────────────────────────┐
│         DOMAIN KNOWLEDGE (CLAUDE.md)      │
│   • Project patterns                      │
│   • Anti-patterns to avoid                │
│   • Testing standards                     │
│   • Code conventions                      │
└───────────────────────────────────────────┘

Example Files (Simplified from Production)

These are reduced examples extracted from a working production system. The real ones are more verbose with additional error handling, but these show the core patterns:

Example Files

Project Structure Files

File Purpose
.claude/commands/orchestrators/tdd.md TDD orchestrator with gate logic
.claude/commands/orchestrators/fix-bug.md Bug-fix workflow pattern

Agent Definitions

File Purpose
.claude/agents/dev-team/analyst.md Requirements analyzer
.claude/agents/dev-team/test-writer.md Test creation specialist
.claude/agents/dev-team/implementer.md Production code writer
.claude/agents/dev-team/validator.md Test runner
.claude/agents/dev-team/reviewer.md Code quality checker
.claude/agents/check-quality.md Independent quality auditor
.claude/agents/issue-diagnosis.md Root cause analyzer

Protocols & Standards

File Purpose
.claude/protocols/agent-output-protocol.md Communication format
.claude/protocols/scratchpad-protocol.md State management rules

Domain Knowledge

File Purpose
app/models/CLAUDE.md Model patterns
app/controllers/CLAUDE.md Controller conventions
test/CLAUDE.md Testing standards

Note: Production versions include more detailed error handling, retry logic, and domain-specific rules. Start with these to understand the pattern.

Claude Code Power Features Used

This approach leverages several documented Claude Code features:

Read these docs first. They’re the difference between fighting the tool and wielding it.

Conclusion

One person with clear vision can orchestrate an entire development workflow through clear prompts, structure, and boundaries.

Gates break complex work into verifiable checkpoints. Delegation to specialists solves the focus problem. The scratchpad becomes your feedback loop for continuous improvement.

Stop fighting your AI assistant. Start orchestrating your AI team.

Big problems become manageable when you decompose them into specialist-sized chunks. A folder structure and some markdown files can turn one developer into five who actually stay in their lane.

The tools are already there in Claude Code. You just need to arrange them properly.