Senior contributor to redesign and reimplementation of LendUp's Java 6 monolith into a suite of Java 9 microservices. The resulting system was composed of three microservices: Payments encapsulating interaction with third party payment providers and incoming customer loan payments, System of Record encapsulating account balances and life cycle events, and finally Underwriting & Credit Reporting encapsulating interaction with major and minor credit bureaus and submitting consumer credit information.
This resulted in significant performance improvements, e.g. daily processing Lendup’s portfolio of approximately 500K loans reduced from hours to minutes, loan error rates reduced from ~3% to < .1%.
Transition was done via phased approach modifying the live transactional system. Phase One was the development of metrics to allow diagnostics for further changes. Phase Two was the separation of reporting datastore from the transactional datastore and encapsulation of their respective APIs. Phase Three being a complex migration/translation of loan data.
This effort involved significant restructuring of data and data access: separation of reporting from transactional data, encapsulation of data mutation behind service APIs, as well as migration from a general datastore (SQL) to specialized datastores (sql for web systems, log-backed noSQL for transaction processing, and Redshift for reporting).
Developed testing infrastructure which allowed complete comparison of loan-state processing between subsequent versions. Made standard financial accounting concepts like triple-entry bookkeeping central to testing and reporting. This was critical to manage smooth change management.
All of the above involved detailed exploration, refinement, and formalization of system requirements with all stakeholders including customer service, accounting, legal, and credit. This was especially critical as the initial system (prior to my involvement) had no written specifications or tests.