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:

  1. Maintainability reasons
  2. Cost reasons
  3. Modernize UI & Improve UX

Key challenges

  1. Lack of Domain Knowledge & Documentation of existing system
  2. Migration of Data from Oracle to Postgres
  3. 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

  1. Figure out Database structure
  2. Annotate key classes that had business logic in them
  3. 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:

  1. Schema across the two Databases was different
  2. There were installation specific quirks that needed to be handled

Our team cameup with two phase solution to this issue:

  1. Getting data from Oracle to MongoDB
  2. 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:

  1. System is able to talk to other products in the suite
  2. 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

  1. Django: Pythonic Web Framework for building Web Applications
  2. Django REST Framework: Building APIs that other applications can use to talk to Registry
  3. Postgres: Database for storing and retrieving information
  4. Apache Solr: Search engine component to allow users search by different parameters
  5. Bootstrap + jQuery: For implementing frontend validations
  6. Celery: Background tasks and periodic tasks
  7. MongoDB: For creating a staging area of data {Served as Bridge between Oracle and Postgres}

Project Management

  1. Our team followed Agile approach for implementing the project
  2. Our tech team participated in weekly standups
  3. 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