Trends in building software products, services and solutions indicate that release cycles are becoming increasingly faster to keep up with customer demand, market competition, and technology innovation. Businesses that are not able to deliver with agility and quality fall behind.
What businesses are seeking is a platform, a robust assembly line-like process, to accelerate delivery to customers. All while minimizing human error, and maximizing efficiencies through automation, but with enough transparency, control, and governance through all the activities.
Let’s look at some common constraints that keep organizations from delivering weekly, daily, or even hourly to their customers. We can categorize them at three levels:
- Quality assurance operations: Relying on prolonged manual testing as opposed to building a robust, automated suite for acceptance testing.
- Infrastructure management: Manually procuring physical servers, requiring multiple approvals, and then manual configuration. Organizations have not embraced virtualization or cloud-based infrastructure.
- Release management: Multiple people from different teams collaborate using a long checklist of manual tasks making go-live error-prone.
- Release planning and readiness: Tollgates, governance, and executive approvals are manual and the readiness communicated can be inaccurate due to limited real-time visibility to actual product status. Releases become high risk.
- Department agility: Within the organization, various groups can be at different stages of operational maturity when delivering to their customers. Dependencies on components with larger release cycles result in slower product releases.
- Organizational silos: Centralized functions, such as release execution, quality assurance, database or systems administration, mandate their own checklists before releasing the product, thus becoming bottlenecks to rapid deployments.
- Portfolio coordination: Finding release windows can be difficult, maintenance, “black-out dates”, etc.
So what is continuous delivery? Continuous delivery starts with a holistic view of all processes. It aims to optimize time between production releases, while minimizing risk by relying on automation. It is catching on as a best practice that unites teams around technology and organizational understanding.
Continuous delivery is not an overnight achievement, or a single off-the-shelf application that can guarantee immediate cost savings or skyrocketing revenues. Maturing into continuous delivery is non-trivial. Technical and business teams must re-examine the organizational culture before any benefits can be gained.
Continuous delivery consists of multiple processes, each mature enough to be represented on a release automation platform:
- Team operations based on agile execution. To quickly build increments of functionality.
- Continuous integration to allow multiple teams to contribute in parallel, and check code health.
- A robust automated test suite (unit, regression, functional) to certify the product across all environments.
- Management of infrastructure as code. Automated provisioning, installation and configuration of all full-stack, workstations and environments.
- A release automation workflow that integrates the steps above, visualizes, and controls the assembly line.
Core concepts deserve a closer look:
- Infrastructure as code: Management of servers and virtual machines should be done programmatically, similar to application source code. This includes all provisioning, installation, and configuration tasks that make a full stack environment ready for deployment. Business functionality can be automatically reconstructed from code repository, data backup, and procured resources. Manually installing, configuring, and fine-tuning a server is not acceptable anymore.
- Release automation pipeline: Production releases rely on deep organizational and technical understanding of all tasks that make the product available to customers. Tools exist that can programmatically represent each of these tasks into a visual workflow: Starting and stopping servers, installing components, creating file structures, copying artifacts, executing tests, doing cleanup tasks, etc. Supplementary utilities provide visibility, role-based access, governance, change management, incident management, monitoring, alerting, and reporting. Teams gathering on conference calls, doing all-nighters manually stepping through long lists of tasks and instructions will be a thing of the past.
- Enterprise architecture: Architecture is critical in delivering new products with speed and quality. Enterprise architecture, followed as a best practice, plays an integral role to continuous delivery. Architecture adheres to the paradigm of improving efficiencies, and accelerating development tasks. It is responsible for establishing and enforcing technology standards and guidelines across the organization. It improves testability, predictability, and collaboration among multiple teams who are working on the same product.
Continuous delivery is the next step to the completely “version-controlled business”. It minimizes waste through automation, and enables practicing agile methodologies at scale. It is new and is catching on. It brings value but it can be challenging to achieve. It requires investment, which comes with payoff.
Image shared by Vlasta Juricek