Rebuilding a system whose documentation was buried in ten-year-old emails.
Revenue Management relied on an aging Classic ASP application to track managed-care financial activity, including patient accounts, insurance information, write-offs, reconciliations, and reporting for Administration.
First, figure out what the thing actually does
The application had been around for years and documentation was scarce. Before I could replace it, I had to understand it.
I worked directly with its primary user to learn how she actually used the system, what information mattered, what could change, and what absolutely could not.
Some of the business rules weren't documented anywhere. At one point, answering questions about how data reached the application meant tracking down emails that were more than ten years old.
Software archaeology is apparently part of the job.
Building the replacement
I designed and developed a modern replacement using a Blazor user interface, a Web API between the application and data layers, Entity Framework, SQL Server, and Microsoft Entra ID authentication.
Before development, I used Balsamiq to work through screens and workflows with the user. The goal wasn’t to build a prettier version of the old application (Although I was totally gonna build something that felt fresh). It was to build something around the way Revenue Management actually worked.
For example, When a user entered a patient account number, the application could retrieve existing patient and insurance information from another hospital system rather than requiring Accounting to enter information the organization already had.
Typing the same data twice is not a feature.
Knowing what NOT to modernize
We intentionally kept the existing database, even though parts of the schema were less than lovely. Some tables didn’t even have primary keys.
A new database would have been cleaner, but the existing one could also have been supporting SSRS reports and other dependencies that weren't fully documented. Replacing it without knowing everything that depended on it would have introduced unnecessary risk.
Sometimes good modernization means knowing what not to replace.
Where it landed
By the end of the six-month engagement, the replacement application was substantially complete. The remaining work depended on an organization-level solution for securely moving data between servers, which was ultimately assigned a lower priority before my contract ended.
Development was managed through user stories, Git, pull requests, code reviews, and weekly sprint meetings with the project manager, technical leads, and system analyst.
I also documented the new system as I built it, so the next developer hopefully won’t have to search decade-old emails to figure out what I was thinking.