COBOL to C# on Azure

Azure Mainframe Modernization in Five Steps

Plan Azure mainframe modernization in five steps, from workload discovery and target design to code conversion, testing and cutover.

A mainframe application can do its job reliably for decades but put a serious break on innovation capacity. Moving selected workloads to Microsoft Azure gives organizations a chance to address those limits while preserving the business processes they depend on. This guide walks through five steps for Azure mainframe modernization, from mapping dependencies and designing the Azure environment to transforming code and data, verifying business results, and preparing for cutover.

For an organization already using Azure, modernizing selected workloads can help teams build on the deployment and monitoring practices they use elsewhere. An insurer, for example, might start with the claims status function so it can add updates to its customer portal while keeping claims adjudication on the mainframe during the transition.

Amdocs uses rule-based conversion and testing together with agentic AI capabilities. This five-step guide focuses on migrating the workload while preserving its agreed business behavior.

Key Takeaways

  • Choose the modernization path per workload and inventory dependencies before designing Azure infrastructure.
  • Select compute and data services around transactions, batch and recovery requirements.
  • Verify application behavior and data equivalence before cutover.

Step 1. Discover applications and dependencies

Map programs, copybooks, online transactions, JCL or other job controls, datasets and interfaces. Identify which components must move together. Rehosting limits changes to application code. Replatforming updates selected technology components. Refactoring changes the code, for example from COBOL to Java or C#. Rearchitecture changes application boundaries and interactions. Choose the least disruptive path that meets each workload’s business objective.

Step 2. Design the Azure target

Evaluate Azure Virtual Machines and Azure Kubernetes Service (AKS) based on application portability, runtime support and operational skills. Where a managed relational database fits, evaluate options such as Azure SQL Managed Instance or Azure Database for PostgreSQL against engine compatibility and workload needs. Size for actual transaction and batch workloads. Specify integrations, security, monitoring, recovery and connectivity to systems that stay behind. If one application continues to call a mainframe service, model that path under peak load and define which team owns recovery when the connection fails.

Step 3. Transform code and data

Use CodeTurn for supported source conversion and DataTurn to map and migrate scoped data. Review output with the target engineering team and apply fixes to common rules so the team can rerun them consistently. Agentic AI can help explain undocumented code and identify dependencies. Engineers verify findings and control release decisions.

Step 4. Verify functional equivalence

Test agreed business behavior using equivalent inputs and data. Compare responses, job outcomes, outbound files and database changes. TestMatch and DataMatch support application and data checks where configured. Include encoding and sort differences, batch deadlines, peak loads and recovery after failure. Obtain business signoff for intentional differences. Where an application has overnight jobs, time a full chain using production-like volume and verify that a failed job can restart without duplicating updates.

Step 5. Rehearse cutover and hand over operations

Rehearse the final data load and validation. Define when to pause writes, how to switch users and interfaces, and what triggers rollback. Prepare the Azure environment through approved deployment pipelines and infrastructure definitions. Decommission the legacy environment when the acceptance, retention and operational handover criteria are met. Document restore procedures and give the operating team practice using alerts and recovering from an incident before it assumes ownership.

What an Azure migration looks like in production

Astadia helped the U.S. Air Force move a mission-critical Unisys maintenance and logistics system serving more than 260,000 users to Azure. Amdocs reported an expected 82.7% reduction in operating costs. Jefferson County, Alabama, also moved workloads from an aging Unisys mainframe to Azure, including its sewer billing application.

 

Explore our holistic mainframe modernization solution

Unlock agility, innovation and all the cloud benefits while eliminating mainframe-related risks with an end-to-end, AI-driven transformation solution.

Learn more

Related Insights

Frequently Asked Questions

Why refactor COBOL to Java or C# when moving to Azure?

Refactoring is a strong option when you want to preserve established business rules and make the application easier for your teams to maintain and extend. Amdocs uses rule-based conversion for supported workloads, and engineers compare the converted application with the original to verify critical behaviors such as calculations, database updates, and batch results. 

How long does a mainframe migration to Azure take?

Timing depends on the estate, chosen path, integration dependencies, data volumes and evidence required to go live. A representative pilot and a cutover rehearsal can improve the estimate. 

How can agentic AI help with mainframe modernization on Azure?

AI agents can help engineers trace dependencies across legacy programs, batch jobs, and data stores, then suggest scenarios to test on Azure. For example, an agent might flag that a billing job depends on a rate file refreshed by a separate overnight process. Engineers confirm the dependency, include it in the migration plan, and use repeatable tests to verify that the Azure workload applies the correct rates and meets its batch deadline. 

When should you rearchitect a mainframe application for Azure?

Rearchitect when the application’s structure makes it hard to release changes or scale a business capability independently. For example, a bank could separate payment notifications from a tightly coupled payments application so it can update them without redeploying the processing system. Start with a clearly defined capability, map the data and processes it shares with the rest of the application, and verify how both parts work together before expanding. Refactoring can move the broader application to Java or C#, while selective rearchitecting addresses the areas that need a different design.

Transform Smarter. Deploy Faster.

Ask us how.

Transform Smarter. Deploy Faster.

Ask us how.