These 6 solutions are making our lives as easy as we can

As a team of backend developers working on new a solution for Rabobank Insurances, we try to make our lives as easy as possible by using the newest technology and tools and automate as much as we can. Each new solution we implement might cause a lot of frustration initially, but the end result is worth it. Here I would like to go through each of these tools and convince you that they are worth every frustrated moment you spend working in them.

Solution 1: Microservices

Let’s start off with the simplest solution and probably the one that has been the most useful to us. We work solely with microservices on the backend, which saves us a lot of trouble in all kinds of ways. We never have merge conflicts, as we are all very aware of which microservices each of us is working on. We can easily deploy a solution without deploying something unrelated that hasn’t been thoroughly tested yet. We try to make each microservice simple, to follow the flow from end to end.

I won’t lie though; that it’s not difficult to keep them as microservices. The longer the application exists, the more functionality you will add to it and the larger each will get. Refactoring plays an important role to keep them as simple as possible. By constantly refactoring, we are able to create clean code every chance we get. Some say this is one of the most important aspects of developing, and we all agree with them!

Solution 2: Azure cloud environment & resources

Many of you will probably have experience with Azure and Azure DevOps. Azure provides great cloud services and Azure DevOps is an all-inclusive tool for version control, project management and many such things. Using them together will allow you, your team and your organization to accomplish great things! I will not try to claim they are the best tools out there. Each tool has its own things that make it, for that aspect, better than its competitors.

What the Darkside likes about Azure is that nearly all of the Azure resources are useful to us. From the very basics of having our Scrum necessities in Azure DevOps and having our repositories within the same tool, to the use of Azure databases such as BLOB database and MongoDB. MongoDB is a non-SQL database and BLOB storage allows us to store large binary files such as PDF files.

We’re constantly working on compliance, which Azure can easily detect. We have different environments for different approvers, and we use Azure library and Artefacts. Each of these, along with a few other necessary applications like PCF, which is the cloud hosting environment we use, combine together to create a whole environment for us to include everything we need in. We initially worked with deploy and release pipelines in Azure, which were useful at the start as they could easily be created in Azure but were too limited to us.

Now we have created a single YAML pipeline that is used for all of our microservice pipelines and does all of our checks and deploys. We never have to worry about not updating the version of the microservice anymore, which we so often forgot to do initially!

Solution 3: Automates pipelines

Continuing on with pipelines: we use automated pipelines wherever possible, and are still working on a few. In this way we can run a pipeline to create a MongoDB or a BLOB storage instead of manually creating them. Not only can they be created via the pipeline, but also updated without any disruption. This allows for consistent databases without the fear of a wrong configuration. Updates to a production database can’t be done easily, of course. So updating via the pipeline works as a perfect solution.

We will also soon have a working pipeline that automatically generates SSL certificates for any new pipelines or for certificates that are about to expire within 30 days. The process of requesting SSL certificates is usually long and tedious. Not having to do this anymore makes our lives so much easier. Another automated pipeline that is on our backlog is the creation of Azure key vaults to store passwords and other such things in. These are of course highly important, and any changes to them, like to databases, cannot simply be made by a user.

The use of such a pipeline would mean that we can be more flexible with any changes that we need to make. We can work independently rather than be dependent on others with more rights and get things done much quicker.

Solution 4: Contract based testing

Going to a completely different topic we also have contract-based testing in each of our microservices. This is probably a good point to mention that we develop in Java. Our contract testing, and everything else, is done using Spring Boot which is a Java framework that I would highly recommend.

Contract-based testing is a great solution to be less dependent on testing in a test or chain environment and making sure that end to end flows within our microservices are working correctly. Even these sometimes need to be refactored a little, and my biggest tip to anyone using contract-based testing is that naming is key! We are currently working on making them more maintainable, and it has helped us a great deal when the naming of each files used is clear.

Solution 5: Good monitoring tools

Another aspect that cannot be missed in any complete development environment is the use of good monitoring tools. We use Splunk and Dynatrace as a way to monitoring our application. Without these tools, we would be blind to any errors found in our chain environment and more worrisome errors found in production.

To optimally use these tools, you will also need to implement good logging within your code. Important here is to find the right combination between logging enough and not overwhelming your logs with unnecessary information. It is useful to use a combination of tools, but here too: don’t use too many! Each tool can show you something different, but it can also become confusing when using many different ones.

Solution 6: Axual streaming services

Lastly, I would like to talk about one of our most recent additions: the use of the Axual platform. Axual is a real time processing platform using Kafka. It provides streaming services that we use for obtaining data from other applications. Via Axual we are able to continuously obtain information that we need. We have implemented this along with a batch process, as we do not have a time constraint in processing this information. We have chosen to run a batch job once a day.

All of these tools combined give us a great platform to develop on, and helps us grow as developers as well. We are constantly learning and trying to use new tools to make our lives simpler. Even though it can be a hassle to set everything up, you will be so grateful in the future as each of these helps in a different way to lower your overhead.

About the author

Portrait picture of Ragna Gerretsen, the author of this blog about 5 tips to career progression for women in tech
Ragna Gerretsen
Backend developer

Ragna is a backend developer, actively involved in many different communities, and an advocate for women in tech. For the last two years, she has worked on the Digital Connect platform as part of the insurance tribe. Within this platform she, together with her team, creates a generic backend solution for connecting any and all insurances to the platform.

Related articles

Setting up a Kotlin community

  • 16 September 2021
  • 5 min
By Wouter Nederhof

VIDEO: Why you should use Kotlin

  • 21 September 2021
  • 30 min
By Wouter Nederhof

All you need to know about Rabobank Engineer's Week

  • 2 November 2021
  • 5 min
By Eduardo Barra Cordeiro