tessl install github:jeremylongshore/claude-code-plugins-plus-skills --skill instantly-migration-deep-diveExecute Instantly major re-architecture and migration strategies with strangler fig pattern. Use when migrating to or from Instantly, performing major version upgrades, or re-platforming existing integrations to Instantly. Trigger with phrases like "migrate instantly", "instantly migration", "switch to instantly", "instantly replatform", "instantly upgrade major".
Review Score
84%
Validation Score
12/16
Implementation Score
77%
Activation Score
90%
Comprehensive guide for migrating to or from Instantly, or major version upgrades.
| Type | Complexity | Duration | Risk |
|---|---|---|---|
| Fresh install | Low | Days | Low |
| From competitor | Medium | Weeks | Medium |
| Major version | Medium | Weeks | Medium |
| Full replatform | High | Months | High |
# Document current implementation
find . -name "*.ts" -o -name "*.py" | xargs grep -l "instantly" > instantly-files.txt
# Count integration points
wc -l instantly-files.txt
# Identify dependencies
npm list | grep instantly
pip freeze | grep instantlyinterface MigrationInventory {
dataTypes: string[];
recordCounts: Record<string, number>;
dependencies: string[];
integrationPoints: string[];
customizations: string[];
}
async function assessInstantlyMigration(): Promise<MigrationInventory> {
return {
dataTypes: await getDataTypes(),
recordCounts: await getRecordCounts(),
dependencies: await analyzeDependencies(),
integrationPoints: await findIntegrationPoints(),
customizations: await documentCustomizations(),
};
}Phase 1: Parallel Run
┌─────────────┐ ┌─────────────┐
│ Old │ │ New │
│ System │ ──▶ │ Instantly │
│ (100%) │ │ (0%) │
└─────────────┘ └─────────────┘
Phase 2: Gradual Shift
┌─────────────┐ ┌─────────────┐
│ Old │ │ New │
│ (50%) │ ──▶ │ (50%) │
└─────────────┘ └─────────────┘
Phase 3: Complete
┌─────────────┐ ┌─────────────┐
│ Old │ │ New │
│ (0%) │ ──▶ │ (100%) │
└─────────────┘ └─────────────┘# Install Instantly SDK
npm install @instantly/sdk
# Configure credentials
cp .env.example .env.instantly
# Edit with new credentials
# Verify connectivity
node -e "require('@instantly/sdk').ping()"// src/adapters/instantly.ts
interface ServiceAdapter {
create(data: CreateInput): Promise<Resource>;
read(id: string): Promise<Resource>;
update(id: string, data: UpdateInput): Promise<Resource>;
delete(id: string): Promise<void>;
}
class InstantlyAdapter implements ServiceAdapter {
async create(data: CreateInput): Promise<Resource> {
const instantlyData = this.transform(data);
return instantlyClient.create(instantlyData);
}
private transform(data: CreateInput): InstantlyInput {
// Map from old format to Instantly format
}
}async function migrateInstantlyData(): Promise<MigrationResult> {
const batchSize = 100;
let processed = 0;
let errors: MigrationError[] = [];
for await (const batch of oldSystem.iterateBatches(batchSize)) {
try {
const transformed = batch.map(transform);
await instantlyClient.batchCreate(transformed);
processed += batch.length;
} catch (error) {
errors.push({ batch, error });
}
// Progress update
console.log(`Migrated ${processed} records`);
}
return { processed, errors };
}// Feature flag controlled traffic split
function getServiceAdapter(): ServiceAdapter {
const instantlyPercentage = getFeatureFlag('instantly_migration_percentage');
if (Math.random() * 100 < instantlyPercentage) {
return new InstantlyAdapter();
}
return new LegacyAdapter();
}# Immediate rollback
kubectl set env deployment/app INSTANTLY_ENABLED=false
kubectl rollout restart deployment/app
# Data rollback (if needed)
./scripts/restore-from-backup.sh --date YYYY-MM-DD
# Verify rollback
curl https://app.yourcompany.com/health | jq '.services.instantly'async function validateInstantlyMigration(): Promise<ValidationReport> {
const checks = [
{ name: 'Data count match', fn: checkDataCounts },
{ name: 'API functionality', fn: checkApiFunctionality },
{ name: 'Performance baseline', fn: checkPerformance },
{ name: 'Error rates', fn: checkErrorRates },
];
const results = await Promise.all(
checks.map(async c => ({ name: c.name, result: await c.fn() }))
);
return { checks: results, passed: results.every(r => r.result.success) };
}Document existing implementation and data inventory.
Create abstraction layer for gradual migration.
Run batch data migration with error handling.
Gradually route traffic to new Instantly integration.
| 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 |
const status = await validateInstantlyMigration();
console.log(`Migration ${status.passed ? 'PASSED' : 'FAILED'}`);
status.checks.forEach(c => console.log(` ${c.name}: ${c.result.success}`));For advanced troubleshooting, see instantly-advanced-troubleshooting.