Everyday is filled with new challenges and complex tasks that require deep analysis before implementation

Andrii, you are the Front-end Guild Lead at esurance. What is a Guild Lead?

esurance has a modern software architecture with several microservices and correspondingly a modern team organization with several teams. Most teams have front-end engineers. The front-end engineers are not only part of a formal team that maintains a microservice but also of an informal group called a guild that allows for learning from each other or simply talking shop across teams. It’s a concept that many in the software industry have adopted from Spotify.

Microservices come with their share of complexity. How do you come up with complex solutions to architectural problems and how do you make sure that the resulting complexity is mostly essential and not accidental?

First of all, we analyze problems deeply and model solutions before the implementation. It allows us to have a full picture before introducing new technologies or approaches. Secondly, we are aiming to implement an easy configurable and extendable solution. This can not be done without investing a lot in the architecture. And a cherry on the cake is that we use DDD approach to simplify communication on all levels.

Is everything at esurance’s software engineering as cutting edge?

Yes and no. We are very open to modern approaches to software engineering, be it with respect to processes, technologies, tools – you name it. But we are also very conscious and respectful of time-tested insights such as Conway’s Law or principles such as SOLID.

We saw Conway’s Law above in the mapping between microservices and teams. Can you give an example of SOLID in action at esurance?

Sure, it’s quite easy as we try to follow these principles everywhere. For example, we move the survey component into a separate library and split it into smaller packages that solve only one problem at a time (S principle). It is easily extendable as we have abstractions over all the main entities. That allows us to write a new implementation without touching the existing one. As we have low-coupled code that may be reused in several places/libs, it is really important for us to follow the L and I principles. And last D, our codebase is split into independent layers where we control the dependency flow and have a clear separation between our core logic, the logic of accessing the data, and the layer that is responsible for the user interface. 

At some point you have been hired by esurance and then have hired further engineers for esurance as well. What can you tell us about the hiring process?

At esurance we really care about hiring the right people as we try to build long term relations that will help us to improve the product. For this purpose we have a couple interview rounds that help us to make the decision about the candidate. One of the crucial stages is an interview with the team where a candidate has a chance to meet with potential colleagues. This part of the hiring process is very important for us as it helps to detect and raise potential red flags and understand if a candidate fits the team and vice versa. After the interview we as a team make a decision about giving the offer to a candidate or not. 

What does esurance mean to you?

Usually, the company where you work is the primary way you earn money, but not in my case. I’m really glad that I joined this company, as it has become my second home. I really appreciate that people here can help you solve all kinds of problems, even personal ones.

What do you like the most about esurance?

It’s never boring in esurance. Everyday is filled with new challenges and complex tasks that require deep analysis before implementation. As we build a platform, it adds additional requirements for code quality and stability. So, you people here are aiming to build a solid solution that follows best practices.

Thanks for your time Andrii!