We live in an environment where everything is changing very quickly. Technology is constantly evolving, business requirements are continuously changing and user demands are steadily in flux. These breakthroughs have enhanced our lives and they just keep coming very fast, while digitization is sweeping across many industries, creating a growing demand for companies to innovate, experiment, and deliver capabilities faster. Increasing speed and agility is not just a desire, it is imperative for survival. The companies need to adopt a more flexible and efficient approach to deliver software by eliminating barriers and exploiting dependencies between development and operations. And for that, they should adopt a DevOps culture and a microservice based architecture.
Built on a culture of collaboration, DevOps joins development and operations in a single unified team with shared knowledge and processes. Its practices help creating a space for team members that optimizes resources and uses modern application architectures in a continuous delivery environment.
However, DevOps must be coupled with cloud-native technologies. Someone could even argue that an application is not truly cloud-native unless it has DevOps practices behind it, as cloud-native architectures are built to continuously deliver business solutions. When it comes to DevOps professionals, they are required to build, deploy and manage an infrastructure that is secure, resilient and high performing. Delivering these requirements is not feasible with traditional monolithic and siloed approaches, were functionalities (data processing, error handling or the user interface) are all interwoven, given the:
- Lack of agility: Architecture is hard to maintain, evolve and difficult to scale.
- Lack of innovation: Long build, test, release cycles. New releases usually take months.
- Frustrated customers: Operations are a nightmare. Long time to add even simple new features.
Organizations are thus turning to DevOps principles as they build cloud-native containerized applications, which run for the most part on containers and microservices, that are managed with orchestration engines. The combination of DevOps and cloud-native architectures is helping companies to achieve their goals by fostering a lean development process that can adapt quickly to market changes and provide business value through:
- Increased team flexibility and agility
- Happier and more engaged teams
- Cross-skilling and self-improvement
- Collaborative working
- Improved operational support and faster issue fixing
Operations are now less focused on the infrastructure and more on applying lean principals and optimizing workloads. The combined effect is a shaping automated delivery processes that foster operational efficiencies.
Microservices have the responsibility to manage one entity or a single type of logic, or according to Martin Fowler: “The microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API”. Hence, a microservice could be any small piece of business logic required by a business unit. If we think of a Telco company, they could eventually have a microservice to get the invoices, another to get the mobile 4G usage or for instance one to update customer data (email, phone number, address…):
When you access for example Amazon’s web page, every user action triggers a cascade of microservice API calls that are orchestrated by an API gateway. These microservices provide a small piece of data (customer reviews, banners, related products, product pictures…) as depicted in Amazon’s example below:
This powerful feature improves productivity and adds new capabilities to the companies, as they can containerize functionalities that can reused for different purposes, applications, devices or systems. If a company develops for example a “Product search” microservice, that provides catalog results according to the user input and certain parameters, it may be used by the web application to display search results, but it may also be used by the native mcommerce app to filter products categories or even by the warehouse software to manage the stock of products.
This fosters reuse and almost out-of-the-box applications, that only need to call this set of APIs according to the use case needs. Therefore, companies can efficiently re-factorize the organization through:
- Separation of concerns through modularity and encapsulation
- Scalability and workload partitioning
- Automated operations and on-demand provisioning
- Network latency, congestion and failure optimization
- Continuous delivery in multiple environments: Independently deploy, test and implement small components that can be managed by different teams.
DevOps represents a significant step forward in tearing down the boundaries between the business, development, and operations. Nevertheless, while the benefits are evident, companies may get bogged down in troubleshooting software issues or testing a large set of inconsistently managed microservices, especially when there is no standardization in DevOps as part of DevOps transformation journey.
The challenges organizations face with DevOps are many, but there are also best practices and underlying principles that may be applied to resolve them. Teams also need training on DevOps and enterprises should standardize processes, as well as establish common operational procedures and focus on building a collaborative culture with a proper skillset and shared goals.