Anyone who has ever tried to create a mortgage origination system knows that things can get complicated very quickly. This highly regulated environment requires complex user management, a careful integration of 3rd party APIs, and handling stringent security requirements.
Ethos has been working on the Automatic Loan Processing System (ALPS) which streamlines the origination process for years. While most of the building blocks of mortgage systems are fairly simple (pages with forms, webservice calls, databases, etc.) the issue arises when you want the entire system to work together while enabling multiple teams to make meaningful progress without breaking everything.
We have 5 autonomous teams: two are focused on the loan office and broker experience, one is focused on pricing and appraisals, one on consumer-facing interfaces and one on data science. 4 years ago our application started out like many other .NET MVC apps – as a monolithic app with a monolithic database. After adding all the necessarily functionality we realized it was time for the next step in our architecture: distributed computing and microservices.
The building blocks of our system have evolved as well. In the past several years React, Angular and Vue.js emerged and matured. Cloud platforms like Azure and Amazon Web Services have added great tools for running, monitoring and deploying applications.
While our system incorporates multiple applications with their own stack (for instance the Marketing site is hosted on WordPress, and the Data Science team relies on Python), the majority of our application logic is written in C# / .NET Core. We found .NET Core to be very stable, fast and most importantly – cross-platform. Developers coming from a .NET background are extremely productive on Day 1 on the “new” stack.
For the front end we ended up choosing Vue.js. After an internal “bake off” we found that most of the engineers felt really comfortable with Vue.js syntax.
Azure allowed us to host .NET Core, SQL Server and utilize Azure Data Factories. Release manager has been great at allowing us to do some sophisticated DevOps work without having a dedicated DevOps person. We also use Ansible for some additional, non-.Net projects.
We have 5 different applications for various user roles (consumers, loan officers, brokers, capital markets, administrators) and scaling the system and the team has been fairly easy.
Below is a diagram that shows the technologies we picked for our system: