IBM recently held its InterConnect conference and one of the most frequently asked questions was:
When should I evolve my monolithic application into one based on microservices?
The key to this decision is whether or not your existing monolithic application is causing you problems. There are a number of well-recognised benefits to a microservices architecture and an equally well-known set of costs.
One way of looking at this is to take the issues that you are currently experiencing with your application and see if the benefits will address them. Adopting this approach means that if you canâ€™t see any problems or issues, then moving to a microservices architecture is only going to cost you time and resources for little or no gain.
Let’s look at potential issues that you might be having:
- You are unable to deploy your application fast enough to meet your requirements.
It could be that the business requires new function to take advantage of a new market opportunity, or you want to link into a new social media service. Either way you are unable to build, test and deploy your application in a timely manner.
- You cannot take advantage of new technology, libraries, or techniques that are being adopted by other enterprises.
This can manifest itself in several ways. It may be that your current technology stack does not support the functionality you need. For example, you want to generate Swagger documentation automatically from your code, or you want to link into a new service but they don’t provide client libraries for your platform.
- Organisational skill-shift means that you have a declining pool of people developing and maintaining the existing monolithic application
Your organistaion, however, is increasingly hiring new people who are equally talented, but have different skills.
You may not be experiencing any of these issues but there is a correlation between the complexity of your application and the likelihood of experiencing one or more of them. Put simply, the more complex your application, the more likely it is that you’ve hit one or more of these issues. I consider complex applications to be those that perform a multitude of related, yet discrete, functions, such as inventory management and shopping carts, or applications that exploit a large amount of functionality provided by their technology stack, or both.
In summary, complex applications are a good candidate for evolving to a microservices architecture. This is especially the case if developers spend more of their time dealing with infrastructure issues, both in terms of building and testing, and within the code such as rippling new parameters through components.