Mastering complexity with Microservices

By Lukas Engel on 05.02.2019

Since many years we rely on microservices and are happy to share our experiences:

In 2012, we got the opportunity to develop a software, which automates various management functions in Active Directory and Microsoft Exchange for an internationally operating company.

In the previous months we collected information about service-oriented architectures as part of a master thesis. While we were designing the software architecture for the new solution, we had the idea not to develop the software as one single component ("monolith"), but to distribute the functionalities across different web services. At that time, Windows Communication Foundation (WCF) was Microsoft's technology for creating service-oriented applications.

Therefore, we developed many WCF services that covered specific features. The design of the services was important in this context: they should not be too large, but also not too small. That means we had to avoid a single service becoming a monolith again. At the same time, a service should not be too small, as this would increase the complexity between the services. We therefore carefully considered which business functions the individual services should offer and designed them accordingly

Based on many years of experience with these services, we are convinced that this is the right architecture for many applications. The complexity of the software can thus be distributed among different services. This makes it easier to develop, extend and maintain the software.

Our Identity Management solution is based on Microservices

In 2016 we started developing our Identity and Access Management (IAM) solution waave. It was clear to us that we would also create it based on Web Service technology. Meanwhile, the term Microservices had spread, which covers pretty much exactly what we had implemented with our WCF Services. At the same time REST became more and more popular, which is mostly based on HTTP technology and among other things simplifies the design of the interfaces of the services.

We therefore developed the features of waave as REST Microservices. In a concept we first defined the design of the APIs (URL, HTTP methods, HTTP status codes for return values, etc.). We then developed a template on which all microservices are based. The microservices differ in their business logic, but their technological structure looks the same.

We have now a lot of microservices in use. The REST API makes it very easy to exchange data with other systems. For example, the waave user interface, which we developed with Angular and TypeScript, uses the standard REST APIs of waave Microservices. This means, for example, that a customer could develop a completely new user interface on his own. Another big advantage is the interoperability with other systems. This allows waave to be very well integrated into the companies' existing process landscape.

Microservices are very well suited for operation in a cloud environment. We use Microsoft Azure PaaS (Platform as a Service) components to run waave. This is the optimal infrastructure for us to run microservices.

The experience gained strengthened our conviction that microservices are the right architecture for many modern applications (especially cloud applications).