**[Home](../../README.md)**

# Challenge 00 — Modernize a Customer Application

## Introduction

The sample applications used in the .NET and Java tracks are great for learning the tools — but the real value of GitHub Copilot Modernization is realized when you apply it to **your own applications**. In this challenge you shift from a pre-packaged sample to a **customer-owned codebase** and apply the same modernization workflow end-to-end.

## Description

### Step 1 — Select an Application

Choose **one application** from your customer's portfolio to modernize. The application must be a **real customer-owned codebase** — no sample applications or public repositories. It should be:

- **Medium complexity** — multi-layer with an external database and at least one legacy dependency worth replacing (e.g. an old messaging technology, local file storage, end-of-life runtime)
- **Not the most critical or most complex** application in the portfolio — pick something that is representative enough to be meaningful but realistic to modernize in a focused session
- Buildable locally, even if the build has warnings or requires legacy tooling

Before committing to your selection, verify:

- [ ] The repository is accessible to everyone on your team
- [ ] The application builds locally
- [ ] Docker and container tooling are available on your workstation
- [ ] Someone on the team understands what the application does

### Step 2 — Assess and Modernize

Once your application is selected and the readiness checks pass, apply the same workflow you used in the .NET or Java track challenges:

1. Run `modernize assess` on the application folder and review the report
2. Use `modernize plan create` to generate a migration plan targeting a modern runtime and a container platform (AKS or ACA)
3. Use `modernize plan execute` to apply the plan
4. Resolve remaining issues with GitHub Copilot Chat
5. Containerize the application and deploy to Azure

---

## Success Criteria

To complete this challenge, demonstrate:

1. A brief written justification for the selected application — why it was chosen, what makes it a good candidate, and why it is **not** the most complex or most critical app in the portfolio
2. An assessment report generated by `modernize assess` for the selected application, with the top findings summarized
3. The application builds and runs on a modern target runtime (e.g. .NET 10, Java 21)
4. The application is containerized and deployed to Azure
5. **Explain to your coach** — what was the single hardest migration issue in this codebase that the automated tools could not resolve, and how did you solve it?

---

## Learning Resources

- [GitHub Copilot Modernization assessment overview](https://learn.microsoft.com/en-us/azure/developer/github-copilot-app-modernization/modernization-agent/overview)
- [Azure Container Apps overview](https://learn.microsoft.com/azure/container-apps/overview)
- [Azure Kubernetes Service overview](https://learn.microsoft.com/azure/aks/intro-kubernetes)

## Tips

- Avoid picking the application that everyone is afraid to touch — those are high-risk, high-complexity candidates that will burn your time. Pick something that is representative but tractable.
- If the application fails to build locally, resolve that blocker before running the assessment. The tool needs a buildable project to produce meaningful results.
- The same modernization patterns from the .NET and Java tracks apply here — the only difference is the codebase. Lean on what you already know.