TL;DR (read this if nothing else)
- One session = one phase. Design, architecture, build, review, deploy — each gets its own session.
/clearbetween them. - Spec before code. Interview → SPEC.md → fresh session → build from the spec.
- Delegate reading to subagents. Never let exploration eat your main context.
- Give Claude something to check itself against — a test, a screenshot, an expected output. No check = no "done."
- Two failed corrections = stop and
/clear. Don't fight a polluted session. - Log as you go. ENGINEERING_LOG.md every session. BIP.md every milestone.
Why This Matters (the one-paragraph version)
Claude Code re-sends your entire conversation with every message. A session open for hours costs full context on even a one-line question — and quality drops as the window fills, not just cost. So the game isn't "fit more in." It's keep sessions small and make handoffs between them cheap.
The Build Workflow (SDLC, mapped to Claude Code)
Think of this as a relay race. Each leg is its own session. Don't run the whole race in one.
1. Design & Requirements
New session. Plan mode on (Shift+Tab).
Don't let Claude jump to code. Make it interview you first:
I want to build X. Interview me in detail using the AskUserQuestion tool —
implementation, UI/UX, edge cases, tradeoffs. Keep going until we've
covered everything, then write a complete spec to SPEC.md.
A good spec: names the files/interfaces involved, states what's out of scope, ends with a way to verify it worked.
2. Architecture
New session. Read the spec, ask for the module boundaries / data flow / patterns, write to ARCHITECTURE.md.
For a real decision (e.g. Postgres vs. Mongo) → use the engineering:architecture skill. It writes a proper ADR (decision + trade-offs + consequences), not just an opinion.
3. Implementation
Fresh session per phase. /clear, load only SPEC.md + ARCHITECTURE.md, then work the loop:
Explore → Plan → Implement → Commit
- Skip planning only if you could describe the diff in one sentence.
- Delegate reads: "use a subagent to check how auth handles refresh tokens" — keeps 40 files of exploration out of your main window.
4. Testing
Write the check before asking Claude to call it done. Give it example cases in the prompt.
Use the
engineering:testing-strategyskill when planning coverage for a new module.
5. Code Review
Fresh eyes, zero shared context. Spin up a subagent or use the engineering:code-review skill:
Review this diff against SPEC.md. Flag correctness gaps only — not style.
A reviewer that watched you write the code is biased toward agreeing with it. A fresh one isn't.
6. Deploy
Run engineering:deploy-checklist before shipping — migrations, feature flags, rollback triggers, CI status. Two minutes now, saves a 2am page later.
7. Iterate / Incident
- Something's broken →
engineering:debug(reproduce → isolate → diagnose → fix) - Something's on fire →
engineering:incident-response
Context Management Toolkit
Habits (do every session)
| Habit | Why |
|---|---|
/rename before /clear |
So you can find the session again with /resume |
/clear between unrelated tasks |
Stale context costs tokens on every message after it |
/compact <focus> instead of letting auto-compact fire |
You control what survives the summary |
| Use subagents for research | Their reading stays in their window, not yours |
Two failed corrections → /clear + rewrite prompt |
A clean session + better prompt beats a polluted long one |
/btw for side questions |
Answer never enters conversation history |
Config (set up once, benefits forever)
| Setting | What it does |
|---|---|
/context |
Shows exactly what's eating your window right now |
| CLAUDE.md under ~200 lines | It loads every session — keep it to commands + conventions only |
Move detailed workflows into .claude/skills/ |
Skills load on demand, not every session |
/mcp → disable unused servers |
Each active server costs context |
Prefer CLI tools (gh, aws, supabase) over MCP equivalents |
Zero context cost until called |
| PreToolUse hook to filter verbose output | e.g. grep test output down to failures only, before Claude sees it |
/model → Sonnet for routine work, Opus for architecture |
Match cost to task complexity |
Failure Patterns (spot these early)
| Pattern | What it looks like | Fix |
|---|---|---|
| Kitchen sink session | One task, then an unrelated ask, then back to the first | /clear between tasks |
| Correcting on loop | Wrong → correct → still wrong → correct again | After 2 corrections, /clear + rewrite the prompt |
| Bloated CLAUDE.md | Claude ignores half your rules | Prune ruthlessly; move specifics to skills |
| Trust-then-verify gap | Looks done, isn't | Always demand a test/screenshot/output as evidence |
| Infinite exploration | "Investigate X" with no scope → reads 200 files | Scope it narrowly, or hand it to a subagent |
Subagents — Quick Explainer
A subagent is Claude working in its own separate context window, off to the side of your main conversation. It does the reading/searching/verbose work, then reports back a summary — the raw output never touches your main window.
When to use one:
- Researching a codebase before you build ("how does token refresh work here?")
- Running tests / processing logs (verbose output stays in their window)
- Reviewing your own work with fresh eyes (no bias from having written it)
How to trigger one: just ask —
Use a subagent to investigate how our authentication system handles
token refresh, and whether we have existing OAuth utilities to reuse.
Custom subagents (for repeat use) live in .claude/agents/ as a markdown file with a role, allowed tools, and instructions. Claude can write these for you — just ask.
Command Cheat Sheet
| Command | Use it for |
|---|---|
/clear |
Wipe context, start fresh (free — costs nothing) |
/compact <focus> |
Summarize now, keeping what you specify |
/context |
See what's using your context window |
/rewind (or Esc Esc) |
Undo conversation and/or code to a checkpoint |
/rename |
Name a session before clearing, so you can find it later |
/resume |
Pick up a named session |
/model |
Switch Sonnet ↔ Opus mid-session |
/effort |
Lower reasoning effort for simple tasks |
/mcp |
See + disable MCP servers |
/init |
Generate a starter CLAUDE.md |
/doctor |
Diagnose CLAUDE.md bloat / setup issues |
/btw |
Ask a side question that won't enter history |
AskUserQuestion tool |
Have Claude interview you before building |
My Standing Practices
(Personal reminders — keep doing these)
- ENGINEERING_LOG.md — updated at the end of every session: decisions, mistakes, why, lessons learned. This is what makes the next session (or future-me) fast to re-onboard.
- BIP.md — a LinkedIn-ready post drafted at every milestone. Ties naturally to session boundaries: close a phase, write the post, move on.
- Set architecture and phase boundaries myself; let Claude Code run autonomously within them.
- Catch quality issues actively (tight coupling, self-referential test assertions) — don't just trust the diff.
Reference this before starting any new build phase. If a session starts feeling foggy or off-track, that's the signal to /clear and come back to this doc.