Sekretariat DPR has lots of internal applications serving an enormous number of business cases such as budgeting, human resource, document management, etc. While it’s already working perfectly, the framework used to build the app is outdated, no security patched and no support.
As per their grand plan in the next couple of years to build one super app that can communicate between other services, scalable and maintainable, they need to move the application from monolithic platform to micro service.
The Brief
We were briefed to re-architect the current application into an app that is more scalable, easier to maintain, and independent to one another. The new system must also become the base standard for other applications and third party vendors.
Challenges
Monolith and Outdated Framework
More than 100 applications were built using outdated frameworks with no security updates over the years. Monolith design itself has its own drawback such as:
Scalability Monolithic designs can become unwieldy as the code base grows, making it difficult to scale the application horizontally or vertically.
Maintenance As the codebase becomes larger, it becomes more difficult to maintain and update the application.
Dependencies Monolithic designs can become complex due to the presence of many interdependent components, making it difficult to identify and resolve issues.
No Standard Design Pattern
As the team grows, there is no guideline or standardize how they should write a code, this will result in hard to debug as the team needs a complete understanding of the entire codebase.
SOLUTION
We take a step by step approach by breaking the application into micro services. First step is to redesign and rebuild the application to meet the new standards one by one.
We follow clean architecture to separate the application into multiple layers; Data Layer, Domain Layer and Presentation Layer using the SOLID principles approach. On top of that we use GraphQL to handle communication between applications and services.
Revisiting databases is also a crucial part of this project. We removed column duplication, rechecked the database index, and normalized tables if they needed to be normalized. A full migration then is performed application by application.