Re-Engineering of Healthcare Web Application¶
Introduction¶
A legacy application that was written in Java and Oracle needed to be re-written using open-source technologies. This was done for:
Maintainability reasons
Cost reasons
Modernize UI & Improve UX
Key challenges¶
Lack of Domain Knowledge & Documentation of existing system
Migration of Data from Oracle to Postgres
API Integration with existing sub-systems
Architecture¶
Understanding & Documenting Legacy system¶
Our client were in a unique situation where they didn’t have enough information about the legacy system in consideration. Because of lack of technical documentation making changes to software was next to impossible. Our team was given access to source code to legacy system basis which we were able to
Figure out Database structure
Annotate key classes that had business logic in them
Produced a document that has ideas on how to incorporate changes
To avoid getting into same situation, we helped client by providing not only Operations document, a comprehensive Development document was also provided, marking key areas of code, management commands and existing DB structure.
Building Migration Tool¶
Upon solving issue of understanding existing system, we focused our efforts to getting data migrated from Old Database to New one. This task was further complicated by the fact that:
Schema across the two Databases was different
There were installation specific quirks that needed to be handled
Our team cameup with two phase solution to this issue:
Getting data from Oracle to MongoDB
Getting data from MongoDB to Postgres
The reason of going with MongoDB was to relax the constraints of Schemas. MongoDB is a NoSQL, what this implies is we can have two records not needing to adhere to some schema. This choice allowed us to test and refactor our code till a point where we were able to handle all edge cases
Integrations & Extensions¶
Key aspect of while designing this project was to make sure:
System is able to talk to other products in the suite
System is open for other products to talk to
Specifically the registry needed to talk with Forecaster, which basically was a rule engine that predicted depending on different parameters when an Infant and Mother were due for a vaccination shot. Our final implementation of the system did achieve this goal.
Software Components Used¶
Django: Pythonic Web Framework for building Web Applications
Django REST Framework: Building APIs that other applications can use to talk to Registry
Postgres: Database for storing and retrieving information
Apache Solr: Search engine component to allow users search by different parameters
Bootstrap + jQuery: For implementing frontend validations
Celery: Background tasks and periodic tasks
MongoDB: For creating a staging area of data {Served as Bridge between Oracle and Postgres}
Project Management¶
Our team followed Agile approach for implementing the project
Our tech team participated in weekly standups
Daily summary reports along with push to staging instances were done
The above allowed us to iterate through the project real quickly, delivering value to our project stake holder.
Our team also participated inital installations and hand-holding for client side installations