After thousands of real Claude Code sessions in production codebases, the senior engineers who get the most out of Claude Code share a set of non-obvious practices. Here are the top 10, each with working code you can use immediately.
Tip 1: Explore First, Plan, Then Code
# Bad: jump straight to coding
> Add caching to the API
# Good: read, plan, then code
> Read src/api/ and src/services/ and describe the current architecture
> Now identify where to add Redis caching with minimal code changes
> Looks good. Implement it.
Tip 2: Use Plan Mode for Big Changes
# Toggle plan mode with Shift+Tab inside the session
> /plan Migrate all Express routes to use the new centralized error handler
# Claude outputs a step-by-step plan. Review it, then:
> Looks good, proceed
# Or: > Skip step 4. Do steps 1-3 and 5 only.
Tip 3: Give Claude a Way to Verify Its Own Work
# Without verification (risky)
> Add input validation to the login endpoint
# With verification and success criteria
> Add input validation to the login endpoint.
> When done, run: npm test -- --testPathPattern=auth
> If tests fail, fix them before stopping.
# Explicit success criteria
> Add rate limiting to /api/auth/* routes.
> Success: 1) npm test passes. 2) 200 rapid POSTs return 429.
> Do not stop until both pass.
Tip 4: Git Worktrees for Parallel Agents
The most powerful advanced technique: run multiple Claude agents on the same repo simultaneously without conflicts.
# Create isolated worktrees
git worktree add ../project-feat-auth feat/auth
git worktree add ../project-feat-cache feat/cache
git worktree add ../project-fix-perf fix/perf
# Run three agents in parallel
(cd ../project-feat-auth && claude --print "Implement JWT refresh token rotation" \
--allowedTools "Read,Write,Bash") &
(cd ../project-feat-cache && claude --print "Add Redis caching to GET endpoints" \
--allowedTools "Read,Write,Bash") &
(cd ../project-fix-perf && claude --print "Fix N+1 query in users endpoint" \
--allowedTools "Read,Write,Bash") &
wait && echo "All agents done. Review and merge each branch."
# Clean up worktrees
git worktree remove ../project-feat-auth
git worktree remove ../project-feat-cache
git worktree remove ../project-fix-perf
Tip 5: Keep CLAUDE.md Under 200 Lines
# Bad: obvious filler that wastes context window
# We use JavaScript. Variables should be descriptive.
# Good: only what Claude cannot infer from the code itself
# Stack: Node 20, TypeScript strict, Prisma ORM, Zod validation
# Tests: Jest -- run: npm test (must pass before stopping)
# Auth: JWT in Authorization header, refresh via /api/auth/refresh
# Errors: use Result from src/types/result.ts, never throw
# Branch: feat/TICKET-desc or fix/TICKET-desc
# Check your CLAUDE.md size
wc -l CLAUDE.md # Target: under 200 lines
Tip 6: Be Specific With File References
# Vague (bad)
> Fix the auth bug
# Specific (good)
> Read src/middleware/authenticate.ts line 47.
> JWT verification fails for tokens with a custom "org" claim.
> Fix it and update tests/middleware/authenticate.test.ts
# Use glob patterns for bulk operations
> Read all files matching src/routes/**/*.ts and list every endpoint
# Use @ to reference files in VS Code extension
> Look at @src/routes/users.ts - the getUser function returns null
> but the route does not handle it. Add a 404 response.
Tip 7: Press Esc, Not Ctrl+C
# Claude starts doing something wrong...
# Esc = interrupt current action, keep full session context
# Ctrl+C = kill entire session, lose all context
# After pressing Esc, redirect Claude:
> Stop. Do not modify the database schema.
> Add caching at the service layer only. Start over.
# Recover any partial writes
> Check git diff and revert any unintended changes
Tip 8: Use –output-format for Scripting
# Get structured JSON output for automation pipelines
claude --print \
"List all API endpoints as JSON: method, path, description" \
--allowedTools "Read,Glob" --output-format json | jq .
# Stream output for long-running tasks
claude --print "Analyze all SQL queries for N+1 patterns" \
--allowedTools "Read,Grep" --output-format stream-json
# Pipe Claude output into another tool
claude --print "Summarize git log since last release" | gh pr create --body -
Tip 9: Bound Costs With allowedTools and max-turns
# Read-only analysis: restrict to safe tools
claude --print "Security audit the codebase" \
--allowedTools "Read,Grep,Glob" --max-turns 20
# Write tasks: allow Write but cap turns
claude --print "Add JSDoc to all exported functions in src/" \
--allowedTools "Read,Write,Glob" --max-turns 50
# Full agent with Bash: only when you need test execution
claude --print "Write and verify tests for UserService" \
--allowedTools "Read,Write,Bash" --max-turns 30
Tip 10: Makefile for Repeatable Team AI Tasks
# Makefile - wrap common Claude workflows for the whole team
.PHONY: ai-review ai-docs ai-test ai-security ai-changelog
ai-review:
claude --print "Review git diff --staged: bugs, security, quality" \
--allowedTools "Read,Bash" --max-turns 10
ai-docs:
claude --print "Add JSDoc to all exported functions in src/" \
--allowedTools "Read,Write,Glob" --max-turns 60
ai-test:
claude --print "Write missing unit tests for all src/ files" \
--allowedTools "Read,Write,Bash,Glob" --max-turns 40
ai-security:
claude --print "Scan for security vulnerabilities and output findings" \
--allowedTools "Read,Grep,Glob" --max-turns 20
ai-changelog:
claude --print "Write CHANGELOG.md from git log since last tag" \
--allowedTools "Bash" --max-turns 5 > CHANGELOG.md && \
echo "Changelog written to CHANGELOG.md"
# Run any workflow with a single command
make ai-review
make ai-test
make ai-security
make ai-changelog
The developers winning with Claude Code in 2026 treat it like a skilled contractor: clear scope, verification criteria, bounded tools, and persistent memory via CLAUDE.md. Add a team Makefile and these workflows become one-command habits for everyone on your team.