A brief high level description of Haven Life architecture
This first blog post provides a high level overview of our tech stack architecture at Haven Life, and tells you about the different services we use to power havenlife.com and our sister sites.
The Different Business Units
Haven has four main “business units”, each segmented along business concerns.
- Direct To Consumer — This is where all our consumer (HavenLife or Coverpath) and Agent facing sites reside.
- Coverpath Distribution Management — Here we manage our agency-related back-office operations.
- Policy Administration — Post issuance administration of policies is done here; such as customer updates, payments, and billing processes.
- Underwriting — Both manual and algorithmic underwriting processes live here.
Components
For our consumer facing sites and backend business units, the tech stack consists of the following components.
- NGINX is our web server/reverse proxy sitting on the edge, and is currently serving up partial static assets. We use Content Distribution Network (CDN) to serve up a portion of our static assets as well.
- We use Redis clusters for caching user sessions and other high frequency lookup data.
- Node.js backed application servers running Amorphic, our in-house built isomorphic framework which we created early in our company’s tenure.
- ORCA (our in-house built orchestration layer) workflow servers running on Node.js. These serve as our asynchronous orchestration engines which are powered by metadata and run our core business logic. The engine uses messaging backed by RabbitMQ, features idempotent activities within stages and is highly scalable. Due to its flexibility we’ve been able to reuse it in other places in our architecture; for example, as our back engine for our Policy administration, Underwriting, and Agency unit. It’s also scalable vertically and horizontally, where we could have different configuration options where we have one engine listen to all the rabbit queues, or have all the engines listen to one rabbit queue, or any combination in between. This gives us the ability to scale and concentrate a farm of engines to process activities that are very-high CPU-intensive otherwise.
- We use RabbitMQ clusters as our messaging platform. Using message based systems has helped us avoid back pressure surges and potential outages with missed events. The clusters are setup to be Highly Available (HA), and AWS Auto Scaling Groups (ASG) ensure that we always have a minimum number of machines running.
- A set of Node.js based microservices to offload various domain tasks such as quoting, analytics, pdf generation and much more. The interfaces for these services are REST, GraphQL, and messaging via RabbitMQ.
- PostgreSQL is our current database of choice. We started out using MongoDB and soon outgrew its features as our object model and use cases grew in complexity.
- ElasticSearch is used by our Customer Support team in order to facilitate fast searches across various data points across our Object Model. We also use Elastic in our ELK stack for log-file aggregation.
- We use typescript throughout our company because of the type safety and other additional features that come with it.
Life Cycle
Whenever a customer applies for a policy, after they have filled out the application, the backend begins to process the application. We go through a number of steps which span Underwriting and CDM (if the application was sourced by an agent) to gather data, determine mortality risk, and try to offer the best result for our customers. Finally, Policy Administration takes over the process once a customer has e-signed the final policy packet and we issue the policy.
In closing, we are constantly looking towards the next step ahead. We aren’t afraid to make mistakes, we encourage each other to make decisions and we move fairly quickly to adopt changes. We constantly evaluate the technology stack and all the tooling around it to make life easier for our customers and ourselves.
Haven Life Insurance Agency is a subsidiary of Massachusetts Mutual Life Insurance Company. We sell a term life insurance product issued by MassMutual, and we partner with MassMutual to develop shared technology.