My company is developing software that has a lot of technical debt that has existed for more than 20 years. It's a mix of C++ and C and consists of about 2M LOC. I would like to make some suggestions how we can advance our project and get rid of technical debt while using modern design principles.
This application is heavily modularized and consists of more than 250 modules that can be viewed by the user. Those modules are designed with our own framework, an xml-file with all the layout, some business logic that is interpreted by the application and a c++ class with other logic.
For example to create a mask with single grid that displays some data, we need to create the generic class-files that register our new module to the application, open our application in designer-Mode, place a grid in our module and attach a sql-statement that fetches the data for it. If we would like to add some logic that is not possible with our designer, we need to add some callbacks to our class and add those to our grid in the designer. Now the xml-file is filled with all the information our application needs to generate that module (i.e. where exactly the grid is, the ID, the attached callbacks and the sql to fill it).
As you can see there is absolute no cut between design, business logic and the dependencies.
There are of course two main advantages:
- many things can be done without recompiling the application
- small errors can be fixed by non-developers (like wrong SQL statements, name of labels, placement of the elements
But I hope you agree with me, that this system could benefit a lot, but I'm not experienced to propose my own solutions. What steps can I take to solve that problem in a realistic way thats acceptable for both us developers and management?