Cloud Migration: A CTO's Playbook
Cloud migration promises flexibility and scale. It also delivers unexpected bills and new complexity. Here's the practical guide to getting it right.
Every CTO faces the cloud question eventually. Your data center costs are rising, your competitors are deploying faster, and the board keeps asking about "digital transformation." But cloud migration done wrong creates more problems than it solves. This is the practical playbook for getting it right.
The 6 Rs of Cloud Migration
Not everything should move to the cloud the same way. The 6 Rs framework helps you decide:
Rehost (Lift and Shift)
Move servers to the cloud with minimal changes. Fast but doesn't leverage cloud benefits.
Use when: Speed matters more than optimization, legacy systems that work.
Replatform (Lift and Reshape)
Make targeted optimizations while migrating. Replace the database with a managed service, for example.
Use when: Some cloud benefits are worth pursuing, but full refactor isn't justified.
Repurchase (Drop and Shop)
Replace with a SaaS solution. Migrate email to Office 365, CRM to Salesforce.
Use when: Commercial products beat homegrown, maintenance burden is too high.
Refactor (Re-architect)
Rebuild the application to be cloud-native. Containers, microservices, serverless.
Use when: Maximum cloud benefits are worth the investment, application needs modernization anyway.
Retire
Turn it off. Many organizations discover applications nobody uses during migration planning.
Use when: The application has no users or duplicates other functionality.
Retain
Keep it where it is. Some applications shouldn't move.
Use when: Compliance requirements, latency needs, or cost doesn't justify migration.
When NOT to Migrate
Cloud isn't always the answer:
- Predictable, steady workloads - Cloud's pay-per-use model costs more when utilization is constant and high
- Data residency requirements - Some regulations require data in specific locations you control
- Latency-critical applications - On-premises can be faster when milliseconds matter
- Legacy dependencies - Mainframes and ancient systems may not have cloud equivalents
Running the numbers before migrating isn't pessimism - it's due diligence.
AWS vs Azure vs GCP: Honest Comparison
AWS (Amazon Web Services)
Strengths: Largest ecosystem, most services, most documentation, most third-party integrations.
Weaknesses: Complex pricing, console UX hasn't aged well, easy to rack up unexpected costs.
Best for: Teams with AWS experience, complex architectures, startups (credits available).
Azure (Microsoft)
Strengths: Best Microsoft integration (Office 365, Active Directory), strong enterprise contracts, hybrid cloud capabilities.
Weaknesses: Documentation quality varies, naming conventions confuse everyone.
Best for: Microsoft shops, enterprises with existing Microsoft agreements.
GCP (Google Cloud Platform)
Strengths: Best data/ML tools, cleanest UX, most developer-friendly, competitive pricing.
Weaknesses: Smaller ecosystem, Google's history of killing products creates trust issues.
Best for: Data-heavy workloads, Kubernetes (GKE is excellent), startups.
The honest answer: For most workloads, all three are fine. Pick based on team expertise and existing relationships.
Migration Planning
Assessment (Weeks 1-4)
- Inventory all applications and infrastructure
- Map dependencies between systems
- Identify data sensitivity and compliance requirements
- Assess each application against the 6 Rs
- Estimate costs (cloud vs. current)
Proof of Concept (Weeks 5-8)
- Migrate one low-risk application
- Document the process and surprises
- Validate cost assumptions
- Train the team on cloud operations
Pilot (Months 3-4)
- Migrate a handful of applications
- Include at least one business-critical system
- Establish monitoring and alerting
- Document runbooks and procedures
Full Migration (Months 5+)
- Migrate remaining applications in waves
- Decommission old infrastructure as you go
- Continuously optimize costs
Cost Surprises and How to Avoid Them
Cloud bills surprise everyone. Common culprits:
- Data egress - Transferring data OUT of the cloud costs money. A lot of money.
- Idle resources - Development environments running 24/7, forgotten instances.
- Over-provisioned instances - Running large VMs when small ones would suffice.
- Storage creep - Logs, backups, and snapshots accumulating forever.
- Cross-region traffic - Data moving between availability zones adds up.
Prevention:
- Set billing alerts at 50%, 80%, and 100% of budget
- Review costs weekly, not monthly
- Use reserved instances for predictable workloads
- Implement auto-scaling (down, not just up)
- Tag everything for cost attribution
Security Considerations
Network Security
- VPCs - Isolate environments, control traffic flow
- Security groups - Least privilege for network access
- Private subnets - Keep databases off the public internet
Identity and Access
- IAM policies - Least privilege for every role
- MFA everywhere - Especially for console access
- Service accounts - Applications don't need human credentials
Data Protection
- Encryption at rest - All storage should be encrypted
- Encryption in transit - TLS for everything
- Key management - Use cloud KMS, rotate keys
Post-Migration: FinOps
Migration is step one. Optimization is forever:
- Right-sizing - Match instance sizes to actual usage
- Spot instances - 60-90% savings for interruptible workloads
- Reserved capacity - Commit to steady-state workloads for discounts
- Storage tiering - Archive old data to cheaper storage classes
- Continuous review - Cloud costs drift; attention prevents waste
The Bottom Line
Cloud migration is a business decision, not a technical one. The right approach:
- Know why you're migrating (not just "everyone else is")
- Assess everything before moving anything
- Start small, learn, then scale
- Budget for surprises - there will be surprises
- Treat optimization as ongoing, not one-time
Done right, cloud delivers real benefits. Done wrong, it's an expensive lesson. Plan accordingly.
Frequently Asked Questions
About the Author
RJ Lindelof is a technology executive with 35+ years of experience spanning Fortune 500 companies to startups. He does don't just talk about AI; he implement's it to solve real-world business problems. RJ's approach has led to significant improvements in team velocity, code quality, and time-to-market.