AereA GmbH
Discuss your project

Project report — industrial automation

Condition monitoring — migration from C++ to .NET Core

A migration during operation is not a rebuild. It is a sequence of steps after each of which the system has to run again.

Industry
Industrial automation, same client as the data platform
System type
Condition monitoring backend
AereA's role
Architecture, migration, implementation
Period
2 years

Starting point

A C++ backend grown over years, increasingly expensive to extend and with data access interwoven with the business logic.

Approach

Stepwise migration to .NET Core with Entity Framework and a redesign of the data access layer rather than a 1:1 port.

Result

around 1 million lines of code moved onto a current stack without pausing the product for the changeover.

Results at a glance

  • around 1 million lines of code migrated without pausing the product
  • 2 years migration, with the system running after every single step
  • Redesign of the data access layer instead of a 1:1 port of the old structure
  • Test coverage built before the migration, not after — a precondition rather than rework
  • Containerised operation via Docker against PostgreSQL
  • Follow-on assignment at the same client after the industrial data platform

Starting point

The condition monitoring backend had grown over years. Functionally it worked, but every extension cost disproportionate time — mainly because data access was tightly interwoven with the business logic.

The task

Migration to a current stack, without pausing the product and without carrying the structural problems along.

Approach

Instead of a 1:1 port to .NET Core, we redesigned the data access layer and built it on Entity Framework. The migration plan follows functional boundaries: after every step the system runs and can be tested. Operation is containerised via Docker against PostgreSQL.

Quality assurance

A migration without reliable test coverage is flying blind. Building or extending automated tests therefore preceded the migration rather than following it.

Conclusion

The assignment followed the industrial data platform at the same client — a pattern that repeats for us: the second assignment comes because the first one held.

Technologies

  • C#
  • ASP.NET Core
  • Entity Framework
  • Docker
  • PostgreSQL

Frequently asked questions

Why not a 1:1 port?

Because it would have carried the problems along. Data access was the reason changes were expensive — porting it unchanged would have modernised the stack and left the cause.

How does the system stay operable during migration?

Through a cut along functional boundaries and a migration plan that leaves a working state after every step. Test coverage is the precondition here, not the goal.

Contact

Your contact

Sören Sprenger
Software architecture & technical project management

Wüstenstein 18, 91346 Wiesenttal · Mon–Fri 9:00–18:00 CET