Overview
A major non-admitted insurance carrier maintains and runs a comprehensive Insurance Information Management System (IIMS). IIMS is a business-critical desktop application supporting Non-Admitted Insurance operations -- Policies, Claims, Agents, and Accounts -- for several hundred users across eight departments. The IIMS application has been in active use and ongoing maintenance since the late-1990s.
The scope of the IIMS upgrade project included 14 interrelated VBPs having 440K lines of code (LOC) and building to 11 DLLs and 3 EXEs. Most of the code was in a single desktop executable (280K LOC; 1 MDIForm, 162 Forms, 48 Modules, 47 Classes, and 3 UserControls) and a collection of object-relational data access DLLs (130K LOC; 628 classes). The VBPs also reference about 45 external components including 8 in-house .NET interop assemblies and 37 third-party COM API/Control libraries.
GM assisted with the following four phases of the project:
- An Assessment, Definition, and Planning engagement
- A Standard Upgrade Phase resulting in an integrated build-complete code of the entire system using a direct translation generated from the VB6 code and a stub framework generated for the external COM platform dependencies
- Two Proof-Of-Concept experiments demonstration how the Standard Upgrade process could be improved to an upgrade replacing parts of the stub framework with .NET assemblies resulting in a runnable application with limited functionality
- A Custom Upgrade Phase implementing over 60 custom upgrade features and providing a clean, runnable .NET system ready for functional testing and transition to production
All four phases were completed in one year with a staffing level of one full-time GM resource, one full-time external .NET technical consultant, and one part-time client developer as well as significant involvement by client IT managers. In a parallel effort, our consulting partner, worked closely with the client to develop an automated UI testing process and prepare for the transition to production.
Custom Upgrade Features
The collection of features integrated and delivered by the Custom Upgrade Solution and summarized below:
COM API/Control Upgrades
- ADODB: upgrade to System.Data and SqlClient [+]
- fpSpread: upgrade to WinForms.DataGridView [+]
- In-House .NET Interop: upgrade to direct Assembly References
- MSComCtl2.DTPicker: upgrade to WinForms.DateTimePicker
- ListView: upgrade to WinForms.ListView
- StatusBar: upgrade to WinForms.StatusBar [+]
- ToolBar: upgrade to WinForms. ToolBar
- TreeView: upgrade to WinForms.TreeView
- MSComDlg: upgrade to WinForms CommonDialog classes
- MSMAPI: upgrade to Microsoft.Office.Interop.Outlook
- MSMask: upgrade to WinForms.MaskedTextBox [+]
- MSXML: upgrade to System.Xml
- Outlook: upgrade to Microsoft.Office.Interop.Outlook
- RichTextBox: upgrade to WinForms.RichTextBox
- Scripting: upgrade to System.IO; Dictionary upgrade to strongly-typed Generic Dictionary<K,T>
- SysInfo: upgrade to .NET Framework calls
- TabControl: upgrade to Winforms.TabControl [+]
- Microsoft Word: removed
[+] .NET classes and controls extended for better application compatibility and cleaner application code
Language Upgrades
- Class_Terminate: simplifify
- VB6 Collections and Scripting.Dictionary: upgrade to strongly typed List<T>, Dictionary<K,T>, OrderedDictionary<K,T>
- Conditional Compilation: simplify
- Custom Data Binding: rework
- Error handling: upgrade to Try/Catch with new logging component
- Null/IsNull: upgrade to null or DBNull
- Variant/Object Type Inference: Optimize
Structural Matters
- Remove unused content: 75 whole files removed, and 3,700 functions removed
- Integrate hand-coded content: 13 whole files replaced, and 55 functions reauthored
- Generate a VS2017 Solution integrating the full application stack: 14 generated projects and more than 60 pre-existing in-house .NET projects
Win32
- Replace Win32 wrapper functions with functionally equivalent Hand-coded functions using .NET APIs
Value Added Features
- Integrate gmStudio batch upgrade processing with a TFS DevOps Continuous Integration Pipeline
- Rework or remove various cases of technical debt
- Accept four updates of the VB6/COM code corresponding to maintenance releases
- Source Metrics Database in SQL server used for ongoing optimization of the work plan
Conclusion
At the end of the Custom Upgrade Phase, which was completed in six months, the gmStudio Upgrade Solution could be used to automatically rewrite the entire IIMS codebase to C# applying all of the custom upgrade features listed above. The entire process runs, from start to finish, upgrading all 14 VBPs and 440K LOC in under 2 minutes on a typical Windows 10 development machine.