Microservices look like a universal solution to all the problems of managing a large monolithic app. However, software legend Martin Fowler recommends holding your horses. You shouldn’t even consider using microservices unless your team has some core competencies. He explains what they are over at his blog.
Using microservices involves managing an ecosystem of services rather than one app. For this reason, you need to be able to rapidly provision servers in hours rather than days. This requires a lot of automation and having the power to provision spread across the team, not just one senior dev or devops person.
Having lots of loosely coupled services working together in a production environment promises many issues that you’re not going to detect in a test environment. As a result, you’ll need good basic monitoring in place to detect serious problems quickly (e.g. CPU, networking problems).
Lastly, with so many services to manage, you’ll need rapid app deployment experience. Martin advises on having deployment pipeline in place that can execute in more than a few hours.
As well as these technical requirements, you’ll need close collaboration between developers and operations, which Martin calls a DevOpsCulture. This collaborative culture needs to be in place to ensure provisioning, deploying and spotting problems will be quick and efficient.
Only then will you be ready to handle microservices. Martin recommends deploying your system to production only when you’re confident from testing that the prerequisites have been developed in the testing environment, at least.
Martin advises starting with only a handful services. Adding more services requires more: you’ll need to be able to trace transactions through multiple services and automate provisioning and deployment as part of a continuous delivery process. You should think too about moving to product-centered teams and organizing your dev environments so developers can move easily between repos, libraries and languages.