Define the first move

Start by writing down what the move is meant to improve. Is the team trying to replace aging hardware, make deployments easier, handle variable traffic or reduce time spent maintaining servers? Choose one or two goals and decide how you will recognize progress. A migration is not automatically an improvement: an application moved without changes may carry its existing problems into a new environment.

Keep the first scope small. A low-risk internal application or a development environment can help the team learn how its chosen cloud platform works before moving a critical service. Name an owner for the migration and identify who can approve changes, answer application questions and respond if something fails. Put the planned scope, exclusions and success criteria in a document the whole team can find.

Inventory applications, data and dependencies

For each system in scope, record where it runs, who uses it, how it is deployed and which other systems it contacts. Include databases, file storage, scheduled jobs, email services, authentication providers and integrations that receive data from the application. Note any fixed IP addresses, DNS names or firewall rules. A simple diagram showing these connections can reveal dependencies that a server list misses.

Check the data before choosing how to move it. Estimate its size, how quickly it changes and how long a transfer might take over the available connection. Identify what must remain available during the move and whether a brief read-only period is acceptable. Also record how long backups are kept and what the team needs to be able to restore. These answers shape both the migration sequence and the rollback plan.

Choose a target design and set guardrails

Decide whether the first move will use virtual machines, managed application hosting, containers or managed databases. The simplest suitable option is often easier for a small team to operate than a design with many new components. Draw the proposed layout: where requests enter, where the application runs, where data is stored and which services need private network access. Check that the chosen services support the application’s operating system, runtime and required integrations.

Set up separate access for people and workloads. Give each only the permissions needed for its tasks, enable multifactor authentication for human accounts where available and avoid storing credentials in source code. Plan how secrets will be stored and rotated. Review encryption options for data in transit and at rest, and decide who can view logs and backups. The provider operates parts of the platform, but the team still needs to understand which settings, accounts, applications and data it is responsible for.

Create a cost estimate before provisioning resources. Include compute, storage, database capacity, backups, logging and data transfer, rather than looking only at the price of a server. Set a budget alert and a naming convention so resources are easier to identify. Record which environments can be switched off when not in use; unused test resources can otherwise remain running unnoticed.

Rehearse, migrate and verify

Build the target environment in a repeatable way where practical, and test it with non-production data first. Confirm that users can sign in, key workflows complete, integrations connect and monitoring captures errors. Run a restore test from a backup instead of assuming that a successful backup job guarantees recovery. Write down the steps and approximate time needed to restore service.

Plan the cutover as a sequence, not a single switch. Decide when to copy initial data, how to handle changes made afterward and when to direct users to the new system. If DNS is involved, allow for records to take time to update. Define a clear point at which the team will stop, investigate or return to the old system. Keep the old environment available until checks show that the new one works and the data is complete.

During the cutover, use a short verification list: application health, representative user tasks, database access, background jobs, incoming traffic, outbound integrations and error logs. Assign someone to communicate status to affected users. Record unexpected issues while they are fresh; those notes will improve the next migration.

Prepare for life after cutover

A successful launch is the start of cloud operations, not the end of the project. Assign owners for security updates, access reviews, backups, alerts and monthly cost checks. Make sure alerts go to a channel someone monitors, and document how to restart a service, investigate a failure and restore data. Review resource use after the application has run under normal conditions; the initial capacity estimate may need adjustment.

Finally, remove temporary access and resources created for the move, and retire the old environment only when the team is confident it is no longer needed for recovery. Update diagrams and instructions to reflect what was actually deployed. For a small team, a short, accurate runbook and a tested restore procedure are more useful than an elaborate plan that nobody maintains.

Back to category ↗