top of page

Modernizing Legacy Applications in Financial Services

  • Sam Martindale
  • Apr 3
  • 3 min read

Overview


A financial institution was operating a legacy AngularJS application used internally by employees and externally by partners to access a variety of core banking APIs. This application supported several mission-critical domains—including ACH, Wires, Real-Time Payments (RTP), Deposits, and General Ledger Accounts—as well as administrative tools for managing users, permissions, and third-party partner access. As the system matured, the client experienced growing pains with maintainability, inconsistent development patterns, and notable performance degradation. The client wanted to modernize the platform using Angular 2 to resolve these issues. However, a complete rewrite and release at once was not an option due to ongoing development needs and operational dependencies. The primary objective was to incrementally upgrade the platform while continuing to support ongoing releases, minimize risk, and enhance performance, code quality, and user experience.

 

Challenges


The project team faced several significant technical and operational challenges


Inconsistent Codebase


The legacy AngularJS app had fragmented and inconsistent implementations across domains, incomplete use of design patterns, and a large amount of dead code.


Performance Degradation


Over time, the system exhibited sluggishness due to inefficient API usage and poorly performing frontend code.


Parallel Development Streams


The team needed to modernize the application while continuing to release new features, requiring dual-track development across AngularJS and Angular 12.


Safe Deployment of Incomplete Work


Releases needed to occur regularly even if new features or migrations were not fully complete.


Cross-Domain Consistency


While the visual UI remained similar across domains, the code implementation varied significantly, increasing onboarding time for developers and introducing higher risk for regressions.

 

Solution

 

To address these challenges, the team executed a phased upgrade strategy centered on reusability, performance optimization, and deployment flexibility.


Component Standardization


Recognizing that each banking domain shared a common UI structure, the team created reusable Angular 12 components for common patterns such as grids, forms, and search functionality. These components were designed to be configurable, allowing each domain to adjust behavior through simple settings while maintaining consistency across the application. This dramatically reduced development friction and enabled developers to work fluidly across domains.


Performance Improvements


The team analyzed API traffic between the client and backend services to identify redundant or inefficient calls. This analysis helped optimize network traffic, reduce unnecessary data requests, and isolate problematic AngularJS code. By prioritizing fixes with the greatest performance impact, the team improved load times and responsiveness without waiting for the full migration to complete.


Incremental Deployment with Feature Flags


Feature flags were used to control access to upgraded Angular 2 code in production environments. Internally, developers and stakeholders could preview upgraded domains before external users saw any changes. This strategy enabled the team to deploy incomplete features to production safely, turning them on when ready. Additionally, Angular 2 modules were hosted on a separate site, and routing logic within the AngularJS app redirected traffic accordingly.


Outcome

 

The incremental Angular 12 migration was a resounding success. By using modular, configurable components and releasing functionality domain-by-domain, the client was able to:- Improve performance across the application- Deliver a consistent, modern UI across all banking domains- Minimize disruption to ongoing feature development- Deploy and test incomplete features in production safely using feature flags- Reduce onboarding friction for developers by standardizing UI logic and components. This approach not only modernized the technology stack but also aligned development practices with future scalability and maintainability goals.

 

bottom of page