Enterprises have been struggling for years to develop applications that are agile and quick to change. Microservices architecture provides a way to address this challenge and has, therefore, caught the attention of enterprise IT teams. Beyond the initial enthusiasm, proof of concepts and pilot implementations, enterprises are struggling to adopt this architecture. In this blog, I explain why enterprises need to consider a strategic approach to Microservices architecture and suggest a four pronged approach to adoption.
Microservices Enable Evolutionary Architecture
There are quite a few architecture styles that have emerged over the last few years from the internet companies that don’t have the constraints of legacy systems. One of the key characteristics of these architectures is their ability to respond to changing business needs, known as evolutionary architecture. Microservices architecture is one such architecture style that can address variety of concerns that effect the agility of systems. From a technical standpoint, Microservices uses service orientation principles and functional partitioning to “monolithic” applications to make systems function as relatively independent services. From a business benefit standpoint, it makes enterprises digital ready and offers multiple advantages to them. Some of which are:
- Allows experimentation & innovation, leveraging cutting edge technologies, but localize the related risk only to a specific service
- Because of independent services, scaling of teams is easier, as Microservices reduces coupling between teams and enables more autonomy and accountability
- Improves resiliency of mission critical systems, by scaling and replicating parts of systems rapidly. In case of failure of a specific service, rest of the system can continue to run
- Enables cloud adoption and cloud native architectures by deployment of services over multiple VMs or containers working together
Thinking about Microservices Adoption & Challenges
Embracing Microservices architecture at an enterprise level poses unique challenges especially if we consider large enterprises that have complex application landscapes. Some of the common questions that both large and mdi-size organizations ask are:
- Where do we start the adoption of Microservices?
- Coupling within existing systems can be complex. Is there a way to prioritize application portfolio?
- What capabilities do we need to start adopting this architecture style at scale?
- What practices should we use to ensure successful adoption and get best of Microservices architecture?
- There are no proven enterprise adoption patterns, as there is very little enterprise wide adoption outside Internet native companies. How do I do enterprise wide adoption?
Approaching Adoption Strategically
Often enterprises take a tactical approach and use Microservices to douse fires in specific problem areas. Such thinking will do more harm than good. Hence, I recommend a logical and strategic four pronged approach towards adoption. These activities need not happen in the mentioned order though. Necessary capabilities will have to build systematically, which will help realize full benefits of Microservices.
- Discover: Articulating the business benefits and creating a case for Microservices adoption. Based on the maturity of enterprise this can be optional. However, one might have to build a case to get the necessary investments and budget allocation
- Plan: Assess the current state capabilities and identify the gaps in terms of capability that is required for adoption at scale. These capabilities include frameworks, technology choices, governance etc. Another important activity is to identify the applications of priority where Microservices architecture can be applied
- Act: Build the base capabilities needed for Microservices. Choose the right technology stacks. Build out platform capability. Setup guidelines and prepare playbooks. Put forward service design guidelines and start implementing services
- Optimize: Take Microservices architecture into production at scale. Ensure services are organized per domains. Automate the deployment processes. Bring in strong management & monitoring capabilities. Keep an eye for potential pitfalls
As follow-up to this blog post, my next blog will cover more details on specific concerns and challenges that we are seeing in real world scenarios related to this subject.