I joined a company as a solutions architect less than a year ago, with a main task of consolidating, and modernizing legacy code resulting from 90+ company acquisitions over the past 20+ years.
One of those legacy applications, is a desktop application written in VB 6.0 that accesses a SQL Server database and has business logic embedded in the client side. That was the good news!
The bad news is that the production release of this client residing at end users machines, is two releases after the latest code checked in our source control system (that is 5 years gap).
What I did so far
I installed Enterprise VB 6.0 IDE, and attempted to load latest source code and tried to charter the application into main modules, relying on menu items defined in the main form.
I used some sort of a mind map like diagram to list down those menu items, and identified the main function of each of those items, in terms of data access and processing.
Fortunately, 8 menu items out of the 162 items are useless decorations, but the rest points at real business logic and data access.
What I was planning to do next
- Identify database tables accessed by each menu item
- Identify relations among those tables in terms of triggers, referential keys and possible stored procedures
- Build a skeleton .NET web application
- Attempt to infer some workflow diagram for one of the main modules of this application
- Extract that logic of the identified module into and implement it into the .NET application with hooks to the original database
- Convince users to use the new screens provided.
- Iterate on the previous steps until all functions covered by he legacy application are migrated into the modern web application.
- After all screens and business logic is migrated, I should start refactoring database objects.
IS the above plan realistic? is it sub-optimal? Any advise on more practical way to deal with this beast?
Thanks and sorry for the long question