During the time between development of a product or feature and the release of that product or feature, no value is being received by the organization or its customers. Code developed but not yet released is inventory sitting in the warehouse. The ideal organization minimizes this waste by delivering frequent iterative updates.
Automating Testing and Deployment
The Ideal State Organization streamlines the release of software by implementing a high degree of automation during testing and deployment. This automation may be augmented by human oversight, but as an organization’s Continuous Delivery Mindset matures, the human overhead is greatly reduced.
This automation may be coordinated by a standalone server such as Jenkins, Bamboo, or TeamCity, or via a continuous integration service such as Travis CI, Circle CI, or Codeship. Some automation may rely on other software and services such as Chef or Puppet. Automated processes should include some or all of the following:
- Unit testing
- Syntax and style testing
- Code quality and security testing
- Functional testing
- Smoke and load testing
- Production deployment processes
The shift toward dynamic infrastructure has taken many different forms. While hardware virtualization solutions have been around for decades, application virtualization and containerization approaches have matured greatly. A majority of the modern players in PaaS (Platform as a Service) are relying on container solutions like Docker and Cloud Foundry’s Garden. While these approaches differ greatly, the core concept is the same: encapsulating an experience in a portable unit which is decoupled from a physical server.
In most cases, organizations choose to adopt a cloud-based or hybrid-cloud implementation for their dynamic infrastructure. For most organizations, that means building a relationship with at least one of the top four cloud providers: Amazon Web Services, Microsoft Azure, Google Cloud Platform, and/or IBM Bluemix. The goal of leveraging one of these providers is to allow you to scale and provision almost instantly—to decouple that process from the traditional hardware acquisition and installation process.
Infrastructure as Code
At its core, an organization that successfully realizes the Continuous Delivery Mindset is one that has mastered the science of automation. While many organizations have automated pieces of the development, testing and deployment workflow, few have scripted the entire process.
In today’s rapid innovation climate, successful organizations are treating infrastructure in the same way they are treating their code. Solutions like Ansible, Terraform, Chef, Puppet, and AWS CloudFormation provide the ability for organizations to maintain every detail about infrastructure in a set of files that can be versioned. In this manner, environments can be provisioned and destroyed as needed with the assurance that each environment created with the same code will be identical.