Perhaps one of the most tempting opportunities for developers these days is to get involved in a greenfield project. Everyone wants to design a new application, lay the groundwork, and apply new technologies and methodologies.
In many cases, perhaps it is not the charm of novelty that is attractive, but rather the escape from the old. Today, monolithic applications are almost a curse word. After all, who wants to maintain a system that has been the result of years of work and patches due to unpredictable business needs? Developers have come and gone during the development of such a system. Everyone left their mark on it, their own style, perhaps many would have liked to tailor it to their own image, but unfortunately, such gigantic works are never fully completed. There are applications that have grown so large that it is impossible to fully understand them, there are no test cases, and it is not known where they will break if they are modified somewhere. Moreover, they are full of technological constraints and dependencies on old versions, updating which is a huge task in itself.
After all, who wouldn't want to participate in the development of a new, fresh application that features technologies that are even understandable to a human? And microservices brought exactly this promise to developers.
In the world of microservices, many people see a departure from the monolithic system, and not scalability, or even automatic scaling (elasticity). However, if we fail to build a monolithic application that is properly modularized, with each module having a well-defined business task, and these are loosely connected to each other with interfaces, then can we successfully draw the boundaries of microservices? If the function calls in our monolithic application were messy, can we handle the fact that a network is also included in our services?
It's also a good idea to prepare for the fact that with microservices we will also have to introduce additional methodologies and technologies such as DevOps, infrastructure as code, elastic infrastructure, automation, Continuous Integration, Delivery and Deployment, high-level telemetry, and so on and so forth...
In our courses, you can learn what these concepts mean and why they are needed. And we promise not to gloss over the difficulties of microservices, but to suggest solutions for them.
