---
name: refactoring-surgeon
description: 'Expert code refactoring specialist for improving code quality without changing behavior. Activate on: refactor, code smell, technical debt, legacy code, cleanup, simplify, extract method,
  extract class, DRY, SOLID principles. NOT for: new feature development (use feature skills), bug fixing (use debugging skills), performance optimization (use performance skills).'
allowed-tools: Read,Write,Edit,Bash(npm test:*,npm run lint:*,git:*)
metadata:
  category: Code Quality & Testing
  pairs-with:
  - skill: code-necromancer
    reason: Refactor resurrected legacy code
  - skill: test-automation-expert
    reason: Tests before refactoring
  tags:
  - refactoring
  - code-smells
  - solid
  - dry
  - cleanup
---

# Refactoring Surgeon

Expert code refactoring specialist focused on improving code quality without changing behavior.

## Quick Start

1. **Ensure tests exist** - Never refactor without a safety net
2. **Identify the smell** - Name the specific code smell you're addressing
3. **Make small changes** - One refactoring at a time, commit frequently
4. **Run tests after each change** - Behavior must remain identical
5. **Don't add features** - Refactoring ≠ enhancement
6. **Document significant changes** - Explain the "why" for future maintainers

## Core Capabilities

| Category | Techniques |
|----------|------------|
| **Extraction** | Extract Method, Extract Class, Extract Interface |
| **Movement** | Move Method, Move Field, Inline Method |
| **Simplification** | Replace Conditional with Polymorphism, Decompose Conditional |
| **Organization** | Introduce Parameter Object, Replace Magic Numbers |
| **Legacy Migration** | Strangler Fig, Branch by Abstraction, Parallel Change |

## Code Smells Reference

### Bloaters
```
┌─────────────────────┐    ┌─────────────────────┐    ┌─────────────────────┐
│    Long Method      │    │    Large Class      │    │   Long Parameter    │
│  > 20 lines?        │    │  > 200 lines?       │    │       List          │
│  → Extract Method   │    │  → Extract Class    │    │  → Parameter Object │
└─────────────────────┘    └─────────────────────┘    └─────────────────────┘
```

### OO Abusers
```
┌─────────────────────┐    ┌─────────────────────┐    ┌─────────────────────┐
│  Switch Statements  │    │   Refused Bequest   │    │   Parallel          │
│  Type-checking?     │    │  Unused inheritance?│    │   Hierarchies       │
│  → Polymorphism     │    │  → Delegation       │    │  → Move Method      │
└─────────────────────┘    └─────────────────────┘    └─────────────────────┘
```

### Change Preventers
```
┌─────────────────────┐    ┌─────────────────────┐
│  Divergent Change   │    │  Shotgun Surgery    │
│  One class, many    │    │  One change, many   │
│  reasons to change? │    │  classes affected?  │
│  → Extract Class    │    │  → Move/Inline      │
└─────────────────────┘    └─────────────────────┘
```

## Reference Examples

Complete refactoring examples in `./references/`:

| File | Pattern | Use Case |
|------|---------|----------|
| `extract-method.ts` | Extract Method | Long methods → focused functions |
| `replace-conditional-polymorphism.ts` | Replace Conditional | switch/if → polymorphic classes |
| `introduce-parameter-object.ts` | Parameter Object | Long params → structured objects |
| `strangler-fig-pattern.ts` | Strangler Fig | Legacy code → gradual migration |

## Anti-Patterns (10 Critical Mistakes)

### 1. Big Bang Refactoring
**Symptom**: Rewriting entire modules in one massive change
**Fix**: Strangler fig pattern, small incremental changes with tests

### 2. Refactoring Without Tests
**Symptom**: Changing structure without test coverage
**Fix**: Write characterization tests first, add coverage for affected areas

### 3. Premature Abstraction
**Symptom**: Creating generic frameworks "for future flexibility"
**Fix**: Wait for three concrete examples before abstracting (Rule of Three)

### 4. Renaming Without IDE Support
**Symptom**: Find-and-replace that misses occurrences
**Fix**: Use IDE refactoring tools, search for usages first

### 5. Mixing Refactoring and Features
**Symptom**: Adding new functionality while restructuring
**Fix**: Separate commits - refactor first, then add features

### 6. Ignoring Code Reviews
**Symptom**: Large refactoring PRs that are hard to review
**Fix**: Small, focused PRs with clear commit messages

### 7. Over-Abstracting
**Symptom**: Three layers of abstraction for a simple operation
**Fix**: YAGNI - start concrete, abstract when patterns emerge

### 8. Incomplete Refactoring
**Symptom**: Starting Extract Method but leaving partial duplication
**Fix**: Complete the refactoring or revert - no half-measures

### 9. Refactoring Production During Incidents
**Symptom**: "I'll just clean this up while I'm here..."
**Fix**: Never refactor during incidents - fix the bug, create a ticket

### 10. Not Measuring Improvement
**Symptom**: Refactoring without knowing if it helped
**Fix**: Track metrics: complexity, test coverage, build time

## Safety Checklist

**Before Refactoring:**
- [ ] Code compiles/runs successfully
- [ ] All tests pass
- [ ] Test coverage is adequate for area being refactored
- [ ] Commit current state (can rollback)

**During Refactoring:**
- [ ] Make small, incremental changes
- [ ] Run tests after each change
- [ ] Keep behavior identical
- [ ] Don't add features while refactoring

**After Refactoring:**
- [ ] All tests still pass
- [ ] No new warnings/errors
- [ ] Code is more readable
- [ ] Complexity metrics improved
- [ ] Document significant changes

## Quality Checklist

- [ ] No behavior changes (tests prove this)
- [ ] Improved readability
- [ ] Reduced complexity (cyclomatic, cognitive)
- [ ] Better adherence to SOLID principles
- [ ] Removed duplication (DRY)
- [ ] More testable code
- [ ] Clear naming
- [ ] Appropriate abstractions (not over-engineered)

## Validation Script

Run `./scripts/validate-refactoring.sh` to check:
- Test coverage presence
- Code smell indicators
- Duplication patterns
- Complexity metrics
- SOLID violations
- Refactoring safety (git, uncommitted changes)

## External Resources

- [Refactoring.Guru](https://refactoring.guru/)
- [Martin Fowler's Refactoring Catalog](https://refactoring.com/catalog/)
- [Working Effectively with Legacy Code](https://www.oreilly.com/library/view/working-effectively-with/0131177052/)
