openskills.info

Continuous Delivery

itDevOps and software delivery

Continuous Delivery

Continuous delivery is the capability to move changes—application code, configuration, infrastructure, database changes, fixes, and experiments—into production or into users' hands safely, quickly, and sustainably. The defining test is not how often a team releases. It is whether the software remains deployable and the team can release an approved change on demand through a reliable process.

The useful mental model is a permanently rehearsed path from version control to a releasable outcome. Every change enters that path. Fast checks reject obvious defects early; progressively broader checks increase confidence; deployment automation proves that the candidate can move through environments repeatably. A release becomes a routine decision made against a known-good candidate, not the start of a stabilization project.

Why continuous delivery exists

Traditional phased delivery accumulates work. Integration, regression testing, environment preparation, security review, and deployment are postponed until a release window. Feedback arrives after many changes have been combined, so failures are harder to isolate and fixes compete with more recent work. The release itself becomes large, rare, and operationally exceptional.

Continuous delivery reduces those batches and moves verification into daily engineering work. The team continuously demonstrates that the product and its delivery mechanism still work. This does not remove testing, controls, or human judgement. It changes when and how they operate: repeatable checks run continuously, while people focus on exploratory testing, risk decisions, usability, and other work that benefits from judgement.

The deployment pipeline

The deployment pipeline is the central organizing pattern. A change triggers a sequence of stages that provide progressively stronger evidence:

commit → build and fast tests → package → broader tests → deployable candidate → release decision

The exact stages depend on the system and its risks. A service may add contract, security, performance, and resilience checks. Firmware or a mobile application may have hardware, signing, store, or certification constraints. The invariant is that the path is explicit, repeatable, observable, and capable of producing evidence about one identifiable candidate.

Build the package once, then promote that same artifact. Rebuilding for each environment creates different artifacts and weakens the evidence collected earlier. Keep environment-specific configuration outside the package, and use the same deployment mechanism across environments so that routine non-production deployments exercise the production path.

Delivery is not deployment or release

These terms answer different questions:

  • Delivery: can the organization release a good candidate safely on demand?
  • Deployment: has a version been installed in a target environment?
  • Release: is a capability available to its intended users?
  • Continuous deployment: does every qualifying change proceed to production automatically?

Continuous deployment implies continuous delivery, but continuous delivery does not require releasing every passing build. Regulatory approval, coordinated hardware, app-store distribution, customer-controlled upgrades, or product timing may justify a deliberate release decision. The engineering objective remains the same: keep that decision independent of a fragile technical release project.

Capabilities behind the pipeline

A pipeline UI is not continuous delivery. The capability rests on mutually reinforcing practices:

  • version control for code, configuration, infrastructure, and delivery scripts;
  • continuous integration and small, frequent changes;
  • fast, reliable automated tests, plus continuous exploratory and non-functional testing;
  • repeatable environment and deployment automation;
  • artifacts that can move unchanged through environments;
  • architecture designed for testability and independent deployability;
  • production observability and rapid recovery;
  • collaboration across development, testing, security, operations, and product roles.

Weakness in one area becomes a queue elsewhere. Slow tests encourage batching. Coupled architecture creates coordinated releases. Manual environment work makes results irreproducible. A nominally automated pipeline that waits days for opaque approvals is still a long feedback system.

Risk changes shape

Continuous delivery does not make change risk-free. It makes risk smaller, more visible, and easier to respond to. Small batches reduce the number of possible causes when something fails. Automated, repeated deployments remove variation. Progressive delivery techniques can limit exposure. Monitoring verifies the result in the real environment. Recovery mechanisms—roll forward, rollback where safe, or feature disablement—bound the impact.

Deployment and release can also be decoupled. A team may deploy dormant code and expose it later through a feature-control mechanism. That technique adds its own lifecycle and testing obligations; stale flags are not a free abstraction. The point is to separate a technical installation event from a product exposure decision when that separation reduces risk.

How to begin

  1. Map one representative change from commit to production, including every wait, handoff, approval, and rework loop.
  2. Establish whether the current product is actually deployable and what prevents an on-demand release.
  3. Create a thin pipeline that builds once, runs a fast test, deploys the artifact to a test environment, and records the result.
  4. Remove the largest feedback delay or source of deployment variation.
  5. Expand tests and controls while keeping the path fast, reliable, and owned.
  6. Use production outcomes to improve both the product and the pipeline.

Do not begin by buying a pipeline tool and automating the existing ceremony verbatim. A faster conveyor belt carrying oversized, weakly tested batches is still carrying the wrong thing.

Relevant careers