Importance of Continuous Integration and Delivery in Agile Software Development
“Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
– Foremost principle of the ‘Agile Manifesto’
Overview
In the current DevOps world, it is important that the technical landscape is capable enough to enable developers to maximize throughput of features from “code complete” {Continuous Integration} to “in production” {Continuous Delivery}, without causing much disruption to the IT environment. DevOps is a philosophy with the primary goal of merging Dev and Ops roles and processes together, to achieve business goals. CICD is all about automating the product delivery pipeline.
According to a leading survey conducted across top organizations in the world, nearly a third (32%) is not using any type of CI/CD platform. Also, almost 60% of organizations have yet to take full advantage of automation. This automation is to accelerate application development and deployment. Once an organization is able to get the right balance between these two elements, it allows faster migration to composite applications with little risk. It also helps with accelerated innovation and support for the growing process needs in terms of business.
In this blog, I’ll try and explain some basic elements of CICD and what advantages it may bring. So let’s read on.
What is CI/CD?
Continuous Integration:
Continuous integration is a disciplined methodology. It enables the programmers to check in to the code base. The code base can be any completed code, and its associated tests several times a day. The code may only be checked in if all its associated unit tests and all of the unit tests of the entire code base pass. This is one of the first steps or the actual foundation, or even the cornerstone, of everything that will follow afterward. As most of us would already know, agility always begins at the level of one or more scrum teams. Also, continuous integration is often the first thing a Scrum team would intend to do.
Source: https://cloud.google.com/solutions/continuous-integration/
How do you idenfity the implementation of continuous integration in your team?
As stated by Jez Humble (award-winning co-author of Continuous Delivery), all we need to do is ask the below 3 questions to the team members:
-
Is the code pushed into trunk/master by the developers on a daily basis?
-
Are the automated unit tests triggered by every commit?
-
Are 10 minutes enough to typically fix a broken build?
If the answer to all the 3 questions is a ‘Yes’, then you can be confident that the team is really doing continuous integration. If the answer to any of the question is a ‘No’, then it’s time to Inspect & Adapt.
CI in fact, (from a process perspective) requires development, test, and operations. It is to work together to create a collaborative release environment. To enable this, the key is automation. Often barriers are created with manual testing. As time is of the essence and manual testing can be a painfully sluggish process, especially if there are multiple check-ins (to the main branch) happening on a daily basis. Hence there is the necessity of TDD/BDD based test approach/product development. This approach will enhance the overall purpose of having a CI/CD pipeline.
You may also like: Agile Project Management: Everything you need to know
Continuous Delivery:
A sample CI/CD depiction
As an immediate extension to continuous integration, continuous delivery is to make sure that the integrated & tested components/new changes can be released to the customers, quickly and in a sustainable manner. Theoretically, with continuous delivery, you will be in a position to decide whether to release daily, weekly, fortnightly or whatever suits your business requirements. Another key aspect of continuous delivery is continuous deployment, which basically creates an early feedback loop with your end users/customers.
Benefits of CI/CD:
As the saying goes, “An organization is only as Agile as their ability to deliver/ship frequently in a smooth continuous manner”. Without a robust, automated CI/CD platform, this is almost impossible to be achieved. The benefits obviously are multi-fold.
1. Fully functional Increment:
When integration happens frequently, it automatically makes sure that the different roles and functions on the team are actually placed in a position to be able to create/deliver a consistent output: the team's incremental product increment; at the end of each iteration.
2. Increased velocity/productivity:
A well-oiled CI/CD pipeline will help any organization to respond to market changes better. Bug fixes are faster and productivity translates to happiness, and happy teams are more engaged.
3. Reduced Test efforts/Cost:
Automated testing and design by the tests not only ensure reduced manual efforts but at the same time makes the team realize the real value of continuous integration and the benefits of having a good battery of automated tests, both unitary and acceptance.
You may also like: How adopting an Agile Roadmap will help your project
4. Increased code coverage:
Test coverage is performed by CI server by checking the code. It also highlights any gaps as part of the visible build pipeline. Continuous Integration encourages transparency and accountability among the team.
5. Faster Time to market:
Modern development teams are building efficient software delivery engines by creating repeatable processes that standardize development best practices. CI/CD is one such thing that enables the organization to deliver incremental software in a much shorter time span, thus enabling quicker feedback from end users.
Common challenges in implementing CI/CD:
1. Business alignment:
One of the direct enablers of CI/CD is to make sure that we have automated acceptance tests. This sometimes tends to upset the business people, e.g., the product owner. It will force them to cut out their stories in a different way and think in the use case. Acceptance criteria should be well defined for sprint planning.
2. Prioritizing pipeline setup:
Most projects focus on overcoming the competition by releasing new features that can amuse the users. The product features and pipelines are weighed to be traded off in each sprint plan, which causes a lack in recognizing the existing problems.
You may also like: What's the Difference? Agile vs Scrum vs Waterfall vs Kanban
Widely used CI/CD Tools:
Let’s have a look at some of the most commonly used CI/CD tools in the software industry today.
1. GIT:
Among various DevOps tools In the software industry, GIT is widely used by open source contributors and remote teams as it is a distributed Source Code Management (SCM) tool.
2. JENKINS:
Jenkins is the most opted automation tool among software development teams. Automation of different stages of delivery can be performed with this open course CI/CD server.
3. DOCKER:
Since the launch of Docker in 2013, it has been a well-known container platform. It’s also thought of as one of the most important DevOps tools out there.
4. PUPPET:
Puppet, a configuration management platform, helps in managing the infrastructure as a code. It helps in delivering the software quickly and with more security by automating infrastructure management.
5. OCTOPUS:
Octopus is the deployment automation server for your entire team, designed to make it easy to orchestrate releases and deploy applications, whether on-premises or in the cloud.
6. TEST AUTOMATION:
Selenium is the most preferred automated test scripting tool out there in the market. Combined with either SpecFlow (for .NET base code) or Cucumber (java based code) it is a brilliant enabler to complete your CI/CD pipeline.
You may also like: PSM vs. CSM vs. PMI-ACP: How can you choose the right agile certification?
Key Takeaways:
-
Every agile team needs to have their CI/CD or DevOps ‘Aha’ moment. I can remember mine which was when we started doing one-click deployments. We were able to set up a .NET based Azure VSTS delivery pipeline with the help of Jenkins, Bitbucket, and Octopus enabled by SpecFlow & Selenium for automated testing.
-
However, complicated technical stuff you may be working on in setting up your delivery pipeline, never (ever) overlook the human side of things. It’s essential that the message is understood and resonates throughout your community/organization. This is important for the idea to succeed.
-
You are not DevOps ready yet if you have just set up a delivery pipeline. It’s only one layer of cream on your so-called DevOps cake. DevOps is a much bigger phenomenon.
-
Always make sure to keep the goal in sight. Complete with all of its esoteric terminology, which CI/CD is —it’s pretty easy (most of the time) to lose sight of why it actually matters. Ultimately, CI/CD is essential because it is required for us to meet our business goals.
Thanks for your patience and wish you all the very best in your Agile journey. In case you want me to write about any specific topic, please feel free to comment below, and I’ll be more than happy to add them to my ‘Blog Backlog’.
Hope to see you soon, with more such interesting topics.