Example report
What you receive from a modernisation assessment.
This is a complete example, written for a fictional product and company. The structure, depth and tone are what you'd get for yours. In a real report, every phase also carries a fixed price.
Example Distribution Ltd (fictional). Prepared by Tech Pixels Ltd.
Modernisation assessment: Orders portal
.NET Framework 4.8, ASP.NET WebForms, 212 pages, IIS on Windows Server 2016
1Summary
The Orders portal is a stable, profitable product held back by its platform. It runs on .NET Framework 4.8 and WebForms, depends on a 2014 control suite, and is hosted on Windows Server 2016, which loses extended support in January 2027.
Recommendation: migrate incrementally. Run an ASP.NET Core application alongside the existing one and move the ordering screens first; they change most often and carry the heaviest ViewState. Feature work continues throughout.
120 to 164 days
Total effort across five phases
6 to 8 months
Elapsed, alongside feature work
Phase 0
Recommended first step
2What we looked at
| Solution | 1 WebForms web project, 3 class libraries, 1 WCF service |
|---|---|
| Screens | 212 .aspx pages, 64 user controls, 3 master pages |
| Code-behind | About 96,000 lines of C# |
| Data access | Entity Framework 6 (about two thirds), ADO.NET and stored procedures (the rest) |
| Third-party | Telerik UI for ASP.NET AJAX (2014), Crystal Reports 13, log4net |
| Hosting | IIS 10 on a single Windows Server 2016 VM, SQL Server 2016 |
| Releases | Published by hand from Visual Studio |
| Tests | 41 unit tests, no automated UI or integration tests |
3Risks
| Risk | Why it matters | What to do | Severity |
|---|---|---|---|
| Business logic in code-behind | 38 pages mix rules with System.Web page events, so they can't move until the logic is lifted out. | Extract into tested services in phase 0 and 1, page by page. | High |
| Telerik 2014 grids | The WebForms control suite has no drop-in equivalent on ASP.NET Core; 51 screens use RadGrid. | Rebuild grids with a modern component as each module moves. | High |
| Windows Server 2016 | Extended support ends in January 2027, after which the host gets no security updates. | Move to a supported host in phase 0, before any code changes. | High |
| Crystal Reports 13 | The runtime only works on .NET Framework. | Keep reports on the legacy app until phase 4, then replace. | Medium |
| In-process session state | Old and new apps must share login and session while they run side by side. | Use the System.Web adapters' remote session and shared authentication. | Medium |
| Manual releases and few tests | Every release during a migration is riskier without a pipeline and tests on key flows. | Build a CI/CD pipeline and tests for the ordering flows first. | Medium |
| WCF service for two partners | Partners call it directly, so its contract can't change without notice. | Leave in place; move to CoreWCF later if needed. | Low |
| Entity Framework 6 data layer | EF6 runs on modern .NET, so it can be reused as-is at first. | Reuse now; consider EF Core once the screens have moved. | Low |
4Options compared
Not recommended
Full rewrite
Roughly 9 to 14 months with feature work frozen, and the highest risk of missing behaviour the current system relies on.
Recommended
Incremental migration
Put an ASP.NET Core app in front of the existing one using YARP, share login and session through the System.Web adapters, and move one module at a time. Customers never see a cut-over.
Short-term only
Upgrade in place
Stay on .NET Framework 4.8 on a supported host and keep patching. Cheap now, but WebForms never moves forward and hiring gets harder.
Not advised
Leave as is
The Windows Server 2016 end of support in January 2027 forces a decision within months either way.
5Recommended plan
Each phase ends with something released. You can pause between any two phases without leaving the product half-migrated.
Phase 0: Foundations
2 to 3 weeks
10 to 14 days
CI/CD pipeline, tests on the ordering flows, move to a supported Windows host.
Phase 1: Side by side
3 to 4 weeks
15 to 20 days
ASP.NET Core host with YARP in front, shared login and session, first screen (order search) moved.
Phase 2: Ordering module
6 to 8 weeks
30 to 40 days
46 ordering screens moved, grids rebuilt. The part of the product that changes most often.
Phase 3: Remaining modules
10 to 14 weeks
50 to 70 days
Customers, stock, accounts and admin, one module at a time.
Phase 4: Reports and retire
3 to 4 weeks
15 to 20 days
Replace Crystal Reports, switch off the legacy app and its server.
Effort is shown in days in this example. A real report prices each phase as a fixed sum.
6Next steps
- Agree the recommended approach, or choose another option from section 4.
- Start phase 0: the pipeline, tests and host move make everything after it safer.
- Review progress at the end of each phase before committing to the next.
Want this for your product?