Continuous integration icon

Test early, collaborate easily, deploy often

Today’s most sophisticated, engaging apps are built and deployed using modern development practices. These include optimized processes and workflows that increase developer productivity, efficiency, and speed, as well as improve app quality. Adoption of agile development practices and distributed version control systems have now become widespread. To complement these, a new practice has emerged—continuous delivery (CD)—that enables teams to streamline the app release process.

Continuous delivery features short release cycles, automation, and a direct connection to the source code repository. It's designed to enable teams to get incremental app updates to production quickly and safely. A successful CD process aligns an organization’s technology, processes, people, and culture so that deployment becomes a streamlined, automated activity.

With continuous delivery, businesses and end users benefit from faster delivery of new features, as well as increased app quality due to early testing and bug fixes. For development teams, code stays clean and at a releasable state at all times. The backlog is also manageable and deployment becomes a painless, low-risk process that can happen whenever needed.

Foundations of continuous delivery

A successful continuous delivery practice is founded on three core components that will help teams produce the best results.

Configuration management

When practicing continuous delivery, it’s vital that development teams establish a process and agree upon a common set of tools that ensure consistency across app performance, function, and user experience. Configuration management enables version control of all the parts of the CD process, such as source code, databases, documentation, test and deployment scripts, and app configuration information. Developers can then reproduce an environment when needed, and trace all dependencies used to re-create the environment. Having one source of truth—and a reliable one—provides a stable foundation on which to build a smooth deployment pipeline.

Read more on managing multiple environments >>

Continuous integration

In complex apps, changes that may seem simple and self-contained can actually produce unintended consequences. Multiple developers may be working in parallel on multiple code branches in isolated environments. When changes are merged to a common master branch, unpredictable results can occur. This often means multiple rounds of regression testing and bug fixes. Continuous integration (CI) is a component of the continuous delivery process that enables developers to integrate their updates into the master on a regular basis. With CI, automated tests before and after the merge validate that no bugs have been introduced.

See Heroku Add-ons for CI >>

Automated testing

Traditionally, testing has been done manually after code is “dev complete” to ensure that any changes don’t break the app or its systems. However, manual regression testing is time-consuming, costly, and prone to human error. Moreover, QA teams have to spend considerable time and effort keeping test documentation up to date. With continuous delivery, many different tests are run throughout the process. Some are automated, such as unit tests. Others, such as usability/acceptance testing, are still performed manually. The goal is to bring all testing into the CD process from the beginning of the delivery lifecycle, and automate repetitive tasks as much as possible. This allows developers to focus on coding and improving the app.

See Heroku Add-ons for Testing >>

Benefits of continuous delivery

With continuous delivery, app releases become more like a drumbeat than a big bang. The practice offers a steady stream of benefits to engineering organizations, end users, and business stakeholders—without the disruption of the traditional release process.

Higher quality apps

Less time on repetitive processes means that developers can spend more time and attention on creating quality code, which inherently reduces bugs and issues. A regular release cadence allows product teams to loop in user feedback along the way. This helps further hone the app’s feature set and user experience, and increases customer satisfaction.

Faster time to market

Continuous delivery enables a business to stay competitive by delivering new app features and updates into the hands of customers more quickly. Engineering teams can be more responsive to changing business needs and market trends, better manage their backlog of features, and are more able to release app fixes as soon as needed.

Improved team productivity

Automated processes and environments reduce the time and expense of traditional manual testing. This allows app developers to focus on what they do best: development. Teams work at a faster pace, deliver more value to the business, and collaborate more effectively on solving problems. All members of the project, from design to product to marketing, can see changes sooner and participate in decision making at each step of the process.

Lower-risk releases

Frequent releases allow teams to find and fix issues earlier in the development process, which means that code flaws are much less likely to reach production. The code base stays clean and at a releasable state at all times. And with continuous delivery, repeated testing of deployment processes and scripts also happens earlier, before it gets to production.

Continuous delivery success factors

For a continuous delivery practice to thrive, everyone involved in an app’s development must share the mindset and habits that contribute to a smooth process. Every member of the team—from product managers to designers to developers—is responsible for the success of their part all the way to production. A few CD best practices will help orient the team right from the beginning.

Focus on quality

Take time to define and invest in quality metrics, from unit test coverage, linting, peer reviews of code, and code styling to rules violations and complexity measurements. Create short feedback loops to quickly resolve issues and bugs as they arise. This will help developers produce higher-quality code throughout the process, and fewer issues will be found later on when it’s more difficult and expensive to fix.

Stay production-ready

A feature is only “done” when it’s made its way to production. This implies ownership of a project right up until it’s in the hands of the user and working properly. Checking the code back to a version control system does not mean it is done! Even if the product is not ready for release, keep the code in a releasable, production-ready state.

Automate where possible

The software release process should be repeatable and reliable by investing in automating repeatable tests and tasks. Manual process can hardly be labeled as reliable, no matter how carefully they are set up and done. A build or set of builds with different types of tests that runs multiple times per day, in different environments is an automated workflow that can take many hours to do manually, or even impossible to do without an automated CI process.

Improve with continuous feedback

Be sure to get continuous feedback and monitor technical metrics, user experience, and all key stages of an application lifecycle, from development to production. This helps improve things at earlier stages of the process, requiring less time, energy, and cost. Smart monitoring and an established continuous improvement process helps teams release in shorter cycles with less risk and better quality.

When starting a new continuous delivery practice, persistence is key—it does get easier with every release. As teams become more familiar with CD, new opportunities arise to automate tasks and make the process even more efficient. Building and preserving a CD culture might be challenging in the beginning, but support from senior management and an enthusiastic advocate with CD experience will certainly help.

How continuous delivery works

At the heart of continuous delivery lies a basic branch-and-merge workflow. Multiple developers each work on their own code branch, share changes for peer review, feedback and approval, and seamlessly merge their updated code into the master branch. The process is straightforward and efficient, easily keeping pace with the speed of the team.

Continuous delivery on Heroku

The Heroku platform is designed to maximize developer productivity and provide a great developer experience, from an app’s first build to production and beyond. As part of this focus, Heroku extends the platform with a range of tools that support modern development practices, such as continuous delivery.

Heroku development teams can take advantage of a unified environment for the setup and management of their CD workflow, along with a CD toolkit that’s seamlessly integrated into the platform experience. This amplifies the inherent benefits of continuous delivery, enabling developers to ship releases even faster, more easily, and at scale.

Heroku Flow—app-centric, optimized.

Heroku Flow is a structured deployment workflow that combines tight integration with GitHub, visually presented pipelines, and disposable “review apps.” Heroku Flow is designed to streamline the app release experience by making continuous delivery easy, visual, and efficient.

The components of Heroku Flow include:

Heroku Pipelines
Heroku Pipelines

Heroku apps that share the same codebase can be organized into deployment pipelines, easily promoted from one stage to the next, and managed through a visual interface.

Heroku Review Apps
Review Apps

Developers can spin up a temporary test app for teams to review, discuss, and decide whether to merge changes to their code base during development.

Heroku GitHub Integration
GitHub Integration

Tight integration between a Heroku app and its GitHub repo enables automatic or manual deployment of merged branches, with notifications in both GitHub and Heroku.

Explore Heroku Flow

  • For us, it’s all about agility. We employ continuous delivery methodologies, and we’re very test-driven. Heroku was not only a great fit for our workflow, but the platform made our developers happy.

    Scott Raio Co-Founder and CTO, Combatant Gentlemen Read customer story >>
  • We started using Heroku Pipelines as soon as it was released and now we use it for continuous delivery of all our microservices.

    Rob Adams Engineering Manager, ZeroCater Read customer story >>