Cloud Migration Checklist for IT Teams
The server room is hot, the hardware is aging, and the backup tape drive failed last Tuesday. The company has been talking about moving to the cloud for two years, but every time the conversation starts, it stalls on the same question: where do we even begin? Meanwhile, the on-premises file server that runs a critical business application is approaching end-of-life, and the vendor has announced they are discontinuing support in 18 months.
Cloud migration is the process of moving data, applications, and IT infrastructure from on-premises servers to cloud-based platforms like AWS, Microsoft Azure, or Google Cloud. For small and mid-size businesses, it is not a question of whether to migrate but when and how. This checklist breaks the process into concrete phases with specific tasks, decision points, and validation steps so that your migration is planned rather than panicked.
Phase 1: Cloud Readiness Assessment
Before moving anything, you need a clear picture of what you have, what needs to move, and what the cloud environment will look like. Skipping assessment is the number one reason cloud migrations fail, go over budget, or take three times longer than planned.
Inventory Everything
Create a complete inventory of your current IT infrastructure. For each item, document its function, who depends on it, how critical it is, and its current technical specifications:
- Servers. Physical and virtual servers, including operating system, CPU, RAM, storage, and the applications they run. Note which servers are at or near end-of-life.
- Applications. Every business application, including whether it is a commercial product (and its licensing model), custom-built software, or a legacy system with no active vendor support. Document dependencies between applications - which applications talk to which databases, which integrations exist.
- Data. Total data volume by server and application. Identify data that is subject to regulatory requirements (HIPAA, PCI-DSS, GDPR) because this affects which cloud regions and configurations you can use.
- Network. Current network architecture, bandwidth, VPN connections, firewall rules, and any site-to-site connections between offices.
- Users. How many users access each application, from where (office, remote, mobile), and what performance they expect. A financial application that 5 people use once a month has very different requirements than a CRM that 80 salespeople use all day.
Classify Workloads
Not everything should move to the cloud in the same way. Classify each workload into one of these migration strategies (commonly called the "6 Rs"):
- Rehost (lift and shift). Move the application to the cloud with minimal changes. The application runs on a cloud virtual machine instead of a physical server, but the architecture stays the same. This is the fastest approach and works for applications that are not tightly coupled to specific hardware.
- Replatform (lift and optimize). Move to the cloud with some optimization - for example, migrating a database from a self-managed MySQL server to a managed cloud database service (AWS RDS, Azure SQL, Cloud SQL). The application code stays mostly the same, but you offload infrastructure management to the cloud provider.
- Repurchase (replace with SaaS). Replace the on-premises application entirely with a cloud-native SaaS alternative. Instead of migrating your on-premises email server, switch to Microsoft 365 or Google Workspace. Instead of migrating your on-premises CRM, switch to Salesforce or HubSpot.
- Refactor (re-architect). Redesign the application to be cloud-native, taking advantage of cloud services like serverless functions, containers, and managed databases. This provides the most long-term benefit but requires the most effort and is typically reserved for strategic applications.
- Retire. Some applications are no longer needed. The migration inventory often reveals systems that are running but unused. Shut them down instead of migrating them.
- Retain. Some workloads should stay on-premises, at least for now. Applications with strict data residency requirements, legacy systems that cannot run in the cloud, or hardware-dependent applications (like industrial control systems) may need to remain on-premises.
Phase 2: Planning
With your inventory complete and workloads classified, you can build a migration plan with realistic timelines, costs, and risk mitigation.
Choose Your Cloud Provider
For most small businesses, the choice comes down to three providers:
- Microsoft Azure. The strongest choice if your company is already a Microsoft shop (Microsoft 365, Active Directory, Windows Server). Azure integrates tightly with existing Microsoft infrastructure, and hybrid scenarios (some resources on-premises, some in Azure) are well-supported. Azure's licensing deals for existing Microsoft customers often make it the most cost-effective option.
- Amazon Web Services (AWS). The largest and most mature cloud platform with the broadest range of services. AWS is the default choice for companies that need maximum flexibility, have developers who prefer AWS tooling, or plan to build custom cloud-native applications. The learning curve is steeper, but the ecosystem is unmatched.
- Google Cloud Platform (GCP). Strong in data analytics, machine learning, and Kubernetes-based workloads. GCP is often the best choice for companies that are heavy Google Workspace users or that need advanced data processing capabilities. Pricing is often competitive, and the interface is considered more intuitive than AWS.
The decision should be practical, not ideological. If 90% of your software is Microsoft-based, Azure is the path of least resistance. If your dev team already knows AWS, use AWS. Do not spend months evaluating providers - pick the one that aligns with your existing stack and move forward.
Plan Your Network Architecture
Your cloud network needs to be designed before you start moving workloads. Key decisions include:
- Virtual network design. Create a virtual private cloud (VPC) with subnets for different workload types (web servers in a public subnet, databases in a private subnet). Plan IP address ranges that do not conflict with your on-premises network.
- Connectivity. How will your offices connect to the cloud? Options range from VPN tunnels (lower cost, adequate for most small businesses) to dedicated connections like AWS Direct Connect or Azure ExpressRoute (higher cost, lower latency, required for performance-sensitive workloads).
- DNS and domain management. Plan how DNS resolution will work during and after migration. Users should not need to change URLs or bookmarks.
- Firewall and security groups. Define access rules before migrating. Which ports are open, which IP ranges can access which resources, and what traffic is allowed between subnets.
Estimate Costs
Cloud cost estimation is notoriously difficult because pricing models are complex. Use these tools and strategies to build a realistic cost projection:
- Provider cost calculators. AWS Pricing Calculator, Azure Pricing Calculator, and Google Cloud Pricing Calculator let you model your expected workload and get monthly cost estimates. Input your server specifications from the inventory phase to get instance-level pricing.
- Include data transfer costs. Data transfer into the cloud is typically free, but data transfer out is charged per gigabyte. If your applications serve significant outbound data (downloads, API responses, media), this cost can be substantial.
- Plan for reserved instances. For workloads that will run 24/7 in the cloud, reserved instances (1-year or 3-year commitments) save 30-60% compared to on-demand pricing. Identify your steady-state workloads and budget for reserved capacity.
- Add 20-30% buffer. Every cloud cost estimate underestimates the actual cost. Unexpected data transfer, unoptimized instance sizes, forgotten services, and learning-curve mistakes all add up. A 20-30% buffer on your initial estimate is realistic, not pessimistic.
Build a Migration Schedule
Migrate in waves, not all at once. Group workloads into migration waves based on:
- Wave 1: Low-risk, low-dependency workloads. Development and test environments, internal tools, static websites, and file servers. These validate your migration process and build team confidence with minimal business risk.
- Wave 2: Medium-complexity workloads. Business applications with moderate user counts and well-understood architectures. These are your standard rehost and replatform candidates.
- Wave 3: Critical and complex workloads. Production databases, customer-facing applications, and systems with complex dependencies. By this point, your team has migration experience and your cloud environment is proven.
Allow 2-4 weeks between waves for validation, issue resolution, and team recovery. A common mistake is scheduling waves back-to-back with no buffer, which means problems from Wave 1 cascade into Wave 2.
Phase 3: Pre-Migration Preparation
Before executing the migration, complete these preparation tasks for each wave:
Security and Compliance Setup
- Enable multi-factor authentication for all cloud admin accounts. No exceptions.
- Configure identity and access management (IAM) with least-privilege permissions. Every user and service gets only the access they need, nothing more.
- Enable cloud-native logging and monitoring (AWS CloudTrail, Azure Monitor, GCP Cloud Audit Logs) before migrating any workloads. You need visibility from day one.
- Verify that your cloud region meets data residency requirements. If regulations require data to stay in a specific country or region, confirm that your chosen region and provider comply.
- Set up encryption for data at rest and in transit. Most cloud providers offer this by default, but verify the configuration.
Backup and Rollback Plan
- Create full backups of every system before migration. Test that backups can actually be restored - an untested backup is not a backup.
- Document a rollback procedure for each workload. If the cloud deployment fails or performance is unacceptable, how do you revert to the on-premises system? How long does rollback take?
- Define success criteria for each migration. What does "working correctly in the cloud" mean for each application? Response times, functionality tests, data integrity checks - specify these before migrating so you have objective criteria for go/no-go decisions.
Communication Plan
- Notify affected users of migration windows and expected downtime. Be specific: "The finance application will be unavailable from 10 PM Tuesday to 6 AM Wednesday" is useful. "We are migrating some systems this week" is not.
- Identify a point of contact for each migrated application who can validate that the system is working correctly after migration.
- Prepare a support plan for the first 48 hours after each migration. Expect increased help desk ticket volume and ensure IT staff are available to respond quickly.
Phase 4: Migration Execution
With preparation complete, the actual migration follows a consistent pattern for each workload:
Step-by-Step Migration Process
- Final backup. Take a fresh backup of the system immediately before migration begins. Confirm backup integrity.
- Provision cloud resources. Create the cloud instances, databases, storage, and network configurations specified in the plan.
- Data migration. Transfer data from the source system to the cloud. For large datasets, this may use cloud provider migration tools (AWS Database Migration Service, Azure Migrate, Google Cloud Migrate). For smaller datasets, direct transfer over VPN or secure connection is sufficient.
- Application deployment. Install or deploy the application in the cloud environment. Configure connections to migrated databases and dependent services.
- Configuration and testing. Apply application configurations (environment variables, connection strings, certificates). Run functional tests to verify the application works correctly with the migrated data.
- Performance validation. Compare performance metrics (response times, throughput, error rates) against baseline measurements from the on-premises system. If performance is significantly worse, investigate before proceeding.
- DNS cutover. Update DNS records to point to the cloud-hosted application. This redirects user traffic from the on-premises system to the cloud. Plan for DNS propagation time (up to 48 hours, though usually faster).
- Monitoring. Watch the cloud-hosted application closely for the first 24-48 hours. Monitor for errors, performance issues, and user-reported problems.
- Decommission source. After a defined validation period (typically 2-4 weeks of stable cloud operation), decommission the on-premises system. Do not rush this step - keeping the source system available as a rollback option for a few weeks is worth the cost.
Data Migration Specifics
Data migration deserves special attention because it is where most migrations encounter problems:
- Validate data integrity after transfer. Compare record counts, checksums, and sample data between source and destination. Automated validation scripts that compare row counts and hash values across key tables catch issues that manual spot-checks miss.
- Handle the delta. Between the time you migrate data and the time you cut over, users continue making changes to the source system. You need a plan for capturing and applying these changes. Options include a final incremental sync immediately before cutover, or a brief maintenance window where users cannot access the system while the final data sync completes.
- Large datasets. If you have terabytes of data, transferring over the internet may take days or weeks. Cloud providers offer physical transfer devices (AWS Snowball, Azure Data Box) for large migrations. For smaller datasets (under 1 TB), direct network transfer is usually fast enough.
Phase 5: Post-Migration Validation
Migration is not complete when the application is running in the cloud. It is complete when you have verified that everything works correctly, performance meets expectations, and the environment is properly secured and monitored.
Validation Checklist
- Functional testing. Walk through every critical business process that uses the migrated application. Process a test transaction, generate a report, run an integration. Do not rely on "it seems to work" - follow a test script that covers specific functions.
- Performance testing. Measure response times under realistic load. If the application was handling 100 concurrent users on-premises, simulate 100 concurrent users against the cloud deployment and compare performance.
- Security validation. Verify that security groups and firewall rules are correctly configured. Run a vulnerability scan against the cloud deployment. Confirm that encryption is active for data at rest and in transit. Verify that access logs are being captured.
- Backup verification. Confirm that automated cloud backups are running and that you can restore from them. Test a restore to verify that backup data is complete and usable.
- Monitoring and alerting. Verify that monitoring dashboards show correct data for the migrated application. Confirm that alerts fire when they should (test by temporarily triggering a threshold).
- User acceptance. Have the business owner of each application confirm in writing that the cloud deployment meets their requirements. This formal signoff closes the migration and authorizes decommissioning the source system.
Cost Validation
After the first full month in the cloud, compare actual costs against your estimate. Cloud costs often surprise teams in the first few months:
- Check for oversized instances. If a virtual machine is running at 15% CPU utilization, downsize it.
- Verify that development and test environments are shut down outside business hours. A forgotten dev environment running 24/7 can cost hundreds of dollars per month unnecessarily.
- Review data transfer charges. Unexpected outbound data transfer is a common cost surprise.
- Set up cost alerts so you are notified when spending exceeds thresholds (80%, 100%, and 120% of budget).
Post-Migration Optimization
Once the migration is stable, focus on optimizing the cloud environment for cost and performance:
- Right-size instances. After 30 days of usage data, review every instance and resize to match actual workload requirements. Most companies overprovision by 30-50% during initial migration.
- Implement auto-scaling. For workloads with variable demand, configure auto-scaling so that capacity increases during peak periods and decreases during off-hours. This prevents paying for capacity you only need 8 hours a day.
- Use reserved instances. For steady-state workloads that run 24/7, purchase reserved instances to save 30-60% compared to on-demand pricing.
- Optimize storage. Move infrequently accessed data to lower-cost storage tiers (S3 Infrequent Access, Azure Cool Storage, Google Nearline). Set lifecycle policies to automatically move aging data to archive tiers.
- Review architecture. Now that you are in the cloud, evaluate which workloads would benefit from cloud-native services. Replacing a self-managed database with a managed service, or a virtual machine running a scheduled job with a serverless function, reduces both cost and management overhead.
Get IT Support Insights Delivered Weekly
Practical tips for IT teams - troubleshooting guides, cost-saving strategies, and tool reviews. No spam, unsubscribe anytime.
Ready to automate your IT support?
HelpBot resolves 60-70% of Tier 1 tickets automatically. 14-day free trial - no credit card required.
Start Free TrialManage Cloud Migration Support Tickets in One Place
Cloud migrations generate a surge of IT support tickets - access issues, performance questions, configuration problems. HelpBot keeps your team organized with AI-powered ticket routing and automated resolution for common cloud migration issues. Start your free trial.
Start Your Free Trial