Delivery In Practice

Delivery turns Features into working, released software. The guide covers the Delivery Cycle structure. This page covers how to choose techniques within each phase.

Relationship Map

Delivery has four sub-phases. They run in sequence with feedback loops:

Build → Verify → Review → Release
  │        │         │        │
  │ code   │ tests   │ demo   │ deploy +
  │ done   │ green   │ retro  │ release
  ▼        ▼         ▼        ▼

Feedback: Build ← Verify (test failures → rework)
          Build ← Review (demo feedback → rework)
          Build ← Release (production bug → incident fix)

Default Path + Branching

Default — routine delivery:

Build (TDD + CI gates) → Verify (automated acceptance tests)
  → Review (demo + retro) → Release (feature flag + Go/No-Go)

Complex or critical code:

Build (TDD + Pair Programming + CI gates) → Review (same)
  → Release (canary deployment)

Small, safe change (remote team):

Build (async Code Review + CI gates) → Verify (automated only)
  → Review (async demo recording, no retro) → Release (standard)

Pre-PMF / rapid prototyping:

Build (AI-assisted + CI gates only) → Review (no retro)
  → Release (no gate, skip flags for invisible changes)

Pure maintenance:

Build (CI gates only) → Verify (regression tests) → Review (no demo)
  → Release (standard)

Build Phase

Role Map

ActivityPrimarySupportsWhen
TDDSoftware EngineerPair partnerNew logic — default
Pair ProgrammingSoftware Engineer (pair)—Complex or critical code
Code Review (async)Software Engineer (reviewer)AuthorSmall changes, remote teams
AI-assisted prototypingSoftware Engineer—Boilerplate, test generation
CI pipelinePlatform EngineerSoftware EngineerEvery commit
Security scanningSecurity EngineerSoftware EngineerEvery commit (automated)
Feature flag creationSoftware Engineer—Every user-facing change
Tech debt refactoringSoftware Engineer—After release or when debt blocks speed

Technique Table

TechniqueUse WhenOutputSkill
TDD (Red-Green-Refactor)Behavioural correctness matters — defaultPassing tests, testable designNot available — a practiced skill
Pair ProgrammingComplex or critical code; learningShared knowledge, fewer defectsNot available — human interaction
Code Review (async)Small changes, remote teamsReviewed code, knowledge transferNot available — served by PR tooling
AI-assistedRapid prototyping, boilerplateFaster output; review requiredReferenced in wiki agentic practice

Quality Gates (every push, automated)

GateWhat It ChecksOwner
Unit testsIndividual functions and methodsSoftware Engineer
Integration testsComponents work togetherSoftware Engineer
SASTCode-level security and qualitySecurity Engineer
SCAKnown dependency vulnerabilitiesSecurity Engineer
Secrets scanningCredentials in codeSecurity Engineer

Zero manual gates for routine changes.

Verify Phase

Role Map

ActivityPrimarySupportsWhen
Acceptance testing (automated Gherkin)QA EngineerSoftware EngineerEvery cycle
Security gate verificationSecurity Engineer—Every commit (automated)
Regression testingQA EngineerSoftware EngineerBefore release
IaC testingPlatform Engineer—Infrastructure changes
Agentic evalsAgent OrchestratorQA EngineerAgent-based features
Manual exploratory testingQA Engineer—Complex UI or edge cases only

Technique Table

TechniqueUse WhenOutputSkill
Acceptance Testing (Gherkin)Default for any non-trivial StoryPassing/failing acceptance testsNot available
Security GatesEvery commitSAST, SCA, secrets scan resultsAutomated tooling
Regression TestingBefore every releaseRegression test resultsNot available
IaC Unit & Contract TestsInfrastructure-as-Code changesModule-level verificationNot available
IaC Integration TestsMulti-module infrastructureCross-module verificationNot available
IaC Policy as CodeCompliance requirementsPolicy compliance reportNot available
Agentic EvalsEvaluating AI agent behaviourAgent performance metricsNot available

Procedure Table

ProcedureWhat It DoesWiki Link
Execution LoopPer-task build cycle: pick task, TDD, CI, commit, loopquality/procedures/execution-loop.md
Implementation PipelineIntegrate → accept → review → gate → shipdelivery/procedures/implementation-pipeline.md
Setup Test RunnerConfiguring the test frameworkquality/procedures/setup-test-runner.md
IaC CI PipelineCI for infrastructure codetesting/procedures/iac-ci-pipeline.md

Review Phase

Role Map

ActivityPrimarySupportsWhen
DemoSoftware EngineerProduct OwnerEvery delivery batch
DORA metrics reviewEngineering LeadWhole teamEvery review
Design quality reviewEngineering LeadSoftware EngineerEvery review
Retrospective facilitationRotating team memberWhole teamEvery cycle
Action item trackingOwnerProduct OwnerAfter retro

Retro Technique Table

TechniqueBest ForDuration
Start/Stop/ContinueGeneral-purpose30-45 min
SailboatFinding accelerators and blockers45-60 min
4Ls (Liked/Learned/Lacked/Longed For)Balanced view30-45 min
TimelineIncidents or high-change iterations45-60 min

Procedure Table

ProcedureWhat It DoesWiki Link
Retrospective (coming)Set stage, gather data, generate insights, decide actionsWiki — planned
Iteration Review (coming)Demo, DORA review, design quality, retroWiki — planned
Implementation PipelineIncludes async engineer review stepdelivery/procedures/implementation-pipeline.md

Release Phase

Role Map

ActivityPrimarySupportsWhen
Go/No-Go decisionRelease OwnerQA Engineer, Product OwnerBefore flipping the flag
DeploymentPlatform EngineerRelease OwnerAfter Go decision
Feature flag enablementRelease OwnerSoftware EngineerBusiness decision
Canary analysisSREPlatform EngineerAfter canary enablement
Rollback (if needed)Platform EngineerSREIf metrics degrade

Deployment Strategy

StrategyUse WhenRollback
Feature Flag (off by default)Default for user-facing changesFlip flag off
CanaryGradual rollout; moderate riskStop canary, redirect traffic
Blue-GreenZero-downtime requiredSwitch traffic to old environment
RollingStateless servicesRevert deployment

Skip Feature Flag when: Change is invisible to users (refactor, performance fix, logging) or pre-PMF shipping to <100 users.

Go/No-Go Gate

DomainCheckOwner
EngineeringStable? Rollback plan verified?Release Owner
QAAcceptance tests passed? Flag behaviour verified on and off?QA Engineer
SecurityScan passed (SAST, SCA, secrets)?Security Engineer
BusinessMarketing, docs, support aligned?Product Owner

Skip the gate for: Low-risk releases (feature flag, dark launch, internal tool). The gate prevents disaster. It does not add ceremony to safe changes.

Artifact Table

ArtifactProduced InConsumed ByFormat
Task SpecificationWork ItemsBuild PhaseInputs, outputs, constraints, DoD
Test ResultsBuild CIVerify PhasePass/fail per commit
Acceptance Test ResultsVerifyReviewGherkin scenario outcomes
DORA MetricsReviewRetrospective, Process ImprovementDeployment frequency, lead time, change failure rate, time to restore
Release Decision RecordReleaseOperationGo / Conditional Go / No-Go with rationale
Feature Flag InventoryReleaseOperation, flag removalToggle keys, status, owner

Skip Conditions

ActivitySkip When
Build
TDDTrivial change; AI-assisted prototyping
Pair ProgrammingSimple code; async review is sufficient
Code ReviewPairing already covered it; trivial change
Feature FlagChange is invisible to users; pre-PMF (<100 users)
Verify
Acceptance testingTrivial work with no acceptance criteria
Security gatesInternal-only tool, no sensitive data
Manual exploratory testingFull automated coverage
Review
DemoNo stakeholders available; internal-only change
RetrospectiveCycle is small; team discusses improvements naturally
DORA reviewNo instrumentation yet
Release
Go/No-Go gateLow-risk release (feature flag, dark launch, internal tool)
Rollback planRoutine deploy with flag — flip flag off is the rollback
Canary deploymentInternal tool with limited blast radius

If a 2-line config change needs TDD + pair programming, the process is wrong, not the developer.

Comments

Comments on each page are welcomed and are visible here and under the discussions tab of the github repository.

View discussions on GitHub ↗