Many of today’s software teams build cloud-native apps so they can deliver software faster. However, there’s a general belief that cloud-native apps must be built with microservices when in some cases it may be hard to justify the additional complexity.
“DevOps and cloud-native principles are a pre-requisite for building microservices but microservices is not a pre-requisite for DevOps and building cloud-native apps,” said Siamak Sadeghianfar, OpenShift technical marketing manager at Red Hat. “Depending on the use case, it may be smarter for you to build cloud-native applications without microservices.”
Why you might not need microservices
Many organizations still build or maintain monolithic applications; however, competitive pressures are necessitating faster software delivery.
“Microservices are not a prerequisite for building cloud-native apps,” said Sadeghianfar. “Some of our customers are using an approach we call ‘Fast Monolith’ which applies cloud-native practices to monolithic applications.”
For example, KeyBank in North America transformed a Java application into a cloud-native application and deployed it using containers. Rather than breaking the application into 40 pieces, which it would have done had the company used microservices, KeyBank broke its application into two pieces and deployed them on the Red Hat OpenShift container application platform. The “Fast Monolith” approach enabled the company to shrink delivery cycles from three months to one week.
For years, Agile software teams have successfully reduced software delivery cycles and improved product quality. However, DevOps is necessary to enable continuous delivery all the way to production.
“In Waterfall teams, people aren’t collaborating effectively and they’re still delivering software in a linear fashion even though they’re applying Agile processes,” said Sadeghianfar. “The lack of proper testing and automation make delivering software into production a very painful experience.”
By comparison, DevOps requires a lot of automation and cross-functional collaboration to accelerate release cycles beyond Agile.
“The cloud simplifies automation and DevOps practices. The use case determines whether the use of microservices is necessary or not,” said Sadeghianfar. “You can build structured monoliths, employ DevOps practices, do continuous delivery and automate every step involved in delivery process without inheriting the complexity of microservices.”
How to do fast monolith right
DevOps teams that want to speed software delivery without moving to a microservices architecture are wise to try the Fast Monolith approach on an app that has a complex Waterfall architecture and an appropriate use case.
“Cloud-native applications don’t begin or end with microservices,” said Sadeghianfar. “You have to start with DevOps, and to do DevOps right, you have to restructure for DevOps. If you don’t do that, you’re setting yourself up for failure.”
A common mistake is to try to do DevOps using traditional Waterfall team structures. A better approach is to adopt DevOps team structures and practices because continuous crossfunctional collaboration is necessary throughout the application lifecycle.
“Delivering software faster isn’t just about the architecture of your application. The first thing is you have to get out of the way of developers,” said Sadeghianfar. “In today’s market, developers are very expensive resources so you can’t have them waiting several weeks or months for VMs, databases or other resources.”
To move at the desired speed, developers need the ability to provision the resources they need ondemand. In addition, every step of the software delivery process has to be automated end-to-end so DevOps teams can build pipelines and achieve continuous delivery.
“You need to get to a point where you can release software into production without disruption,” said Sadeghianfar. “The biggest obstacle is getting rid of the manual checks and balances we’ve had in place just because we’re emotionally attached to them. What you want to get to are things like rolling deployments and canary releases that allow you to deploy directly into production with very little risk and zero downtime.”
If teams can do all of that and achieve delivery schedules that meet customer requirements, then Fast Monolith may be the most effective way to build applications. However, if daily or intra-day releases are necessary, it’s time to consider microservices for that specific team or application.