Client
We were contacted by a company that provides digital insurance services for businesses and individual customers. The client is a subsidiary of one of the biggest companies in the field. We were ensured our cooperation would benefit from the experience and stability of one of the world's largest insurance companies.
Project Description
The company worked in both B2B and B2C sectors, i.e. with sales partners and individuals. Their web platform owners live up to the promise of guaranteeing fast claims, easy insurance, and immediate protection at fair prices and easy-to-understand conditions while remaining 100% paperless.
Their previous web solution was an MVP version of the product and had a lot of issues. It wasn’t scaling too well and wasn’t allowing monitoring and incident handling in an error-free way, so a lot of manual operations and adjustments were required.
The business owners tried to fix the issues without changing the architectural approach, but it became obvious that it wouldn’t be enough. So they started to seek a senior-level software engineer who would be able to take part in architectural design and would have a creative approach to sophisticated challenges. That’s when Elinext came in handy as we had the right person for the job.
Challenges
To solve the issues with their current product, our customer needed an experienced software engineer. These are the main challenges that person had to face:
- Become a part of an 8-strong team and closely collaborate with the tech lead and team lead in creating service from scratch
- Setup and adjust coding practices
- Come up with new development practices and share knowledge across the company
List of the pain points our customer was trying to solve with the help of our developer:
- Develop the set of functions that would change custom insurance plans or the clients (functional that enables re-calculation of plans, adjusting to new payment schedules, etc.)
- Implement the set of tools for payment processing edge cases (refunds, partial refunds, chargebacks)
- Get rid of payment processing timing problems that occurred in the system (i.e. gap in funds settling, SEPA payment limitations, third-party custom policies)
- Lower the processing costs with the integration of third-party services
Process
The process of establishing the connection between Elinext developers and in-house members of our customer didn’t last long and consisted of 4 stages :
Stage 1: C-level meeting with our developer: the issues were mentioned, and we discussed ways to resolve them .
Stage 2: Meeting with the lead engineer on the tech project. We discussed architecture concepts and business issues that were mentioned in the Stage 1 meeting.
Stage 3: Team brainstorms about possible implementations. Comparing approaches and technologies that can help to build systems according to requirements.
Stage 4: Team meeting on system implementation. Every team member has a report on part of the technology that we are planning to use in the solution. Q&A session and discussion on tools and frameworks.
After that, our developer met with team members who were responsible for the implementation of the current part of the system.
Solution
The software solution consisted of 2 microservices for payments and invoices, SQL and NoSQL databases (a messaging engine, and workflow service for the flow execution orchestrator).
According to event-driven philosophy, microservices utilized event sourcing. Also, the CQRS approach was chosen for the client-server communication flow.
There are two effective modules :
Module 1: Payment service.
This module is responsible for handling incoming and outgoing payments and connecting to different providers to process the payments (the integrated systems are Paypal, Stripe, Klarna, and Deutsche Bank API).
The module includes an Event-driven approach which enables less amount of processing errors and manual work.
This module also makes pipelines for every event flow. While developing it, the updates were normalized, and as a result of the development, asynchronous operations were handled properly.
Combining all payment subscriptions in one stream of updates for all other microservices eliminated the possibility of collision, inconsistency of updates in different microservices, and race conditions.
Module 2: Invoice service.
Our customer previously used an external bookkeeping service, but it had its limitations. Our customer solution was adjusted to system requirements, such as handling updates during request spikes and providing flexible data querying.
Results
In the end, the system was fully functioning and passed all the required tests. The participation of our developer reduced operational costs, increased business operations team productivity, and as a result, boosted customer satisfaction rate.
Among other benefits of augmenting our engineer to the development team, our customers lowered the amount of payment-related incidents.
We incorporated more payment sources, potentially of our customers’ clients, and our customers could then offer custom solutions for the key business partners.
The system has financial success and streamlines insurance operations for our customers, and our developer received positive feedback.