Continuous Integration and Deployment in Agile

Basab Dey

March 17, 2020

Continuous Integration and Deployment in Agile

Software drives many critical functions within an organization and as an application becomes more complex, it’s difficult to rein in the many changes, bug reports, new feature deployments, and contributors to the codebase.

These challenges are why development teams have adopted Agile methodologies, which can streamline the software lifecycle and offer continuous integration and delivery without the limitations imposed from previous ways corporations managed development.

Waterfall Methodologies are No Longer Optimal for Development

When you hear about Agile, you usually hear it compared to older Waterfall methodologies. Waterfall methods were popular—and still are with some projects—when the software was less complex and continuous integration wasn’t an issue. Older applications had a smaller codebase and only a few dozen features, and the quality assurance (QA) people could test it soon after it was developed.

Waterfall methodologies are still useful for small projects in which only a few features are developed into the application, and very few changes are made in future versions. Small projects with few changes don’t usually need continuous integration, and every phase of the lifecycle (e.g., design, development, testing) only needs to be done once before deployment. An application’s development success also relied on a small scope that was well defined during the design phase, with limited changes to scope during development.

To avoid common pitfalls with Waterfall, project managers, engineers, and other gurus came up with several methodologies and practices that speed up new development, versioning, and bug fixing. Continuous integration (CI) and continuous deployment (CD) along with Agile eliminate many of the old-school Waterfall disadvantages and add efficiency and speed of deployment to the software lifecycle.

What is Continuous Integration and Continuous Deployment?

Continuous integration (CI) is the process of taking newly committed code and automatically adding it to a testing and staging environment for QA. The testing phase could be automated or manual. In many organizations, both automated and manual tests are used to validate software version stability before deploying it to production. Deploying buggy code loses customer trust, so several tests are done before code is sent to production. This was traditionally done after developers uploaded code to a testing environment, but CI does this as new code is added to the main repository.

Continuous deployment (CD) adds an additional step to the automation process where code is sent to production after it passes a series of tests. Only if testing fails will code be sent back to developers, and the automation process will remove it from the next deployment. Once developers fix any issues, the process is repeated until it’s finally sent to production. With both CD and CI, integration of the latest software upgrades happens faster, are seamless to your users, and help development teams become more agile.

How Continuous Integration and Deployment Increases Efficiency

Every application starts with an idea and goes into development with (hopefully) a plan. Even the simplest software could be subject to a lifecycle with revisions and improvements added in future versions. CI and CD make these versions happen faster with less effort required from the development team so that they can focus on the code.

Faster versioning and upgrades happen due to the nature of CI and CD. After a developer commits code changes, a build is automatically executed that creates a test version of the application. Testing is automated (unless the organization chooses an additional manual testing step), and a “Success” or “Fail” message is generated. If the message is “Success,” CD automation takes over and deploys changes to production. If a “Fail” message is presented, notification to developers, leads, and any managers is sent. This lets them know that testing failed and why so that they can continue to improve the code until it passes QA tests.

The key to both CI and CD is automation, but each step in the lifecycle will seem familiar to a development team that has their process already in place.  The steps in CI and CD are as follows:

  1. Build and compile code committed to the codebase by developers.
  2. Run unit tests on the code to find errors.
  3. If no errors are found, move the code to a staging environment.
  4. Tests are again run against the codebase using scripted tests, manually tested, or both.
  5. If CD is also a part of the environment, then the tested code is deployed to production.

If any of the testing steps fails, automation stops at the point where errors were found, and developers are notified that their code must be revised. Note that continuous deployment is different than continuous delivery because continuous delivery uses manual deployment to upload changes to production, but continuous deployment automates this step.

For the best and fastest software lifecycle, developers aim to integrate continuous deployment into their process to make it more efficient. However, with large version changes, a development team might opt to manually deploy to production instead. There could be additional steps to deployment for large version changes (e.g. a one-time server configuration changes), or changes might need QA approval from a stakeholder before they are considered complete.

Before Using CI and CD, Understand the Pitfalls

Before getting into Agile methodologies and continuous integration and deployment, it’s important to recognize when these procedures aren’t viable for your project or when they could damage the end-product.

If an application already requires heavy maintenance and bug fixes, CI and CD could become too much overhead. For example, if your application becomes very complex, has several moving parts, and developers cannot take the time to fix issues found with automated tests, it might be better to focus on fixing all bugs and then deploying after they have all been resolved.

Extremely small projects might also not benefit from CI and CD. They could still benefit from Agile, but CI and CD might be too much overhead for small projects. For instance, if you have a simple one-screen desktop application that only performs a few functions, it might not make sense to include CI and CD.

Adapting to Agile and Continuous Integration and Deployment

A simple way to describe Agile is that it has the main components of Waterfall methodologies, but these phases are broken down into sprints and allow for flexible changes during development. These sprints break down development into small sections where each developer works on a section that could take anywhere from a few hours to several weeks to complete. After a component is completed, it’s sent to QA for testing. After testing, a project manager reviews results with stakeholders who either sign off on progress or ask for changes. If changes are required, the section of the application is sent back to developers to design requested changes into each feature. With Agile and large applications, the development lifecycle may never have an ending as features are always in the process of being designed, developed, tested, tweaked and deployed continuously.

Continuous integration and deployment are a critical part of Agile methodologies when flexibility and speed are necessary for an application with frequent changes and many deployments. Most development teams take parts of Agile and compile their version of it, but continuous integration and deployment are always the foundation for successful implementations. By using Agile for continuous integration and deployment, the development team reduces risk, speeds up every aspect of development, and becomes flexible to changes to satisfy stakeholders.

If your team isn’t already using Agile, converting to its methodologies takes some time and planning.  It’s much different than Waterfall and takes more team effort and collaboration. Scrum and Agile are often conflated, but you do not need to hold Scrum meetings in addition to following Agile procedures. Scrum is often combined with Agile with large applications to ensure development success, but it’s not necessary. Every development shop has its Agile hybrid system that works for the team.

The most notable phase in Agile is designing an app step where Planning Poker creates a game out of time and effort estimates. In this phase, cards are given to each developer with numbers that represent the effort required to complete a component of the application. A component is presented to developers, each developer plays a card and the effort card played the most is voted in as the dedicated hours needed to complete the application component.

After effort is established, sprints are created by a project manager or lead developer. Sprints are broken down into days, weeks, or months depending on the development effort translated into the number of hours. After each sprint, the developers meet to discuss their progress with the same lead or project manager (PM). The lead or PM can then create spreadsheets and graphs that let key stakeholders know the progress of the application and estimate a time for delivery. Specifically, a PM creates a Burndown Chart that displays team velocity, which is the amount of effort completed and the pace at which a project is developed.

During sprints, the development magic happens but no lifecycle would be complete without testing. After a developer completes a sprint, the result is sent to QA where testing is done either using scripts, manual testing, or both. If all is good from testing, it’s sent to deployment. Specific deployment days can be scheduled, but continuous integration releases updates as developers complete them. Continuous integration speeds up development so that business stakeholders no longer need to wait for the rest of the application to be finished before seeing results.

With continuous integration, a truly Agile development team can offer continuous deployment. This step takes more organization, testing, and most of all automation of the deployment process. In traditional development, deployment days are once a month or (at most) once a week. Continuous deployment automation updates applications after they pass QA. Instead of getting updates every few weeks, stakeholders have immediate changes uploaded to the application rapidly with little effort from developers who traditionally must back up, upload and review changes after deployment.

Continuous Integration Means Better Performance and Productivity in Software Development

Combining Agile and continuous integration takes time for a team to adapt, but overall it benefits the organization and its requirements to rapidly change due to technology’s fast-paced industry movements. Agile is the foundation for how development gets done, and continuous integration accounts for rapid changes in an application’s design and features.

If your team hasn’t already implemented continuous integration and Agile, it’s missing out on a success rate of two times more than traditional methods. Taazaa being a reputed software development company incorporates both Agile and continuous integration to ensure all customers and their respective organizations achieve flexibility in software design, better communication among stakeholders and developers, and continuous migration of new software for increased staff productivity and sales.