Cloud Migration Strategy and Execution Questions
Planning and executing a move to the cloud: the migration strategies (rehost, replatform, refactor, repurchase, retire, retain), legacy assessment, dependency mapping, cutover planning, and rollback. Covers phased migration roadmaps, workload modernization, risk management during cutover, and validating success post-migration. The end-to-end migration lifecycle, not steady-state operations.
Given an enterprise application with moderate coupling, 36-month hardware depreciation, and strict cost constraints, explain how you would decide between rehosting (lift-and-shift) and refactoring/rearchitecting. What metrics and discovery data would you collect, how would you weigh TCO vs migration effort, and which stakeholders and business drivers would influence the decision?
Sample Answer
Direct answer: With only 36 months of remaining hardware depreciation and strict cost constraints, the default lean should be toward rehosting (lift-and-shift): a full refactor's payoff period is usually longer than 36 months, so the business case has to clear a high bar to justify it here.
Structured elaboration
What metrics and discovery data to collect. Current infrastructure cost (including the SUNK but still-relevant depreciation schedule: if hardware is already 30 months into a 36-month depreciation cycle, the remaining book value is small and shouldn't anchor the decision the way a fresh 36-month schedule would), the application's actual resource utilization (a rightsized cloud footprint is often much cheaper than a literal lift-and-shift of over-provisioned on-prem capacity), coupling and dependency count (a proxy for refactor effort and risk), current operational cost (headcount time spent on patching/capacity planning that a managed service or refactor would reduce), and the application's expected LIFESPAN beyond the 36-month horizon (a refactor only pays off if the app is expected to run meaningfully longer than the payback period).
Weighing TCO (total cost of ownership) vs migration effort. Build two TCO curves: one for Rehost (lower upfront effort, cloud infrastructure cost from day one, minimal ongoing operational savings) and one for Refactor (higher upfront engineering cost, lower steady-state infrastructure and operational cost). Find the crossover point: if Refactor's higher upfront cost pays back in, say, 20 months and the app has a genuinely longer expected life, refactor might still win despite the tight 36-month framing. If the crossover point is close to or beyond 36 months, Rehost is the financially sound choice, and the 36-month depreciation constraint essentially resolves the decision.
Stakeholders and business drivers. Finance (depreciation schedule and capital-vs-opex framing: cloud shifts hardware capex (capital expenditure -- a large upfront purchase, like buying servers) to opex (operating expenditure -- an ongoing recurring cost, like a monthly cloud bill), which itself is sometimes the DOMINANT driver independent of the technical TCO math), the application owner (near-term feature roadmap that a refactor would either enable or delay), and infrastructure/ops (headcount and operational burden reduction, which is a real but often under-counted cost saving).
Worked example. Suppose current on-prem cost is $30k/month (fully loaded, including ops time), rightsized cloud rehost cost is $22k/month (savings mostly from rightsizing and eliminating idle capacity, not from architecture change), and a refactor to cloud-native (serverless/managed services) would run $18k/month post-migration but costs an estimated $400k in engineering effort. The refactor's monthly savings over rehost is $4k; payback on the $400k investment is 100 months, far beyond the 36-month window, and beyond most reasonable estimates of the app's remaining useful life at this scale. The financial answer is Rehost, full stop, unless a non-cost driver (a hard scaling ceiling, a compliance requirement only a redesign satisfies) overrides the TCO math.
Trade-offs & pitfalls. The most common mistake in this kind of decision is anchoring on the SUNK cost of existing hardware investment rather than its REMAINING value, which biases toward staying on-prem longer than is financially rational. The second common mistake is running the TCO comparison against an un-rightsized lift-and-shift (literally the same instance sizes as on-prem), which understates Rehost's savings and makes Refactor look artificially more attractive by comparison; the crossover analysis has to compare against a REALISTIC rehost cost, not a naive one.
A customer demands near-zero downtime for a complex migration with multiple integrations. Draft a negotiation and technical plan that defines acceptable risk levels, migration strategy options (big-bang vs phased vs hybrid), rollback criteria, commercial protections, and technical safeguards you would propose in the contract and runbook.
Sample Answer
Direct answer: For a customer demanding near-zero downtime on a complex, multi-integration migration, the negotiation needs to separate what's technically achievable from what's commercially promised: define acceptable risk levels and rollback criteria FIRST as an internal technical position, then negotiate the commercial terms and contract language around that honest technical assessment, rather than promising a downtime target the team hasn't actually validated is achievable.
Structured elaboration. Acceptable risk levels: define explicitly, before any customer conversation, what level of residual risk the team is genuinely comfortable committing to (e.g., "near-zero" in practice usually means a specific, small, bounded maintenance window, not literal zero, and that distinction needs to be made explicit rather than left to the customer's interpretation of "near-zero"). Migration strategy options (big-bang vs phased vs hybrid): big-bang cuts every integration over at once, which is fast but puts the full blast radius behind a single event, a poor fit for a strict downtime commitment. Phased migrates one integration at a time in sequence, validating each before moving to the next, which bounds the blast radius per step but stretches the overall timeline across every integration. Hybrid is neither of those on its own: it combines a phased rollout for the tightly-coupled, high-risk integrations (where each one genuinely needs its own validated step) with a single big-bang cutover for a cluster of low-risk, decoupled integrations that add little risk if moved together and would only cost extra calendar time if split apart for no real safety benefit. For a complex multi-integration system, hybrid generally offers the better risk profile for a strict downtime commitment: it gets the blast-radius protection of phased where it actually matters and avoids paying phased's full timeline cost everywhere else. Rollback criteria: defined and shared with the customer as PART of the commitment, not hidden internal detail, since a customer demanding near-zero downtime should also understand what triggers a rollback and what that means for the timeline, rather than being surprised by a rollback decision later. Commercial protections: language that ties the SLA/downtime commitment to the AGREED technical plan and its rollback provisions (e.g., a defined maintenance window is contractually distinct from "unplanned downtime," and a rollback triggered by pre-agreed criteria is a planned contingency, not a breach), so the contract reflects the honest, negotiated risk position rather than an unqualified zero-downtime promise the team can't actually guarantee. Technical safeguards in the runbook: the actual technical plan (phased approach, explicit rollback triggers, a validated parallel-run period before full cutover) should be the substance behind whatever commercial commitment is made, not a separate internal document that doesn't match what was promised externally.
Worked example. Rather than agreeing to an unqualified "zero downtime" commitment, the negotiated position is hybrid, not purely phased: the system's handful of tightly-coupled, high-risk integrations move as individually-validated phases over several weeks, each with defined rollback criteria, while the remaining low-risk, largely independent integrations are grouped into one big-bang cutover once their (much smaller) shared blast radius is understood; a single, pre-scheduled, brief (e.g., under 5 minutes) maintenance window for the final cutover of the core system, explicitly called out in the contract as a planned, agreed exception to the broader near-zero-downtime commitment; and a defined SLA credit or remedy if that specific window is exceeded, which is a much more defensible and deliverable commercial commitment than an unqualified promise the team privately knows isn't fully achievable.
Trade-offs & pitfalls. Agreeing to an unqualified "zero downtime, no exceptions" commitment under commercial pressure, without the technical team's honest input on what's actually achievable, sets up a commitment that's likely to be broken; the negotiation should happen WITH the technical risk assessment as an input, not after a commercial promise has already been made that the technical plan then has to somehow deliver on.
You are assessing a 200-application on-prem estate for cloud migration. Describe a practical discovery and dependency-mapping process you would run: which automated and manual tools you would use, what telemetry/metrics and topology data you would collect, what outputs you would produce (CMDB, dependency graphs, migration runbooks), and how you would validate and keep the discovery results accurate throughout planning.
Sample Answer
Direct answer: For a 200-application discovery effort, combine automated dependency-discovery tooling (agent-based and network-flow-based) for breadth with targeted manual interviews for the handful of applications automated tools can't fully characterize, and treat the output as a living artifact that gets re-validated throughout planning, not a one-time snapshot.
Structured elaboration
Automated tools. Agent-based discovery (installing a lightweight agent on each server) gives the most accurate process-level and network-connection data but requires access and installation across the estate, which is often the slower path politically and operationally. Agentless/network-flow-based discovery (analyzing switch/firewall flow logs, or using an agentless scanner that probes open ports and traffic patterns) is faster to deploy at scale and doesn't require touching every server, at the cost of somewhat less precise process-level attribution (you see that host A talks to host B on port 3306, but not necessarily which process or config drove that connection). A combination is standard: agentless for the initial broad sweep across all 200 applications, agent-based for the smaller set where the agentless data is ambiguous or the application is deemed high-risk enough to warrant precision.
Telemetry/metrics and topology data to collect. Network flow data (who talks to whom, on what ports, how often, and at what data volume, since volume matters for later transfer-cost estimation), resource utilization (CPU/memory/disk over a representative period, ideally including a peak-load window like month-end or a seasonal peak, not just an average day), process-to-service mapping (which binaries/services actually run on each host), and business ownership metadata (who owns this application, what's its criticality tier), which automated tools generally can't discover on their own and has to come from manual interviews or a CMDB (Configuration Management Database, the inventory-of-record for IT assets) if one already exists and is trustworthy.
Outputs. A CMDB (or an update to an existing one) as the system of record for application inventory; a dependency graph (visual and queryable) showing service-to-service and service-to-database connections; per-application migration runbooks that capture the specific steps, owners, and validation checks needed for that application's move, seeded from the discovery data rather than written from scratch later.
Validating and keeping discovery accurate through planning. Cross-validate automated findings against interviews with application owners (owners often know about batch jobs, cron-triggered integrations, or seasonal dependencies that don't show up in a normal-traffic discovery window). Re-run the automated scan periodically through the planning phase, since applications change (a new integration added mid-planning won't show up in a discovery snapshot taken months earlier). Flag and specifically investigate any HOST WITH NO DISCOVERED OUTBOUND TRAFFIC during the discovery window: that's either a genuinely standalone application or, more often, a dependency that simply didn't fire during the observation period (e.g., a monthly batch job), and treating it as standalone without checking is a common source of migration-day surprises.
Worked example. For a 200-app estate, a realistic discovery timeline: 2-3 weeks of agentless network-flow collection across the full estate (capturing at least one full business cycle, ideally including month-end), a parallel 2-week round of owner interviews for the ~20-30 highest-criticality applications (identified from a quick business-impact pass, not from technical data alone), then 1-2 weeks reconciling the automated and interview data into a single dependency graph and CMDB update, with a small set (typically 5-10%) of low-confidence applications getting agent-based deep-dive discovery before planning locks in.
Trade-offs & pitfalls. The most damaging mistake is treating a single discovery pass as final and locking migration waves against it; hidden dependencies (especially batch/cron-triggered ones outside the observation window) are the most common cause of migration-day surprises, and the mitigation isn't better tooling, it's an explicit plan to re-validate before each wave cuts over, not just once at the start of the program.
You are responsible for migrating a monolithic, on-premise ERP application that is highly coupled and subject to strict compliance. Present an enterprise migration strategy describing assessment phases, criteria to choose lift-and-shift vs replatform vs refactor vs full rearchitect, incremental decomposition approaches, testing strategy, risk mitigation, timeline estimates, and success milestones.
Sample Answer
Direct answer: For a highly-coupled, compliance-bound monolithic ERP (Enterprise Resource Planning, the class of system that runs an organization's core finance, inventory, and HR processes in one integrated suite), the right approach is a phased strategy: assess and decompose the dependency graph first, pick the migration approach PER MODULE rather than for the whole system, and sequence the compliance-sensitive core last (after the surrounding scaffolding and process are proven on lower-risk pieces).
Structured elaboration
Assessment phase. Before choosing an approach, build a real dependency map: which modules share a database schema, which have synchronous calls to external systems (payment processors, tax engines, EDI partners), and which reports/queries reach directly into tables that other modules also write. For an ERP this typically surfaces 3-5 tightly-coupled clusters (finance/GL -- GL meaning General Ledger, the master record of every financial transaction -- inventory/fulfillment, HR/payroll, and often a reporting layer that reads across all of them). Compliance scope (SOX -- the Sarbanes-Oxley Act, the US law governing financial-reporting controls and audit trails -- and industry-specific controls) usually concentrates in finance and any module handling regulated data, so that scope determines what "strict compliance" constrains: audit-trail continuity through the migration, segregation-of-duties controls staying enforced during any dual-running period, and evidence that the migrated environment reproduces the same control set, not just the same functionality.
Choosing lift-and-shift vs replatform vs refactor vs full rearchitect, per cluster. The reporting layer and any peripheral modules with few external compliance obligations are strong Replatform or even Rehost candidates: get them onto managed infrastructure fast, low risk, buys engineering time. The finance/GL core is the highest-risk piece: a full rearchitect here is rarely justified in the same program (ERP cores are typically 15-20 years of accumulated business logic; rewriting risks silently breaking calculations nobody remembers the rationale for). The pragmatic choice is Rehost or a conservative Replatform (move the database to a managed equivalent, keep the application logic intact) for the core, with refactoring deferred to a LATER, separate initiative once the team has operational confidence in the new environment.
Decomposition approach. Rather than a big-bang cutover of the whole ERP, decompose by BOUNDED CONTEXT (a self-contained business area, like fulfillment or finance, whose data and logic can be grouped and moved as one unit) rather than by technical layer: migrate a full vertical slice (e.g., the entire fulfillment path, database through UI) together, keeping it able to talk back to the still-on-prem finance core through a defined integration seam (typically an anti-corruption layer or API facade) during the transition. This lets you validate the migration approach on a lower-risk cluster before touching the compliance-critical core.
Testing strategy. Beyond functional tests, an ERP migration needs PARALLEL-RUN validation for the compliance-sensitive modules: run old and new systems against the same input stream for a defined period (often a full close cycle for finance, so at least one month-end and ideally one quarter-end), and reconcile every output (ledger balances, tax calculations, reports) rather than sampling, because compliance auditors will ask for exactly this evidence.
Risk mitigation. Key risks: (1) hidden dependencies the discovery phase missed (mitigate with a coexistence period and thorough logging of any call that unexpectedly still targets the old system); (2) compliance-control gaps in the new environment (mitigate by mapping every control to its new-environment equivalent BEFORE cutover, not after); (3) a stalled dual-running period becoming a permanent state (mitigate with a hard decommission date and executive sign-off gating any extension).
Worked example. A realistic 18-month timeline: months 1-3 discovery and dependency mapping; months 4-8 migrate and stabilize the low-risk peripheral modules (reporting, non-regulated inventory); months 9-14 migrate fulfillment/logistics behind an integration seam to the still-on-prem finance core; months 15-17 migrate the finance/GL core itself with a full parallel-run across at least one quarter-end close; month 18 decommission the legacy environment after auditor sign-off. Success milestones are tied to compliance evidence at each stage, not just "module X is live."
Trade-offs & pitfalls. The temptation to refactor the finance core "while we're in there" is the single biggest risk to the timeline and to compliance continuity; a senior architect explicitly defers that work. The second pitfall is sequencing the highest-risk, most-coupled module first because it feels like "getting the hard part out of the way": that inverts the usual play of building operational confidence on lower-stakes migrations before touching the piece where a mistake has real financial-reporting consequences.
List and compare commonly used discovery, assessment, and migration tools/services across AWS, Azure, and GCP (for example: AWS Migration Hub, AWS DMS/CloudEndure, Azure Migrate, Azure Database Migration Service, Google Cloud Migrate/Database Migration Service). For each tool describe typical use cases, strengths, limitations, and what POC you would run to validate it for an enterprise workload.
Sample Answer
Direct answer: AWS, Azure, and GCP each offer a discovery/inventory tool, one or more database/server migration services, and cost-estimation tooling, and choosing between them is less about picking a "best" provider and more about matching each tool's strengths to the specific migration task and validating it via a scoped POC before committing at scale.
Structured elaboration. AWS: AWS Migration Hub (a central tracking/dashboard layer that aggregates status across other AWS migration tools rather than being a migration engine itself; limitation: it is a tracking layer ONLY, it never moves data or servers itself, so it still fully depends on another tool underneath it to do the actual migration work), AWS DMS (Database Migration Service) / CloudEndure-lineage tooling (database and server replication/migration, strong for database migrations specifically with broad source/target engine support; limitation: schema/DDL conversion for heterogeneous engine pairs is often shallow, so complex stored procedures and proprietary SQL dialects frequently need manual rework DMS itself won't do), useful for large heterogeneous estates where centralized tracking across many migration streams matters. Azure: Azure Migrate (discovery, assessment, and orchestration of the migration itself, notably strong on the discovery/assessment side for VM estates; limitation: its assessment sizing recommendations are tuned around Azure's own VM families, so cost/sizing comparisons against other clouds need independent verification), Azure Database Migration Service (focused specifically on database migrations, with particularly strong support for SQL Server-family migrations given Microsoft's own database heritage; limitation: that SQL Server strength doesn't carry over as cleanly to non-Microsoft source engines, where feature coverage and community troubleshooting resources are noticeably thinner), useful when the source estate is already Windows/SQL-Server-heavy, where Microsoft's own tooling tends to have the deepest compatibility. Google Cloud: Google Cloud Migrate (VM/server migration; limitation: narrower breadth of supported source hypervisors/formats than the AWS and Azure equivalents, so an unusual source virtualization platform is more likely to need a workaround) and Database Migration Service (database-focused, particularly strong for MySQL/PostgreSQL targets; limitation: support for heterogeneous migrations into non-Postgres/MySQL targets is comparatively limited, so a move toward, say, Spanner needs additional tooling beyond this service alone), useful for estates already leaning open-source-database-heavy or where the target architecture favors GCP's data/analytics ecosystem. POC to validate for an enterprise workload: for whichever tool(s) are shortlisted, run a POC migrating a representative (not trivial) sample workload end-to-end, specifically validating (a) does the tool handle the estate's actual complexity (a specific legacy database version, an unusual schema pattern) rather than just the vendor's demo scenario, (b) what's the actual measured downtime/cutover characteristics versus the vendor's marketing claims, and (c) how well does the tool's output integrate with the team's existing runbooks/automation, rather than requiring the team to adopt an entirely new operational model just for the migration tool. Concretely, the POC's specific focus should follow directly from each tool's own known limitation, not be identical across tools: for AWS Migration Hub, the POC should confirm it correctly aggregates status across whichever underlying migration tools are actually chosen, since it never moves data itself; for AWS DMS, the POC should run the estate's trickiest schema or stored-procedure case through the tool specifically, to measure how much manual DDL rework is actually needed rather than assuming a clean, simple table migrates representatively; for Azure Migrate, the POC should independently recompute VM sizing/cost for a sample of servers rather than trusting its Azure-tuned assessment defaults; for Azure Database Migration Service, the POC should specifically test a non-SQL-Server source engine if one exists in the estate, since that's where its coverage is measurably thinner; for Google Cloud Migrate, the POC should confirm the estate's actual source hypervisor/VM format is supported at all, given its narrower breadth versus AWS and Azure; and for Google Cloud Database Migration Service, the POC should target whatever engine the migration is actually headed toward (Spanner, AlloyDB, etc.), not just confirm MySQL/PostgreSQL support, since that's where the service's coverage thins out.
Worked example. An enterprise with a heavily SQL-Server-based estate migrating primarily to Azure would likely find Azure Database Migration Service has the deepest native compatibility (least schema-translation friction) for that specific source; the same enterprise, if migrating a smaller set of open-source-database workloads to GCP as a secondary target, would separately evaluate GCP's Database Migration Service for THAT subset, rather than assuming one tool/provider fits every workload in a genuinely heterogeneous estate.
Trade-offs & pitfalls. Committing to a single vendor's migration toolchain across an entire heterogeneous estate, without validating via POC that the tool genuinely handles the estate's actual technical variety (not just its most common case), risks discovering mid-migration that a meaningful subset of workloads need a different approach than planned, late enough to disrupt the schedule.
Unlock Full Question Bank
Get access to all 26 Cloud Migration Strategy and Execution interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.