iterative-code-exploration
Iterative Code Exploration
A systematic pattern for progressively exploring and understanding unfamiliar codebases through iterative context refinement.
The Problem
When working with new codebases, you often don't know:
- Which files contain relevant code
- What patterns and conventions exist
- What terminology the project uses
- How components interact
Standard approaches fail:
- Read everything: Time-consuming and overwhelming
- Guess locations: Often misses critical context
- Ask broad questions: Returns too much irrelevant information
The Solution: 4-Phase Iterative Loop
┌─────────────────────────────────────────────┐
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ DISCOVER │─────▶│ EVALUATE │ │
│ └──────────┘ └──────────┘ │
│ ▲ │ │
│ │ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │ LOOP │◀─────│ REFINE │ │
│ └──────────┘ └──────────┘ │
│ │
│ Max 3-4 cycles, then synthesize │
└─────────────────────────────────────────────┘
Phase 1: DISCOVER
Start with broad exploration:
# Find entry points
find . -name "main.*" -o -name "index.*" -o -name "app.*" | head -20
# Discover project structure
tree -L 3 -I 'node_modules|dist|build'
# Find configuration
find . -name "*.config.*" -o -name "package.json" -o -name "*.toml"
# Identify key patterns
grep -r "export class" --include="*.ts" src/ | head -20
grep -r "def " --include="*.py" . | head -20
Document initial findings:
- Project type (web app, library, service, etc.)
- Tech stack (languages, frameworks)
- Architecture hints (monorepo, microservices, etc.)
Phase 2: EVALUATE
Assess discovered files for relevance:
# Read high-value files
cat README.md
cat ARCHITECTURE.md 2>/dev/null
cat docs/overview.md 2>/dev/null
# Check package manifests
cat package.json | jq '.dependencies, .scripts'
cat Cargo.toml 2>/dev/null
cat requirements.txt 2>/dev/null
Scoring Criteria:
- Critical (★★★): Entry points, core logic, main configs
- Important (★★): Utilities, shared components, types
- Supporting (★): Tests, docs, examples
- Noise (-): Generated files, vendored code
Phase 3: REFINE
Focus on specific areas identified as relevant:
# Dive into specific modules
ls -la src/core/
cat src/core/index.ts
# Trace dependencies
grep -r "import.*from.*core" --include="*.ts" src/ | head -20
# Find related patterns
grep -A 5 -B 5 "class UserService" src/**/*.ts
# Check tests for usage examples
find . -name "*.test.*" -o -name "*.spec.*" | head -10
Build mental model:
- How components connect
- What patterns are used consistently
- Where similar functionality lives
Phase 4: LOOP
Decision point - do you need more context?
Continue if:
- Key functionality still unclear
- Dependencies not fully traced
- Patterns inconsistent or confusing
Stop if:
- Core logic understood
- Can explain main flows
- Ready to make changes confidently
Practical Workflow
For Feature Implementation
-
Discover: Find similar existing features
grep -r "feature-name" src/ find . -name "*feature*" -
Evaluate: Review implementation patterns
cat src/features/similar-feature/index.ts -
Refine: Check tests and edge cases
cat src/features/similar-feature/*.test.ts -
Loop: Trace dependencies until clear
For Bug Fixing
-
Discover: Locate error origin
grep -r "error message" src/ git log -S "error message" -
Evaluate: Understand surrounding context
cat path/to/file.ts | grep -A 20 -B 20 "error location" -
Refine: Check call sites and callers
grep -r "functionName" --include="*.ts" src/ -
Loop: Expand context as needed
For Refactoring
-
Discover: Map current structure
find src/ -name "*.ts" | xargs wc -l | sort -n grep -r "class\|interface" --include="*.ts" src/ | wc -l -
Evaluate: Identify coupling points
grep -r "import.*from.*module" src/ | cut -d: -f2 | sort | uniq -c | sort -rn -
Refine: Find all usages
grep -r "ComponentName" --include="*.ts" src/ -
Loop: Ensure all references found
Output Template
After each loop iteration, document:
## Iteration N
**Query**: What I was looking for
**Found**: X files, Y patterns, Z components
**Relevance**: High/Medium/Low with reasons
**Gaps**: What's still unclear
**Next**: What to explore in next iteration
**Key Files**:
- path/to/file.ts - Core implementation (★★★)
- path/to/other.ts - Supporting utility (★★)
**Mental Model Update**:
- New understanding of X
- Connection between Y and Z
- Pattern: Description
Integration Points
Complements:
- knowledge-architecture: For documenting discoveries
- second-brain-librarian: For saving exploration notes
- project-orchestration: For planning exploration strategy
- testing-patterns: For learning through tests
Tips
- Start wide, then narrow focus
- Document assumptions to validate
- Use tests as documentation
- Follow imports/exports
- Check git history for context
- Look for comments explaining "why"