MT

Dr. Klein Privatkunden AG

Was here
April 2019 until September 2021
Technologies used
Spring Boot, Kafka, MySQL
Languages used
Kotlin, Java, Rust, Javascript, Typescript

Dr. Klein Privatkunden is a financial intermediary for property loans, insurance and instalment loans for consumers. It uses Holocracy as it's organization scheme, which provides a unique way of influencing the decision making process of the organization. I worked in the Team "Plattform" to create a software platform that connects property-related partners like real estate agents and architects with customers. When I joined, the project was in it's beginning stages so I had the opportunity to work on various parts of the project:

Development lead for the brand new customer portal from start to production

The customer portal is based on a micro-frontend architecture written in Angular that communicates with multiple Spring Boot microservices in the backend via a RESTful API, which are all tied together by a Kafka based event system. It features a section for the personal data of customers, a view on the current customer service agent, a multi-step wizard for all the relevant property loan data and a document upload. Property loans require a lot of paperwork which was previously managed manually and offline by sales agents. The document upload provides a way for customers to upload all the relevant documents which are then automatically organized according to their type and are directly available in the software that the sales agents use. This greatly reduced the complexity of this part of the customer journey by making the process fully digital for the customer and our sales agents.

Maintenance for login and registration

With the growing number of features and team members I took over the maintenance and future development of our core authentication and authorization system and the API gateway. All users of the system authenticate via an OAuth2 based login system and all internal and external requests are validated by a central API gateway before being processed. This allowed us to publicly expose all of our APIs which makes integration of other internal and external systems easy. We also dogfooded our APIs with our own frontends. My tasks involved continued improvement and bug-fixing of the login and registration process and the aforementioned authentication process.

Involvement and Architecture und DevOps

I was part of the architecture and devops circles. The architecture circle aimed to facilitate the continued improvement of our general architecture and also served as a decision making entity for it. It is also the place to exchange, discuss and approve architectural decisions of the individual subteams which we do with regular work meetings. The DevOps circle brought together all developers that hold the "DevOps hat" in the subteams. We used an infrastructure-as-code based approach based on Terraform (for general provisioning) and Kubernetes. Most of the actual day-to-day devops work was mostly handled autonomously by the developers in the subteams. This circle was the central place to discuss ideas and solve problems. We also did most of the overarching groundwork here.

Migrating our event system from RabbitMQ to Kafka

Our microservice architecture used an event based architecture for propagating state and data between services and especially context boundaries. Those events were previously published via RabbitMQ in publish/subscribe configuration. In order to keep logical consistency we wanted to keep certain ordering guarantees which required custom logic for all readers. This proved to be a cumbersome and poorly performing part of our overall architecture so we decided to switch over to Kafka as an event bus. My work here involved prototyping and testing, writing and maintaining the shared integration library (based on Spring Kafka) as well as supporting other developers in the migration.

Maintaining internal libraries

Additionally to the Kafka related library I also maintained an internal Java library for our Spring Boot microservices. The library handles common tasks for monitoring, tracing, authentication for internal and external requests and testing.

Exploring new technologies and tools

In some extra time I explored various new tools and languages and introduced them to the team. I brought in Kotlin as a secondary JVM language for our Spring Boot microservices (the document upload is fully written in Kotlin) and also developed an auxiliary monitoring tool with Rust to get some insight into the language. Additionally, I wrote a Yeoman based code generator to reduce the amount of code that has to be written for new entities which saved a lot of typing hours for my teammates and me.

Developer support

Being a full stack developer and also a pretty early member of the team I knew most parts of the system to some degree. Because of this I was frequently asked by other team members about details of our system. I was also sometimes involved in debugging and the onboarding of new team members.

Additionally I also held multiple Holocracy related roles such as facilitator (who leads and mediates meetings) and secretary (who organizes and documents said meetings).