Mashreq bank. Digital Transformation.
Reinventing User Channels
Challenges
Other competing banks in the UAE had already started similar initiatives to upgrade or entirely redevelop their channel applications which put pressure to deliver working solutions fast. The MVP phases of the apps were about to roll out almost simultaneously, and they were expected to be completed within approximately one year. Delivering a solution of that size for such a limited period was a big challenge. Mashreq could not achieve this internally on its own.
They required assistance from several departments and vendors to complete the digital transformation initiative in the desired period. Overall the team consisted of 40 members from different vendors, McKinsey Digital, and in-house Mashreq developers distributed in squads. Great cohesion, understanding, and cooperation among all units were required. Communication and alignment between teams were a primary concern, considering the required delivery speed and different deadlines set for the other applications.
Also, a key component in the old architecture - the Middleware (ESB) - was exposing all functionalities available within the bank operations. This imposed a challenge for the performance of all applications, as all applications would utilize the ESB instance, which in turn would lead to bottleneck & latency issues. To deliver the architecture promptly, we needed to quickly analyze how the bank’s existing components work and identify the best architecture concept whilst having security in mind.
Solution
We were responsible for developing the backend infrastructure, which would be used by all channels, and for creating the first MVP (tablet branch application), which the bank's customers would use in the physical branches.
The issues with the old architecture were mainly handled through the use of the CQRS pattern & proper caching on the backend Layer. The new backend architecture was built using Java Microservices based on the Spring and Spring Cloud Frameworks. Each microservice is a stand-alone application that encompasses a bounded context (domain) following Domain-Driven Design (DDD) principles. The aim was to create one backend for all frontend channels and to detach as much as possible from the legacy infrastructure. Therefore, we introduced two main layers before the communication with the ESB.