Take advantage of the best practices, tools and methodologies to speed up the delivery pipeline
We now dwell in the age of glitzy new tools and methodologies such as Agile and DevOps. In the sections that follow, we’ll examine the DevOps best practices and strategies that can be instrumental in speeding up the CI/CD pipeline and help us get faster time to market releases. This article discusses the following points:
- Building applications having low coupling and high cohesion
- Building well designed pipelines
- Benefits of adopting microservices
- Continuous Delivery
- Understand the role of a Value Stream Architect
- Building product value streams
DevOps – aligning business with IT
Okay; but what is DevOps anyway and why should I care? If I’m using Agile why do I need to follow DevOps as well? Well, your queries will be answered as you read through this article. DevOps is a combination of software development and information technology practices and tools that can increase an organization's ability to deliver applications, fixes and updates at a faster pace closely aligned with the organization's business objectives. In essence, DevOps practices help deliver better software faster by automating and orchestrating continuous delivery pipelines.
DevOps comprises of a collection of "continuous" practices that include continuous integration, continuous testing, continuous deployment and continuous delivery - all of these together aim to achieve continuous improvement of the software products and practices in an organization. However, DevOps is not just about tools and technologies. It is also a cultural practice and that improves the communication and collaboration between multiple business units.
The sections that follow examine the best practices and strategies that can be adopted for better DevOps and speeding up the delivery pipeline.
Build well-designed pipelines for effective DevOps
The goal of DevOps is to help an organization deliver software at a faster pace with frequent iterations. The key to effective DevOps implementation is selecting the right tools and technologies and designing an effective continuous delivery tool chain. A well-design continuous delivery pipeline that is automated and traceable can help accelerate the software delivery process. Identification of the various pipelines is of utmost importance for effective DevOps. The type and count pipelines would vary from an organization to another. Here's the list of the pipelines that a company might typically have in its software delivery process.
- Software architecting pipeline - this would be used to design new features
- Coding pipeline - this would take care of the implementation of the new features
- Quality Assurance pipeline - this would be used to verify if the new features implemented adhere to the quality standards and are stable
- User experience pipeline - this pipeline is used to test the new features for usability
- Build pipeline - this pipeline is used to configure and compile the new code changes
- Deployment pipeline - this is used to push the new changes to the production environment
Pipelines can be added or removed based on priorities. These pipelines that in turn involve processes, may not be in any particular chronological order. As an example, you might have design before coding, but different types of testing might be performed in parallel. Staging and building might also occur at the same time as testing.
You should have a product owner for the delivery pipeline and use the best-of-breed approach for selecting the right tools. You should use model-based integration so that introducing new tools in the pipeline will be seamless. This will also ensure that your pipeline is not be disrupted when new tools are to be introduced. You should also use standard integration technologies to integrate the necessary tools into the pipeline if need be.
Deliver better software faster by evolving the Value Streams
Value streams may be defined as a series of steps that are adopted by an organization to build software solutions that provide business value in continuum. Organizing the teams around value streams provide many benefits to an organization. Such benefits include: faster time-to-market, faster learning, better quality and higher productivity.
Here the term "value stream" refers to the end-to-end feedback loop of delivering software to the customer that maximizes business value. Typically, there are two types of value streams in an enterprise. These include: operational value streams and development value streams. While the former is used to deliver customer value, the latter is primarily focused on building systems and capabilities that can enable the operational value streams.
Although organizations adopt DevOps and other practices, they might not be always adept at creating a holistic view of the value stream of a product right from the time of its inception to delivery. The ability to engage resources into areas that would increase the velocity of the deliverables, a well-defined feedback mechanism, process automation is crucial to success of an enterprise.
Identify and empower your Value Stream Architect
As organizations strive to achieve success and compete with the competitors to stay ahead, they need to accelerate the flow of business value to their customers. However, the question that comes to our mind is, who would own and architect the software value streams? Here's exactly where a Value Stream Architect comes to the rescue. If you are to create a delivery factory that can build great software and deliver it faster, you should identify and empower your Value Stream Architect.
The role of a Value Stream Architect is fast emerging as one of the most important and critical roles in DevOps. A Value Stream Architect is one who can speak both the language of the business as well as the technology.
The Value Stream Architect works closely with the Product Owner and is an influencer, an optimizer and also an architect. Teams should be organized around Value Streams that deliver business value. The Value Stream Architect should be able to architect the Value Stream to eliminate wait states by leveraging concepts such as, microservices, APIs, etc.
The Value Streams should be architected for speed of delivery by eliminating the wait states. The Value Stream Architect should develop ideas for continuous improvement. The entire flow of work should be made transparent. In doing so, it would be easy to understand what might be slowing the work and detect the bottlenecks.
Factors crucial for the success of a Value Stream Architect
There are certain factors that play a crucial role for the success of a Value Stream Architect in an enterprise. These include: clear visibility, organization support, well-defined architecture and training.
- Distinct Visibility - It is imperative that there is clear visibility into the lines of business or products. Feedback mechanisms should be implemented. Feedback mechanisms are crucial - they form the core component of any value stream architecture.
- Organization support - The value Stream Architect would need support of the organization to drive the necessary changes for implementing the continuous improvement ideas. The Value Stream Architect would need organizational support to drive changes that are needed and span across each component of the value stream.
- Architecture - To achieve a high velocity as far as delivering business value is concerned, it is imperative that the software architecture, organizational architecture and the value stream architecture are aligned. The Value Stream Architect should visualize the key flows in the value stream and be able to identify the bottlenecks and constraints. The Value Stream Architect should also be able to create target architectures for the value stream of each product.
- Training - The Value Stream Architect should be able to identify the skill deficiencies and work with the leads to arrange for the necessary training to fill in those skill gaps. The team should understand their delivery value stream, the constraints, the blockers and also the wait states so that they can determine what best can be done to deliver a software quickly.
Continuous Improvement via CI/CD and Continuous Testing
Continuous delivery is defined as a set of practices that can be instrumental in building, testing and delivering software faster and more frequently. It is a series of workflows, activities and automation that is needed to develop a business idea and eventually ship it to the end user. While DevOps facilitates faster software delivery, the quality of the software to be delivered is not compromised. The builds that are committed by the developers are tested continuously before a release to ensure that the software to be delivered has better test coverage with less or no defects. In essence, continuous testing is added to continuous integration and continuous deployment to achieve quality and speed of delivery in continuum.
Build applications that have low coupling and high cohesion
Why does the terms coupling, and cohesion fit in here? Well, coupling and cohesion are concepts that are related to the complexity of the software you are building. Coupling and cohesion are used to indicate the design complexity and qualitative analysis of the modularity of a system. While coupling refers to the degree of interdependence that exists between the modules in the application, cohesion is used to denote the intra-dependency that exists between the elements of a particular module. Applications that have high coupling are difficult to test and maintain. Refactoring such applications is also a daunting task since changes to one component in such applications would affect the other components as well.
If the architecture is overly coupled, you should decouple the components since high coupling will be detrimental to the success of CI/CD. Decoupling the components of the application will also help you come up with a robust test strategy and the shorter test cycles.
To build applications that are scalable, manageable and extendable over time, the application should have low coupling and high cohesion. The success of Continuous Integration (also known as CI) and Continuous Deployment (also known as CD), thrives largely on the coupling and cohesion in the application. Continuous integration builds are faster and so are the feedback cycles in systems that have high cohesion and low coupling.
Reap the benefits of Microservices-DevOps combination
Okay, if CI/CD is good enough, why do we need microservices? Well, assume that you are using a monolithic architecture and the services go down or are not responsive. This can impact productivity, user experience and hence adversely affect your business. In other words, if your application and the services that it uses are not up and running, you are not earning - as simple as that! Ok, so how do we stop or prevent such outrages? Here's exactly where Microservices comes to the rescue.
Microservices architecture comprises of a collection of loosely coupled services that can be independently deployed and can communicate using simple APIs. It is a term given to a set of independently deployable services that run in their own environments and communicate with other services using well-defined interfaces. If you are using microservices, failure of one part of the application might not bring the entire application down. Moreover, microservices architecture facilitates incremental releases – and that’s the goal of DevOps. The independent nature of microservices helps the DevOps teams achieve higher throughput in a short span of time. In other words, microservices can help the DevOps teams achieve more in less time, i.e., the teams would be more productive.
Contrary to applications where an upgrade is time consuming and would need you to go offline or revoke access to the application till an upgrade or update is complete, if you are using Microservices you need not take down the entire application when an update or upgrade is in progress. Microservices enables you to break the whole system into smaller parts which can be developed and deployed independently of one another. This dramatically reduces the amount of time that is needed to update your systems.
Microservices and DevOps have been two of the most talked about topics in the architecture forums in recent times. The combination of DevOps and microservices is making the teams more productive and be able to deliver better software faster. Microservices provide support for continuous delivery and deployment and hence paves the way for accelerated delivery of software. Microservices help DevOps teams to develop pieces of functionality independently and in parallel. It facilitates cooperation and collaboration amongst cross-functional teams to build, test, release and manage software applications seamlessly. The modular nature of microservices facilitates incremental releases - this helps the DevOps teams to be more productive. Here's a list of some of the benefits that Microservices and DevOps has to offer:
- Reduced time to market and software development costs
- Better productivity and hence higher levels of business value
- Reduced errors
- Cloud-based architecture
The quest for faster time to market releases have given birth to principles like Agile and DevOps. DevOps transforms business ideas into customer value and accelerates application delivery. The key to success of DevOps is knowing the right tools and technologies, building well-designed pipelines, understanding the importance of value stream management and implementing an effective product value stream. DevOps done the right way can improve profitability and market responsiveness as well.