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
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
Software architecture & technical project management