This workflow shows how to use Open Orchestrator for large refactoring efforts that touch multiple parts of your codebase.
The Scenario
You're migrating from one pattern to another:
- Moving from callbacks to async/await
- Implementing the repository pattern
- Updating to a new API version
Step 1: Plan the Refactoring
Create a planning worktree with the feature template (plan mode enabled):
owt new "Plan repository pattern refactoring" -t featureSend planning task:
owt send feat/plan-repository-pattern "Analyze the codebase and create a refactoring plan for:
[describe the refactoring goal]
Please identify:
1. All files that need changes
2. Dependencies between files
3. Suggested order of changes
4. Potential risks"Step 2: Create Module-Specific Worktrees
Based on the plan, create worktrees for each area:
# Data layer refactoring
owt new "Refactor data layer to repository pattern"
# Service layer refactoring
owt new "Refactor service layer for repositories"
# API layer refactoring
owt new "Refactor API layer for new services"
# Tests update
owt new "Update tests for repository pattern"Step 3: Delegate with Dependencies
Send tasks with awareness of dependencies:
# Data layer first (no dependencies)
owt send refactor/data-layer-repository-pattern "Implement repository pattern for data access:
- Create UserRepository
- Create ProductRepository
- Create OrderRepository
Keep existing interfaces for now"
# Service layer (depends on data layer patterns)
owt send refactor/service-layer-repositories "Once data layer is ready, update services:
- UserService to use UserRepository
- ProductService to use ProductRepository
- OrderService to use OrderRepository
Monitor refactor/data-layer progress first"
# API layer (depends on service layer)
owt send refactor/api-layer-new-services "Once service layer is updated:
- Update controllers to use new service interfaces
- Ensure API contracts remain unchanged
Monitor refactor/service-layer progress first"
# Tests (can start parallel, update as layers complete)
owt send feat/update-tests-repository "Update test suite:
- Add unit tests for new repositories
- Update service tests for new patterns
- Keep integration tests passing"Step 4: Monitor via Control Plane
Track progress using the Control Plane:
owtThe sectioned view shows which layers are in flight, idle, or need your attention. Attach to any worktree by pressing a, review progress, and return with Alt+s.
Step 5: Coordinate Progress
As layers complete, unblock dependents:
# When data layer completes
owt send refactor/service-layer-repositories "Data layer complete. Repository patterns:
- UserRepository: findById, findAll, save, delete
- ProductRepository: findById, findAll, save, delete
Begin service layer updates"
# When service layer completes
owt send refactor/api-layer-new-services "Service layer complete. New interfaces:
- UserService.getUser(id)
- ProductService.listProducts()
Begin API layer updates"Step 6: Incremental Testing
Run tests as each layer completes:
# Test data layer
owt send feat/update-tests-repository "Run repository tests: npm test -- --grep Repository"
# Test service layer
owt send feat/update-tests-repository "Run service tests: npm test -- --grep Service"
# Full test suite
owt send feat/update-tests-repository "Run full test suite and report failures"Step 7: Merge
When all layers are done, merge in dependency order:
# Merge data layer first
owt merge refactor/data-layer-repository-pattern
# Then service layer
owt merge refactor/service-layer-repositories
# Then API layer
owt merge refactor/api-layer-new-services
# Finally tests
owt merge feat/update-tests-repositoryThe two-phase merge catches conflicts early by merging base into feature first.
Handling Merge Conflicts
Large refactorings often have conflicts. Use sync:
# Sync all with main periodically
owt sync --allIf conflicts arise, attach to the worktree from the Control Plane and resolve them.
Rollback Strategy
If something goes wrong:
# Each worktree is independent - can abandon one
owt delete refactor/api-layer-new-services --force
# Start fresh
owt new "Refactor API layer (take 2)"
owt send refactor/api-layer-take-2 "Start over with API layer refactoring"Tips for Large Refactorings
- Plan first -- Use the feature template with plan mode to understand scope
- Layer dependencies -- Know what depends on what
- Test incrementally -- Don't wait until the end
- Sync regularly -- Keep up with main branch
- Monitor the Control Plane -- Watch for blocked or errored worktrees
- Keep tests passing -- Run tests after each layer
Pattern: Strangler Fig
For large legacy migrations, use the strangler fig pattern:
# Create parallel implementation
owt new "Implement new auth system alongside old"
# Build new alongside old
owt send feat/implement-new-auth "Implement new auth system that can run parallel to old"
# Gradually migrate
owt send feat/implement-new-auth "Add feature flag to switch between old and new auth"