<

The Situation

>

A Norwegian vehicle leasing company manages hundreds of fleet contracts, customer relationships, invoicing runs, and vehicle lifecycles every month. Their entire platform had been running on the same core since 1998 — a Microsoft Access database with VBA forms that nobody fully understood anymore, duct-taped to a homemade C# monolith with NHibernate, WinForms, and MSSQL, running on bare-metal servers on-prem.

The system worked, in the way that a structure held together by years of patches and institutional memory works. Every change was high-risk. Errors were constant. The hosting infrastructure was being kept alive on willpower. The original developers had long since moved on, and the business logic embedded in that Access database existed nowhere else — not in documentation, not in anyone's head with certainty.

Key challenges:

Loading

500k–1M lines across Access VBA, C# monolith, WinForms, and MSSQL

Loading

No automated tests, no documentation, no safety net for changes

Loading

Business-critical logic buried in VBA macros nobody fully understood

Loading

Bare-metal on-prem infrastructure at end of life

Loading

A full operational leasing workflow - quoting, contracts, invoicing, vehicles - that could not stop

The pressure was clear: keep it running, or replace it. The risk of replacing it, without understanding it first, was the problem.

<

The Solution

>

Before writing a single line of new code, Kodebaze analyzed the entire legacy estate. The Access VBA forms, the C# monolith, the NHibernate data layer, the WinForms UI, the MSSQL stored procedures - all of it was scanned, classified, and mapped.

What emerged was a complete picture of the domain: where the business logic actually lived, what the data structures represented, which modules were tightly coupled and which could be extracted independently, and where the hidden dependencies between the VBA layer and the C# backend were creating the most risk.

That understanding became the foundation for the new architecture — not a guess about what the new system should do, but a verified map of what the old system actually did. The new platform was designed around that map:

<

Legacy Fleet Platform

A ReactJS + .NET backend on Azure, replacing the WinForms monolith

<

Vehicle catalogue

A dedicated backend API platform handling vehicle catalogue, pricing, and residual value data, replacing the Access/MSSQL pricing logic

<

Microservice architectur

Domain-separated services for Customers, Contracts, Vehicles, Invoicing, and Notifications

<

Azure infrastructure

Replacing bare-metal on-prem with managed cloud hosting, CI/CD pipelines, and Azure Functions for scheduled jobs

<

Firebase Authentication

Replacing the homemade auth layer with a governed, secure identity platform

<

The Transformation

>

The key shift was what the analysis made possible. Without a clear map of the legacy domain, the new system would have been built on assumptions - and assumptions about a 28-year-old codebase are expensive to be wrong about. With the map, the team could design the new architecture around what the business actually needed, not what someone thought it needed.

The transformation delivered:

Customers module

Full lifecycle management, replacing the Access customer records

Deals & Contracts

The full quoting and contract workflow, replacing VBA-driven approval chains

Calculation engin

Complex Norwegian leasing calculations (VAT, EV exemptions, annuity formula, residual value) rebuilt in a testable, auditable service layer

Vehicles

Centralized fleet inventory with telemetry integration and depreciation runs

Invoicing

Monthly fleet invoice runs via EHF, email, and print, replacing the manual process

Integrations

JATO for vehicle data, Salesforce for CRM, Gjensidige for insurance, OneFlow for contract signing - all replacing bespoke Access integrations

What had been held together by one engineer's institutional knowledge became a documented, tested, governed platform owned by the whole team.

<

The Result

>

A Norwegian vehicle leasing company went from a 1998 Access database on bare-metal to a modern microservice platform on Azure in nine months — without stopping their business for a single day.

Loading

Complete elimination of the VBA/Access dependency that had constrained the business for over two decades

Loading

Bare-metal on-prem infrastructure replaced with managed Azure hosting with CI/CD and automated monitoring

Loading

Every business rule that existed in Access macros and NHibernate queries is now documented, tested, and owned by the engineering team

Loading

New features that previously required weeks of careful patching now ship in days

<

Why This Matters

>

The riskiest moment in any legacy replacement is the gap between what you think the old system does and what it actually does. That gap is where modernization projects fail - not in the new code, but in the assumptions behind it.

The client's Access database had been accumulating business logic since 1998. Norwegian leasing tax rules. EV exemption thresholds. Residual value calculations. Customer-specific pricing logic. None of it was written down. All of it was in the code.

Kodebaze closed that gap before the first line of new code was written. The analysis turned 28 years of accumulated VBA and C# into a documented, navigable domain model. The migration was built on facts, not assumptions. The cutover was incremental, not a leap of faith.

For this client, that meant a modern platform they own and understand — and a business that can move as fast as its ambitions.

Ready to understand your legacy system?

We help teams uncover hidden architecture, document complex systems, and build a practical path to modernization.

Loading
Loading

Claus Villumsen

Chief "What If AI Could Do This?" Officer

Loading

AI + Human software Solution

Follow us
Loading

© 2026 Kodebaze. All Rights Reserved.