It’s safe to say that microservices architecture is no longer an emerging new trend, but a mainstream software development strategy. Microservices aren’t just ideal for developing new applications, but are also optimal when modernizing legacy applications. Writing functionality into bite-sized, reusable components is more efficient and speeds up development. It delivers code that meshes well with container technologies running in distributed, cloud environments built for scale and high performance. By 2022, 90 percent of all applications will feature microservices architectures, according to 2018 research by IDC.
The merits of microservices often outweigh the merits of other development methods, yet there are other critical decisions to make during modernization projects. If the product is tied to revenues or customer care, you’ll need to consider how to best protect the application’s related revenue streams.
But where to begin?
Let’s consider a common scenario. Your executive team has just approved funding to modernize the platform that has been successful for your company for many years. While it’s been a profitable product, it was built with a legacy tech stack using a monolithic architecture pattern that has become fragile and unpredictable, and nearly impossible to update at the pace today’s customer’s demand. During the modernization journey, protecting the success of the product is paramount.
First, you’ll need to begin by setting your modernization strategy. There are some patterns and trends that have become very well accepted and can provide a solid foundation:
- Leverage the cloud for dynamic and flexible storage and computing power. Cloud Platform providers like Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure remove the burden of managing the day-to-day operations and enable teams to focus on creating new products and services.
- Continuous Integration and Continuous Delivery (CI/CD), along with containerization tools and practices, enable engineering teams to develop and deploy changes at a rapid pace. Additionally, they enable continuous testing throughout the development cycle to ensure quality is built in from the beginning.
- From an application design perspective, microservices patterns have emerged fitting almost any application or service capability, and have become an extremely common approach to building out new or refactoring existing functionality.
Once the basic building blocks are in place, you now must determine the best way to approach modernization that will take your company well into the future, all while minimizing any disruption to current revenue growth or customer support cycles.
- Greenfield: One approach is to build a new parallel product from scratch that will eventually replace the legacy application. Some call this the greenfield approach. Your organization can start fresh with an entirely new technology stack and not worry about integrating older technologies. For a groundbreaking project where innovation is vital to success, this might be the best choice. The downside of using the greenfield approach is that you must convince customers to migrate to a new platform, which entails a learning curve and initiatives. At the same time, you have to support two platforms simultaneously for an unknown time period. That’s expensive and takes more time and resources.
- Iterative. Another approach is the iterative one: you can incrementally re-factor capabilities and add new ones over time to the existing system. Customers don’t have to change systems or learn a new interface, and they’ll also see new updates faster. They can choose to turn a new feature on or off, giving them the ultimate flexibility. Development teams receive earlier feedback from customers on these new features and the overall costs are lower. Approaching microservices in an iterative fashion can be more complex, however, due to the necessity of blending monolithic legacy technologies with new cloud and container technologies.
The basic building blocks we already mentioned can be applied to both approaches. Microservices, cloud infrastructure, CI/CD, containerization and continuous testing all fit nicely.
The advice below can help guide you toward the right path for your company and product and mitigate the challenges of moving to a microservices architecture.
Tips for a successful microservices modernization project
- Evaluate system requirements
Not all areas of your system may need an overhaul. If it isn’t broken, don’t fix it. Invest in areas of the system that will provide the fastest solution to problem areas, such as performance, usability, and security.
I recommend you conduct a thorough architectural assessment of your current product to determine where your existing strengths lie and what areas are in greatest need. If you discover significant structural or performance problems in all layers (UI, service, and data), then a complete overhaul may be the best answer for your product.
Alternatively, an incremental approach might be best if you find your core system is stable and structurally sound, or even too complex to refactor all at once. This approach will enable you to focus on specific capabilities that can be decoupled, rewritten, and integrated back safely over time.
- Be mindful of current customer base
What are your current customers willing to wait for? Are they satisfied with the product as-is or are they begging for new features immediately? Do they have the patience to wait for an entirely new package? Perhaps they are willing to pilot or try new things in beta to provide you with real-time input along the way.
As a recommendation, take the pulse of your customer base to understand their frustrations or concerns with the current product. Assess their tolerance level for change during a period of transition from one product to another. Gathering specific concerns can help you evaluate if customers will react positively to rapid, incremental improvements over waiting for a completely new product.
- Consider the organizational impact on your teams
Increasing the complexity of the environment your teams will need to operate in the future — such as new infrastructure, tools, and mindset — can be stressful. Have your teams obtained the training and experience needed to be successful in the cloud? Do they know how to manage a distributed microservices architecture?
Incremental approaches are best for organizations that have adaptable team members, who can take on the challenges of learning new technologies while at the same time supporting the older application. On the other hand, a greenfield approach would be better for teams that you feel are less flexible and receptive to change. This approach will allow you to build up a new team with the right skills to match the technology.
- Determine long-term support costs
Are you prepared for the possibility of supporting multiple products at the same time? With a complete overhaul, it’s likely some customers will not want to migrate to the new product or use the new features.
Regardless of approach, I recommend that you have a clear sunset strategy in place to keep your customers aware of the changes coming so they can smoothly transition from the old product to new. Proactively communicate with your customer base as to their product options in the future. This way, your current customers can prepare themselves for an eventual shift to the new product.