AI-Powered .NET Application Modernization at Scale

thomson_reuters · Legal · 2024 · source Agentic: yes · promotional bias: med · source-backed · extracted with prompt 0.5.4 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: .NET application modernization

Thomson Reuters needed to modernize hundreds of mission-critical legacy .NET Framework applications from Windows-heavy infrastructure toward modern .NET, Linux containers, Graviton, and cloud-native deployment without stopping production systems or overwhelming engineering teams.

Constraints:

Architecture

Thomson Reuters adopted AWS Transform for .NET as an agentic modernization workflow. The service creates an end-to-end job plan through a chat/web experience, performs discovery to identify application type, lines of code, and assessment inputs, analyzes internal and external dependencies, applies predefined code conversion patterns, executes validation including unit tests, and produces transformation assessment and Linux-readiness reports. Humans approve repositories, selected projects, and deployment readiness. Remaining deltas after partial transformations are handled by product engineering teams using reports and AI-assisted tools such as Amazon Q Developer. The target is modern .NET running on Linux containers and potentially Graviton/serverless infrastructure.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  legacy-dotnet-portfolio["legacy-dotnet-portfolio"] --> aws-transform-job-plan["aws-transform-job-plan"]
  aws-transform-job-plan --> discovery-stage["discovery-stage"]
  aws-transform-job-plan --> human-approval-gates["human-approval-gates"]
  discovery-stage --> dependency-analysis["dependency-analysis"]
  dependency-analysis --> code-conversion-engine["code-conversion-engine"]
  code-conversion-engine --> validation-stage["validation-stage"]
  validation-stage --> assessment-reports["assessment-reports"]
  validation-stage --> human-approval-gates
  validation-stage --> github-pr-branch["github-pr-branch"]
  assessment-reports --> product-engineering-followup["product-engineering-followup"]
  github-pr-branch --> product-engineering-followup
  product-engineering-followup --> linux-container-target["linux-container-target"]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
legacy-dotnet-portfolio Set of .NET Framework applications running on Windows servers with complex dependencies. aws-transform-job-plan
aws-transform-job-plan AI-created end-to-end modernization plan and collaboration workspace. legacy-dotnet-portfolio, discovery-stage, human-approval-gates
discovery-stage Identifies application type, lines of code, and assessment requirements. aws-transform-job-plan, dependency-analysis
dependency-analysis Maps internal and external dependencies and compatibility constraints. discovery-stage, code-conversion-engine
code-conversion-engine Applies predefined conversion patterns to port .NET Framework code to modern .NET. dependency-analysis, validation-stage
validation-stage Runs unit tests, performance checks, and deployment-readiness validation. code-conversion-engine, assessment-reports, human-approval-gates
assessment-reports Transformation assessment and Linux-readiness reports with gaps and remediation steps. validation-stage, product-engineering-followup
human-approval-gates Repository, project-selection, and deployment approvals by humans. aws-transform-job-plan, validation-stage
github-pr-branch Branch and pull request containing transformed code. validation-stage, product-engineering-followup
product-engineering-followup Engineering team closes transformation deltas and validates production readiness. assessment-reports, github-pr-branch, linux-container-target
linux-container-target Modernized deployment target for transformed applications. product-engineering-followup

Data flow

A modernization candidate enters AWS Transform. The tool discovers the application type, lines of code, and assessment needs. It analyzes internal and external dependencies and compatibility gaps. It converts code using predefined conversion patterns, then validates transformed code through tests and approval checks. It emits a transformation assessment summary and Linux-readiness report with remediation guidance. AWS Transform commits transformed code to a branch and opens a PR; product engineers pull the code, inspect remaining deltas, and complete fixes before deployment to Linux containers or other modern runtimes.

4 supporting quotes
“It always starts with the discovery, isn't it? So after the discovery is done, you start analyzing the code”transcript, stated
“during the analysis process you find out the compatibilities as well as the incompatibilities before you start quoting the code.”transcript, stated
“Your unit tests are executed and one more thing is to also check for the approval.”transcript, stated
“it creates the transformation assessment summary report and lastly it creates the Linux readiness report.”transcript, stated

Why this architecture

The workflow preserves human gates because modernization affects mission-critical production code and partially successful transformations still need engineering judgment. Discovery and dependency analysis are first-class because legacy .NET migration is not just a version bump: nested dependencies, deprecated APIs, Windows-only libraries, Web Forms, Win32 DLLs, and VB.NET can all block porting. Assessment and Linux-readiness reports convert automated transformation into actionable engineering work. PR-based handoff lets product teams review deltas instead of trusting an opaque code rewrite.

4 supporting quotes
“migrating Legacy .NET application from the Legacy .NET framework to .NET core is not just a version upgrade.”transcript, stated
“There is always human in the loop because you want to make sure that before even you get started, you need a human to approve the repository.”transcript, stated
“these transformations, trust me, they are never 100% success. A partially successful transformation could mean 50%, 70%, or maybe 90%.”transcript, stated
“AWS Transform commits the transform code into a new branch in the GitHub repository and it creates a new pr.”transcript, stated

Models used: AWS Transform for .NET · Amazon Bedrock LLMs · Amazon Q Developer

Scale

Alternatives considered (roads not taken)

Manual and semi-automated modernization

Rejected because: It was labor-intensive, error-prone, and created collaboration bottlenecks for distributed teams.

“this entire process is labor intensive because it's a combination of a manual and a semi-automated work together. And because of that, it's error prone as well.”transcript, stated

Other .NET porting tools

Rejected because: They took significant time and effort, with months of planning and hurdles during implementation.

“before AWS Transform, we explored various .NET porting tools and it took us a lot of time and effort.”transcript, stated
“the project planning itself used to take a few months and we faced various hurdles during the implementation.”transcript, stated

Assume AI transformation is fully complete

Rejected because: Transformations can be only 50%, 70%, or 90% successful, and product engineering must address deltas.

“A partially successful transformation could mean 50%, 70%, or maybe 90%.”transcript, stated
“there's always a delta that's remaining because of the various factors I was just talking about”transcript, stated

Greenfield rewrite or shutdown-based modernization

Rejected because: The company has production systems at millions-of-lines scale and cannot shut down or start over.

“it is helping us to move safely into production without shutting down or starting over because company like ours, we don't get a greenfield reset”transcript, stated

Patterns

human-in-the-loop-gate (governance)

Humans approve repositories, selected projects, and whether transformed code is ready to deploy.

“you need a human to approve the repository. You need human to approve how many projects you are selecting and you need approval to make sure your transformation is okay to deploy that.”transcript, stated

tool-use-orchestration (orchestration)

AWS Transform orchestrates discovery, dependency analysis, conversion, validation, reports, branches, and PR handoff as a modernization workflow.

“The AI agent helps us create this job plan, you know, the end-to-end job plan along with all the background resources using a simple chat experience.”transcript, stated

eval-driven-development (evaluation)

The transformation process includes unit tests, performance comparisons, transformation summaries, and Linux-readiness reports before deployment.

“Your unit tests are executed and one more thing is to also check for the approval.”transcript, stated
“with the performance metrics evaluation before and after, it makes sure that it it does an proper checking before you do the transformation”transcript, stated

batch-offline-processing (orchestration)

The team runs transformations at portfolio scale, processing many applications and millions of lines per month rather than one manual project at a time.

“we have progressed from transforming a single .NET solution in Visual Studio to now running transformations at scale using the web experience.”transcript, stated
“Currently we are modernizing over 1.5 million lines of code per month.”transcript, stated

Tradeoffs

Use AWS Transform as the modernization force multiplier.

Chose agentic AI-assisted transformation workflow over slow manual/semi-automated modernization.

Rationale: The team needed velocity, reliability, and intelligence at hundreds-of-applications scale.

“we ended up choosing AWS Transform for .NET. Now you might be wondering why AWS Transform for .NET because for us it came down to three things, reliability, intelligence, and velocity.”transcript, stated

Move from Windows servers to Linux containers and Graviton.

Chose Linux, containerization, and Graviton modernization path over continued Windows-server operation.

Rationale: The target reduces Windows licensing and operating costs while improving price/performance.

“we have estimated potential savings of millions of dollars by migrating from Windows to Linux, adopting Graviton servers and containerization.”transcript, stated

Keep human approval gates.

Chose approved repositories, project selection, and deployment readiness over fully automated end-to-end code migration.

Rationale: Mission-critical production systems and partial transformations require accountable engineering judgment.

“There is always human in the loop because you want to make sure that before even you get started, you need a human to approve the repository.”transcript, stated

Gotchas (what bit them)

Legacy .NET modernization is not a simple version upgrade.

Root cause: Applications contain deeply nested dependencies, deprecated APIs, runtime differences, and compatibility constraints.

Resolution: Run discovery and dependency analysis before code conversion, then use reports and engineering follow-up for unresolved gaps.

“migrating Legacy .NET application from the Legacy .NET framework to .NET core is not just a version upgrade.”transcript, stated
“Most of these legacy APIs are deprecated or they just behave differently in .NET core.”transcript, stated

AI transformation does not reach 100% completion automatically.

Root cause: Unsupported libraries, Web Forms/Windows Forms, Win32 DLLs, VB.NET, and non-C# components can remain after conversion.

Resolution: Keep product engineers in the loop and use transformation logs/summaries plus Amazon Q Developer to close the delta.

“AI is not doing 100% job for us. There is still a lot to do.”transcript, stated
“There could be other scenarios like Web forms or Windows forms. There could also be unsupported libraries like Windows WIN32DLLSs or VB.NET.”transcript, stated

Partially successful transformations still require disciplined handoff.

Root cause: Automated conversion may leave 10-50% unresolved depending on application complexity.

Resolution: Commit transformed code to a branch, create a PR, and use reports as the guide for product-engineering fixes.

“A partially successful transformation could mean 50%, 70%, or maybe 90%.”transcript, stated
“AWS Transform commits the transform code into a new branch in the GitHub repository and it creates a new pr.”transcript, stated

Evaluation

AWS Transform evaluates applications through unit tests, before/after performance metrics, transformation assessment summaries, Linux readiness reports, and PR-based product-engineering review.

Metrics: unit test execution · performance metrics before and after transformation · transformation assessment summary · Linux-readiness report · remaining transformation delta · lines of code modernized per month

3 supporting quotes
“Your unit tests are executed and one more thing is to also check for the approval.”transcript, stated
“with the performance metrics evaluation before and after, it makes sure that it it does an proper checking before you do the transformation”transcript, stated
“AWS Transformation will give you a Linux readiness report.”transcript, stated

Outcomes

The case spans over 400 .NET applications, more than 500 million lines of code, and more than 1.5 million lines modernized per month.

3 supporting quotes
“Currently we are modernizing over 1.5 million lines of code per month.”transcript, stated
“it gives our developers the time to build the future and not maintain the past.”transcript, stated
“from months of plannings to weeks of execution, right? So overall you increase the speed of your migration.”transcript, stated