On-time software modernization is a must for any business, especially a digital one.
However, AA, just as most companies, had certain reasons to start the migration ASP.NET MVC, namely:
How we Moved a Complex Cloud-Based Eligibility Verification Platform
an issue of legacy code limitations and low performance?
As soon as Approved Admissions experienced the danger of becoming outdated, they started to plan the migration from ASP.NET MVC to .NET Core and referred to our team for assistance. Luckily, we’ve had successful case studies for ASP.NET projects in our array of services.
Approved Admissions is a cloud-based eligibility verification platform that monitors and reports changes in Medicare, Medicaid, and HMO payers. Healthcare organizations benefit from its automatic re-verifying system that notifies them of any changes in payer coverage minimizing billing errors.
Due to the company growth, the code, written five years ago, started to show its limitations.
So stakeholders wanted to improve the platform performance and reduce the per-transaction cost. Their secondary goals were to improve the horizontal scalability and internal security of the legacy software.
CLIENT
Query
Reports & Notifications
APPROVED ADMISSIONS
Query
Encrypted data
01
02
03
The client deals with healthcare insurance payments and HIPAA compliance, so security, great performance, and accuracy were the main priorities of this project.
On-time software modernization is a must for any business, especially a digital one.
However, AA, just as most companies, had certain reasons to start the migration ASP.NET MVC, namely:
Microsoft provides extensive support for .NET Core, and there are many open source solutions that speed up the development process.
Over time, it was becoming more and more difficult for AA to find talents to work with Microsoft ASP .NET MVC platform.
The speed of the app built with .NET Core is far better that is crucial for end-users.
Perfomance & Scalability | Average perfomance | High perfomance. Runs with a much lower number of servers/Virtual Machines (VM). The reduced servers/VMs save costs in infrastructure and hosting |
---|---|---|
Maturity | Released in 2002 | Released in 2016 |
Cross-Platform | Runs on Windows Only | Runs on Windows, Linux and macOS |
Owner | Microsoft | .NET Foundation (fully open source and collaborative.) |
Update of any system in use is
always challenging, as its clients
shouldn’t feel the shift.
The disparity in technologies
In .NET Core 3.1, the Membership Provider was replaced with ASP.NET Core Identity that uses Entity Framework as an object-relational mapping solution. AA system used NHibernate which was incompatible with .NET Core 3.1, so we had to find a way to continue using it or find an alternative to ASP.NET, and migrate users with their current roles and passwords to the new platform.
Missing suitable substitutes for existing tools
In ASP.NET MVC the system used MvcSiteMapProvider that was quite outdated. Therefore, we should find a suitable substitute, which would be compatible with MvcSiteMapProvider configuration files.
Let’s see how we have overcome ASP.NET Framework MVC vs. .NET Core issues.
First of all our team performed an analysis stage where they divided NuGet-packages used in the system into two groups - supported in .NET core and non-supported.
In AA’s case, most of the application code was custom; that drastically simplified the migration process.
Supported packages
We should ensure that they are fully compatible with .NET Core and explore all the development documentation to check if the products will work together properly.
Non-supported packages
They should be replaced with analogical or custom solutions to accelerate the development process and meet clients’ needs.
As you already know Entity Framework with its standard classes wasn't suitable for the AA system. We decided to redefine needed classes for work with UserStore for another ORM and chose Dapper, as it's simple and agile.
Due to this decision, we managed to avoid standard EF classes and previously-used NHibernate. As a result of a good choice, the system started working properly after creating a few classes written for Identity.
The next issue was migrating users with their current passwords to the new authentication system. Since .NET Core Identity uses another system of password encryption, we couldn’t just start using it all the passwords would have been incorrect.
The easiest way to move system users was to reset passwords, but we didn’t want to disturb them. Thus, we used the following algorithm. When users insert their passwords for the first time, we check it with the old hash, and if it's ok, the system hashes it with a new hash and adds it to the new Identity database. So, after a while, all the users were added to a new Identity database and didn't even notice it.
Any complex system should be simple for users. AA used MvcSiteMapProvider plugin for app navigation (menus, site maps, breadcrumbs, and more) but it wasn’t applicable to .NET Core 3.1. Rewriting this legacy application was bad business, as it has elaborate superstructure and an awful lot of dependencies.
At the same time, there were no suitable solutions on the market which could meet our client’s needs, so we decided to make a custom one. It helped us to avoid MvcSiteMapProvider plugin cons like deep integration into the code base and lack of customization.
Dealing with software modernization services, we are always ready to work with existing tools to adjust them and improve. Sometimes it brings difficulties. Just as in this case.
Being a provider of detailed and relevant information to their users, Approved Admissions used DevExpress 14 components library for reports creation in ASP.NET MVC. This version isn’t applicable for .NET Core, as it requires version 19.
This considerable variation required lots of manual work to upgrade from 14 to 19 such as adjustments in tool settings and report files. As a result, AA clients receive detailed and well-structured reports powered by a modern version of DevExpress components library.
Keeping code clean is vital in the long run, as teams are changing and it’s much easier for developers to dig into consistent code than trying to figure out tangled dependencies and queries.
As for this case, there were tons of various jQuery plugins that have been multiplying throughout the platform growth. Our developers are very pedantic, so they decided to streamline all those plugins and delete spare ones.
The team checked every single plugin, one by one, as their usage isn’t visible in most cases. For example, pop-up plugins become activated only after a particular action. It was worth a shot, as, in the end, we managed to delete more than 800 files which clients would load in browser wasting traffic and time.
We also created a list of all JavaScript plugins and their versions. It's always better to know what is used in the project to avoid compatibility issues.
Plugins cleaning wasn't enough for us to be sure the platform is ready for horizontal scaling and the ability to add processing nodes ad-hoc on an as-needed basis. Our team decided also to update storage structure, as it differs for ASP.NET MVC vs. .NET Core.
At the first stage, we just shifted all the components to the new platform and made slight path improvements. When all the global tasks were completed, we started the reorganization and separated Bootstrap and Metronic frameworks from custom CSS styles and JS scripts, and jQuery plugins, and so on.
It’s like setting things in order on your shelves. Nobody sees it, but you can find anything easily in the right place.
ModLogix Suggests
There are situations when it’s more efficient to re-write some of the app modules from scratch. This is a bright example when there is no fitting tool for change, and rewriting it for a new system would take too much time and, consequently, money. Save resources!
As a result of jQuery plugins cleaning, we managed to clear 10 megabytes of data (800 spare files) which could have been loaded in a client’s browser. It would mean more traffic and longer loading.
The client has got the newest framework (.NET Core – 3.1) marked LTS - long-term support, that means it will be supported for a long time, it will be easy to broaden the platform and to modernize it next time.
The client was able to reduce per-transaction cost by more than 300% and exponentially increase performance. It is also more secure and stable than before. AA management expects a positive ROI as a direct result of this project within the next six months.
Results
Before doing any migration activities determine which parts of the app or code can be reused, and which should be rewritten. Those parts are critical and should be performed primarily.
Continuous testing during and after the development and data migration is super important in such projects. Even a little button can start working in the wrong way and crack the whole app if we are talking about upgrade.
Re-organize and clean the code if needed. It will be much easier to develop the system and implement new features in the future.
We are delighted to be working with customers in a variety of industries and verticals.
“They know what they do. Being subject matter experts in Healthcare, we didn't have to worry if they did the right thing and spend hours explaining what we needed. We liked the level of communications, transparency, and a desire to go above and beyond the contract to get the job done. The whole migration process was seamless from our point of view – the Modlogix team kept us up to date during all phases of the project, and everything was completed slightly faster than original estimates. They've even gone above and beyond the agreed-upon scope of the project, and upgraded to .NET Core our communication modules at no additional charge.”
Though I have been working with similar projects, some tasks here were challenging for me and my teammates. But only challenges can enable growth, so we are thankful to our client for this great opportunity to sharpen skills. Approved Admissions one of those easy-to-work clients, and we will be happy to continue cooperation.
Actions speak louder than words! Take a look at our legacy app modernization
services in essence.
Porting a Large Enterprise System to .NET Core 3.2 to Expand Its Capabilities
Read MoreHow we migrate the platform from Webforms to Azure
Learn how to integrate a desktop system into the modern web-based platform fully.
Read MoreSeamless Integration of Cloud-Based Eligibility Verification Platform with EMR
You have successfully subscribed to our newsletter. News is coming soon!