For many, the process of manually developing and deploying software to production is archaic at best. Even in highly automated software development environments, at least one developer (although often more) typically manages modifications to code and software products, and the ramifications of these modifications can be extensive or unknown. Manual or no code analysis allows technical issues to accumulate. Manual testing often misses regressions, manual infrastructure management introduces anomalies in environment configuration, and manual deployments introduce risks. In short, manual practices cost you time and money.
The emerging process for developing and deploying applications of high quality is one that is highly automated, executing continuously, and covers the entire development process, from modifying code through testing to deployment. Automation provides analysis that flags code for improvement and executes full regression tests every time a modification is made. Automation creates consistent environments and deploys code automatically to complex environments, handling all dependencies. In short, automation saves you time and money.
This process is called continuous delivery, and automation is a key component of a mature continuous delivery process, which includes: continuous integration, infrastructure automation, and release automation.
What Is Continuous Delivery?
Continuous delivery is a practice for developing software that focuses on automation and process improvement. Rather than the business using an assembly line of skilled technicians to manually develop, test, and deploy code, continuous delivery uses automation to continually:
- Perform code analysis, unit tests, and integration tests (continuous integration).
- Provision servers, configure them, and manage dependencies (infrastructure automation).
- Deploy software applications to the production environment (release automation).
The continuous nature of continuous delivery is based on automatically triggering these process components whenever modifications occur in your project. All of these steps can be executed several times daily or even hourly. Even larger companies such as Amazon (every 11.6 seconds!), Facebook (at least twice a day), and Netflix (a hundred times per day) are deploying software this often.
Developers receive nearly instant feedback on the state of the application, allowing them to react quickly to bugs and improve the development process. The heavy use of automation in continuous delivery has pros and cons, however. Let’s take a closer look at them.
Streamlined Workflows. Continuous delivery provides efficiency and accuracy through automated tasks that perform the same way every time. You can configure these tasks with dependencies that you place within a workflow. For example, you can configure the tasks in a continuous delivery process to perform a system test only after you have received approval from a subject matter expert.
Lower Staffing Costs: With the addition of automation, team members perform fewer manual steps, instead moving to roles that provide greater value; similarly, teams can be streamlined to eliminate redundant roles. Depending on the size of the team, the cost savings can be significant—without compromising the quality of the end product.
Confidence in Your Operations: Continuous delivery provides confidence because the processes are executed efficiently and consistently every time. Ongoing improvements to the continuous delivery process enable business agility while maintaining stability. Shortfalls can easily be identified and corrected because feedback for changes is immediate. You can adhere to regulatory standards with consistent process and meet SLAs through monitoring.
Enhanced Teamwork: With automated processes handling the brunt of the work, the IT team is free to focus on the unique activities of your organization that provide business value. Software developers, application integrators, and testers can work more collaboratively with the business to deliver software because automation and processes allow them to spend less time working in the trenches.
Faster Iteration: When time is of the essence, heavily automated processes make the solution viable. By streamlining the steps of the process, continuous delivery results in shorter processing times.
Initial Cost: The initial installations, configurations, and team changes are not without cost. These elements cost real time and money and, in the beginning, can create disruption. The business must invest the time required to initialize continuous delivery, making sure the customizations for business objectives and infrastructure operations are in place and operational.
Organizational Culture Considerations: If the business is accustomed to developing software using waterfall, spiral, or other methodologies, it must overcome the learning curve before implementing continuous delivery. From training staff to tweaking processes, the organization must maintain existing operations during the transition to continuous delivery. Some team members accustomed to being more “hands on” may mistrust the heavy use of automation that continuous delivery entails. The key is to work with experts to help ensure success. Successful outcomes at the onset will build confidence in the process and reduce skepticism.
This article discussed some of the benefits and barriers of using the automation that is key to three of the phases of the continuous delivery process. Even taking into account the initial investment and the cost of introducing organizational changes, the benefits of following a highly automated continuous delivery process far outweigh the costs.
To learn more about continuous delivery, see the Zend Blueprint for Continuous Delivery. There, you will learn more about how your organization can adopt continuous delivery to realize its benefits.
- Check out The Computer Weekly Application Developer Network article, Is “Continuous Delivery and Integration” a Developer No-Brainer?
- Read the article, Why Continuous Delivery and BDD play so nicely, which encourages developers and teams to share and integrate their contributions continuously.
- An interesting read on continuous delivery and the agile iterative process is the Testing the Mind blog entry, Choosing Continuous Delivery.