Microservices - Are You Ready For It?

ömer erakman
3 min readJul 5, 2020

Microservices! Yes many people are talking about it but you should be aware of challenges of microservices. There should be some questions to ask yourself before starting it.

  1. Do I really need it?
    While deciding a software or system architecture it is very important to evaluate quality attributes like availability, durability, auditability or modularity.
    Not all applications need all quality attributes in the same levels. For example App1 may need availability of five 9s and App2 may need two 9s. If you are not familiar with Nines Notation just check it out.
    Microservices can solve different kinds of problems but while evaluating quality attributes you may decide that you really do not need microservices at all.
  2. Should I do it right now?
    It is mostly advised that you should start with monolith then go microservices later. It is partly correct in some ways. If you are developing an application in a new domain with a new technology stack for a new customer, the situation for you could already be challenging enough. It may be better to focus on such challenges at first. Because you should know that going on with microservices will be a compelling issue to handle.
  3. Do I have a DevOps team?
    It is great to automize everything but you should know that doing DevOps takes time. If you are going to develop a microservices architectured app with many developers, then you will probably need a DevOps team too. If there is not any DevOps people around then your developers will have to handle those operations as well. This means that they will lose their attention on the app and start to focus on other things. In the end that could end with a failure because all customers need a working application.
    To make things work with microservices from development to production; it is very important to automize deployments, running tests, versioning etc.
  4. Am I ready to challenge distributed transactions?
    In traditional applications with monolith architecture and single database, transaction is not really a problem. You just code it right and it runs smooth and good. But when you are using microservices, transactions may turn into distributed and it will be one of your biggest headaches. You can check out my story about it: The SAGA Pattern
  5. Do I need a reporting service?
    With monolith applications building a reporting service is not a big deal but with microservices get ready for new design patterns like Event Sourcing and CQRS. Every problem has at least one solution. You should not forget that building every single solution makes the system more complex and that comes with its cost.
  6. Do I have time to handle new technology stack?
    Microservices come with possible different kinds of technologies. Some of them might be: Containers, Container orchestrator, Api gateway.
  7. Am I aware that almost everything will be distributed?
    If one problem be distributed you may be sure that it will be harder to solve. Lets say that you need tracing requirement from starting front end to persisting data to database. With microservices you may need a distributed tracing tool like OpenZipkin.
    A simple cache problem with a distributed system starts to be more complex. You may need to build a distributed caching solution.

Conclusion
Microservices may fit well with today’s needs. But being careful about deciding the software architecture may help to achieve success.

If you are on some cloud environments like AWS, GCP or Azure, they will handle most of the complexity for you. But if you are working for an enterprise and you have to build a cluster then the problems will be waiting for you. Still you do not need to be pessimist. Open source tools like OpenShift and Rancher are good to start.

--

--