Modernize Studio
07/10/2026
Modernisation assessment

Nwind

Microsoft Access database application

Prepared for
Nwind
Prepared by
Modernize Studio
Reference
MS-20261007-3FE3

Confidential — prepared from the files you shared. Free of charge and without obligation.

1

Summary

Nwind is a Microsoft Access database application used for sales, orders and invoicing; customer management. I analysed 1 file: 21 screens, 9 data tables and 0 lines of code. It can be turned into a modern web application without losing data or business rules. Overall risk is low. I recommend starting with a £1,100 pilot on the “Customers” module, then the full migration at a fixed price (£10,000).

21screens
9data tables
0formulas
13reports
Lowoverall risk

Recommended start: Pilot — £1,100

Then: full migration £10,000, maintenance £250 per month.

2

What the program does

Judging from its data and screens, Nwind manages sales, orders and invoicing; customer management. The central data are Customers, Orders, Products, Employees and Sales. People work with screens such as “Customer labels dialog”, “Customer orders”, “Customer orders subform 1” and “Customer orders subform 2” and print reports such as “Alphabetical list of products”, “Customer labels” and “Employee sales by country”. This description is inferred automatically and will be confirmed with you.

Current technology

PlatformMicrosoft Access database application
Languages—
DatabaseMicrosoft Access 97 (Jet 3)
Files analysed1 (2.9 MB)
Records4,032

Business areas detected

sales, orders and invoicingcustomer management
3

Modules and screens

The program has 21 screens. Each one is linked to the data it works on; in the new version they become consistent web pages with search, filters and input checks.

Customers 11 fields, 91 records

  • Customer labels dialog
  • Customer orders
  • Customer orders subform 1
  • Customer orders subform 2
  • and 2 more

Orders 14 fields, 830 records

  • Orders
  • Orders subform

Products 10 fields, 77 records

  • Product list
  • Products

Employees 17 fields, 9 records

  • Employees
  • Employees (page break)

Sales 14 fields, 830 records

Order details 5 fields, 2,155 records

Suppliers 12 fields, 29 records

  • Suppliers

Categories 4 fields, 8 records

  • Categories

Shippers 3 fields, 3 records

Reports

Alphabetical list of productsCustomer labelsEmployee sales by countryInvoiceProducts by categorySales by categorySales by category subreportSales by yearSales by year subreportSales totals by amountSummary of sales by quarterSummary of sales by year
4

Data model

I found 9 tables and 9 links between them. The diagram shows the main tables.

CustomersPKCustomer IDtextCompany NametextContact NametextContact TitletextAddresstextCitytext+5OrdersPKOrder IDidFKCustomerlinkFKEmployeelinkFKShip VialinkShip NametextOrder Datedate+8ProductsPKProduct IDidFKSupplierlinkFKCategorylinkProduct NametextQuantity Per UnittextUnit Price£+4EmployeesPKEmployee IDidFirst NametextLast NametextTitletextTitle Of CourtesylistDate of birthdate+11SalesPKOrder IDidFKCustomerlinkFKEmployeelinkShip NametextOrder DatedateRequired Datedate+8Order detailsPKOrderlinkPKProductlinkUnit Price£QuantityintDiscount%SuppliersPKSupplier IDidCompany NametextContact NametextContact TitletextAddresstextCitytext+6CategoriesPKCategory IDidCategory NametextDescriptiontext+1ShippersPKShipper IDidCompany NametextPhonephone

Main tables and their links. Arrows point from a record to the record it refers to.

TablesColumnsRowsSource
Categories48database
Customers1191database
Employees179database
Order Details52,155database
Orders14830database
Products1077database
Shippers33database
Suppliers1229database
Umsätze14830database
5

Business rules found

Business rules found automatically (checks, calculations, filters): 30. Every one of them will be carried over and tested.

Check
Employees.BirthDate: <Date() → "Birth date can't be in the future."
nwind.mdb
Check
Order Details.UnitPrice: >=0 → "You must enter a positive number."
nwind.mdb
Check
Order Details.Quantity: >0 → "Quantity must be greater than 0"
nwind.mdb
Check
Order Details.Discount: Between 0 And 1 → "You must enter a value with a percent sign."
nwind.mdb
Check
Products.UnitPrice: >=0 → "You must enter a positive number."
nwind.mdb
Check
Products.UnitsInStock: >=0 → "You must enter a positive number."
nwind.mdb
Calculation
Category Sales for 1995: CategorySales = Sum([Product Sales for 1995].ProductSales)
nwind.mdb
Calculation
Invoices: ExtendedPrice = CCur([Order Details].[UnitPrice]*[Quantity]*(1-[Discount])/100)*100
nwind.mdb
Calculation
Order Details Extended: ExtendedPrice = CCur([Order Details].[UnitPrice]*[Quantity]*(1-[Discount])/100)*100
nwind.mdb
Calculation
Order Subtotals: Subtotal = Sum(CCur([UnitPrice]*[Quantity]*(1-[Discount])/100)*100)
nwind.mdb
Calculation
Product Sales for 1995: ProductSales = Sum(CCur([Order Details].[UnitPrice]*[Quantity]*(1-[Discount])/100)*100)
nwind.mdb
Calculation
Quarterly Orders by Product: ProductAmount = TRANSFORM Sum(CCur([Order Details].[UnitPrice]*[Quantity]*(1-[Discount])/100)*100)
nwind.mdb
Filter
Alphabetical List of Products: WHERE (((Products.Discontinued)=No))
nwind.mdb
Filter
Catalog: WHERE (((Products.Discontinued)=No))
nwind.mdb
Filter
Current Product List: WHERE ((([Product List].Discontinued)=No))
nwind.mdb
Filter
Employee Sales by Country: WHERE (((Orders.ShippedDate) Between [Beginning Date] And [Ending Date]))
nwind.mdb

14 more rules were found and will be reviewed in the discovery phase.

Extracted automatically from code, queries and formulas. Every rule will be confirmed with you and covered by an automated test.

6

Risks

Overall risk: low. None of these points blocks the migration; each has a known answer, shown below.

No significant risk factor was detected automatically.

7

Recommended architecture

Web application

ASP.NET Core on .NET 10 (long-term support) with Blazor: one language, C#, from the database to the screen.

Database

PostgreSQL, or Microsoft SQL Server if you already own a licence. Keys, constraints and an audit trail on every change.

Sign-in and permissions

Personal accounts with two-step verification, or your Microsoft 365 accounts. Each role sees only its screens.

Reports and exports

On-screen reports with filters, PDF and Excel export generated on the server.

Hosting

European cloud with daily backups and HTTPS, or your own server. Works in any browser, on PC, Mac and tablet.

Quality

Automated tests run on every change: data, calculations and the main screens.

TodayAfter migration
Forms and dialog windowsWeb pages with validation, search and filters
Tables, sheets and local database filesOne central PostgreSQL database with keys and history
Saved queries and SQL inside the codeTyped queries (Entity Framework Core) and database views
Printed reportsOn-screen reports with PDF and Excel export
Single PC or shared network fileBrowser access for many users at once, from anywhere
8

Migration plan

1Discovery and data audit

I confirm scope, rules and reports with you and take a copy of the data.

1 week

2Pilot module

One module running in the browser on your real (copied) data.

2 weeks

3Data model and migration scripts

New database, repeatable migration with automatic reconciliation.

1 week

4Screens and business logic

All screens and rules rebuilt, reviewed with you every week.

2 weeks

5Reports, exports and integrations

Reports, PDF/Excel exports, e-mail and other connections.

1 week

6Acceptance tests

Old and new run side by side on the same data; results compared automatically.

1 week

7Go-live and training

Final data migration, user training, handover documentation.

1 week

≈ 9 weeks

9

How I prove nothing is lost

Data reconciliation

After every migration run, row counts, totals and checksums of of each table are compared automatically between old and new.

Calculation tests

Each business rule I found (30 so far) becomes an automated test fed with real examples from your current program.

Report comparison

The same report with the same filters must give the same totals in both systems.

Screen tests

Robots click through the main workflows in a real browser on every change.

Parallel run

For 30 days after go-live the old program stays in use alongside the new one; figures are compared and any difference is explained and fixed.

10

Fixed-price packages

Recommended start

Pilot — Customers

£1,100
fixed price
  • List, search, detail and edit screens for one module
  • Its data migrated from a copy of your file
  • Running online for your team to try
  • Credited against the full migration

Full migration

£10,000
fixed price, 6–9 weeks
  • All screens, data and business rules
  • Reports with PDF and Excel export
  • Users, roles and permissions
  • Parallel run, training and documentation
  • 3 months of warranty on defects

Maintenance

£250
per month
  • Hosting supervision and daily backups
  • Security and framework updates
  • Bug fixes with next-business-day response
  • Up to 2 h of small changes each month

Typical agency quote for the same scope: £16,600–£24,900.

Option: database migration only (data moved to PostgreSQL, no new screens): £3,000.

Payment terms: pilot, 50% at the start and 50% on approval; full migration, 30% at signature, 40% at acceptance of the test environment, 30% at go-live. Prices exclude VAT, where applicable. Offer valid for 30 days from the date of this report.

How this price was calculated
  • Complexity score: 326 points (size tier M) — 9 tables, 21 screens, 13 reports, 0 lines of code, 0 risk factors.
  • Main cost drivers: Screens 168 (52%), Data model 92 (28%), Reports and macros 66 (20%).
  • Full migration: fixed price £10,000, about 40–60% of a typical agency quote for the same scope (£16,600–£24,900), thanks to an automated, tool-assisted migration process. Estimated delivery: 6–9 weeks.
  • Pilot: the “Customers” module rebuilt end-to-end (list, detail, edit, 1 report) for £1,100; 100% credited if the full migration is signed within 60 days.
  • Maintenance: £250/month — monitoring, security updates, backups and up to 2 h of small changes per month.
A

Appendix: inventory details

MeasureValue
Files analysed1
Screens21
Data tables9
Columns90
Relations9
Saved queries22
Reports13

Limits of this automated analysis

The points below did not prevent the analysis but are checked by hand before the final quote.