Overview
The GoldTier/KYCaaS application is a large legacy application written in Java. It is used by banks and other large financial institutions to understand the risks of working with a given client, and of maintaining regulatory compliance with anti-money laundering laws. Users can work in a traditional Java Applet interface, or in a more modern Web interface. A servlet running in a container handles the immediate workloads, and a separate instance of the application handles deferred tasks. The application makes heavy use of a backing database, one of Oracle, Sybase, or SQL Server. Clients frequently request new features and integrations with third-party APIs. There are also ongoing efforts to fix bugs and modernize the platform.
Contributions
I worked with a team to continue to develop the application, often working with and coordinating the efforts of other relevant teams and individuals. I fixed bugs and implemented features for database management, multithreading, I/O, and integration with other services. I wrote our current implementation of file encryption from scratch to meet GDPR compliance for personal information. It securely encrypts files on disk while transparently decrypting them when they are read. The implementation continues to support reading from files that are unencrypted and encrypted with a legacy algorithm in an equally transparent and modular manner.
I spearheaded the effort to write unit tests around legacy components. I set up the relevant tooling and standards, and presented a educational session on how to write good tests. With tests now in place, we are able to guard against regressions and bugs in an automated way.
After being frustrated with the laborious manual process of releasing, I wrote automation software to handle most of the tedious manual steps in a more consistent way. I then adapted it to be used as part of our Jenkins setup to automatically build and deploy the application to our local development and test servers. With the automation software, some of the responsibilities for release were shifted from my resource-constrained team. This reduced human error in the build process, and removed hours of work from my team, and allowed for other teams to work with latest code on a continuous basis.
I wrote out a long-term plan to re-imagine the architecture of the application in a more modern style. Working with the application architect, we are currently implementing this plan to move to a smaller, simpler, and faster application utilizing microservices and service orientation.
When acting in a team capacity, I provide mentorship and knowledge to junior members. I assist other team members when they run into problems with anything from code to servers to customers. I write documentation and provide training where needed to get fellow developers productive. I use personal agile processes where I can in an aglish-waterfally organizational structure to deliver quality code.