Comprehensive guide for migrating to or from Clay, or major version upgrades using the strangler fig pattern.
| Type | Complexity | Duration | Risk |
|---|---|---|---|
| Fresh install | Low | Days | Low |
| From competitor | Medium | Weeks | Medium |
| Major version | Medium | Weeks | Medium |
| Full replatform | High | Months | High |
Inventory all files referencing Clay, count integration points, and document dependencies. Build a MigrationInventory with data types, record counts, and customizations.
Create a ServiceAdapter interface with CRUD operations. Implement ClayAdapter with data transformation from old format to Clay format. This enables gradual migration.
Run batch data migration (100 records per batch) with error collection. Track progress and log failed batches for retry.
Use feature flags to gradually route traffic: start at 0%, increase to 10%, 50%, then 100%. Use getServiceAdapter() to select Clay vs legacy based on flag percentage.
Run validation checks: data count match, API functionality, performance baseline, and error rates. All must pass before completing the migration.
Disable Clay via environment variable and restart pods. For data rollback, restore from backup. Verify via health endpoint.
For complete TypeScript implementations, assessment scripts, and validation code, load the reference guide:
Read(${CLAUDE_SKILL_DIR}/references/implementation-guide.md)
| Issue | Cause | Solution |
|---|---|---|
| Data mismatch | Transform errors | Validate transform logic |
| Performance drop | No caching | Add caching layer |
| Rollback triggered | Errors spiked | Reduce traffic percentage |
| Validation failed | Missing data | Check batch processing |
For advanced troubleshooting, see clay-advanced-troubleshooting.
Basic usage: Apply clay migration deep dive to a standard project setup with default configuration options.
Advanced scenario: Customize clay migration deep dive for production environments with multiple constraints and team-specific requirements.