Understanding the Need for Continuous Integration

Understanding the Need for Continuous Integration

Nowadays, we hear the terms continuous integration (CI), continuous delivery (CD), and CICD pipeline. I suppose you have read many articles or watched many videos about this topic, if you are still unclear about these terms and what they mean just like me then you have arrived at the correct place.

Here, we will take a quick look at the background of CI and understand the need behind it.

We will begin with an overview of the two primary software development models: Waterfall and Agile. This will help us to understand how CI came into existence.

Before looking into those software development models, we should know how software or an application is developed and the stages it goes through.

SDLC

The Software Development Life Cycle (SDLC) is the process that a software team follows to develop an application and deliver it to the client. Teams follow a set of stages in sequence by linking the output of one phase as input to the next stage.

It comprises the following stages:

Requirement Analysis

This is the first stage where the business team gathers the project requirements from customers or internally within the organization. They analyze the requirements, decide the cost, and determine the benefits.

Design

The architects and designers devise the solutions and features that the software should have. This is where the process and architectural diagrams are drawn and project documentation is prepared. The project goals and software tools to use are decided in this stage.

Implement

This is the stage where the code is developed based on the goals defined in the design stage. The project manager creates and assigns tasks to developers in this phase. This stage may last longer based on the project.

Test

Once all the features are developed, the testing team takes over all the software modules and thoroughly tests them. In case of any failure, the development team is immediately notified to resolve the issues.

Deploy

After detailed testing, the whole product is deployed onto the production systems.

Maintain

Feedback from the users is analyzed and the software is rebuilt or modified to fix the issues or release new features in the form of upgrades or patches.

Waterfall Model

The Waterfall model is the most famous and widely used software development model. It is simple, follows a sequential development process, and is similar to the SDLC.

Advantages:

  • The technology stack is fixed.

  • Requirements are well documented and there is no ambiguity. They don't change in the process.

Disadvantages:

  • Not suitable for projects where the requirements change and new features are expected frequently.

  • It takes a lot of time and the end product is only produced at the end of the life cycle.

  • Difficult to measure progress.

  • Integration is done at the end of the development/implementation stage. So, if any integration issues arise, it isn't easy to fix.

So, the software is developed as a whole. The build process is done at the end of the development stage making it difficult to fix the bugs if any are detected.

To overcome the disadvantages or difficulties of the waterfall model and to build and deliver the software quickly, and frequently, we have Agile.

Agile

The Agile methodology is an alternative software development process to the traditional one. Agile means quick and easy. Here, multiple teams work together to develop the software. Agile is incremental, iterative, and fast.

Agile methodology focuses on delivering smaller pieces of work regularly instead of launching the entire software at the end. Hence it adapts to changes and earns customer satisfaction by delivering early.

How does Agile work

More than a methodology, Agile is a mindset. The whole software is split into multiple features or modules. Each module is developed in an iteration which usually takes 2-4 weeks. Teams work simultaneously in all the stages, one team plans while the other team designs, develops, or tests. The idea is that no person in the project sits idle.

The team goes through a series of iterations. One feature is developed, tested, and released in a single iteration. It is also possible for parallel development.

Advantages of Agile:

  • Rapid development and frequent feature releases.

  • Bugs are detected at the earlier stages and can be fixed earlier.

  • Parallel development.

  • Suitable for projects where requirements change.

  • Promotes collaboration between teams enabling cross-training.

Scrum Framework

Scrum is a project management framework used by the products or applications developed based on Agile methodology. It promotes collaboration among teams thus emphasizing teamwork. Scrum depends on self-organizing teams. Each team organizes and manages its work through various principles, tools, and meetings.

Regular meetings, called stand-ups where teams decide on the tasks to work on and assign among the team members. Also, teams track their progress in these stand-up calls.

Scrum uses the following terms:

Sprint: The time during which a feature is developed. Once a sprint is completed, the next sprint starts immediately.

Product Backlog: A list of all the features in the software. New items may get added or deleted.

Sprint Backlog: Features that are selected for a specific sprint.

Increment: The list of all completed product backlog items.

Product Owner: A middleman between the customer and the scrum team. He also acts as a bridge between the teams (development, testing, and operations). He takes care of the business aspects of the project.

Scrum Master: Leads the scrum team. Responsible for ensuring everyone understands the scrum and follows the practices and rules.

Agile-Scrum-CI

The agile methodology follows the scrum framework to develop features quickly and deliver frequently. Agile splits the entire software into various modules which are developed individually. Once a module is developed, it is tested and merged with the central repository or the branch where the previously built working modules reside. This process is done regularly - the team selects a module, writes the code, tests it (unit test), integrates or merges with the integration branch, and tests again (integration-test). This process is called Continuous Integration.

Continuous Integration is the software development practice where the developers frequently merge their code with the integration branch or central repository. The goal is to find and fix bugs quicker and release new software features or updates thus reducing the time. CI helps Agile methodology achieve its goals of delivering software frequently. A CI tool automates the steps involved in the process. One of the most widely used CI tools is Jenkins.

On the other hand, Continuous Deployment is the practice where the code packaged at the end of the CI phase is automatically prepared for a production release. It uses automation to speed up the software release process.

Automating the entire CI and CD processes by linking the two is called a CI/CD pipeline. A pipeline is a sequence of steps executed to build, package (CI), and deploy (CD) the software.

In conclusion, Agile came into the picture to reduce the time to build software by breaking it into smaller pieces. Continuous Integration helps automate the build, test, and integration stages.

This is my understanding of the CI/CD process. Let me know in the comments if anything is wrong.

Happy Learning!