Topic Hub

Testing And Software Delivery

Software delivery is safe only when teams can explain what a release proves, what it changes, and which old behavior still has to work while the rollout is in progress. Tests, contracts, feature flags, API versions, and database migrations all exist because production cannot change in one clean instant.

This hub collects CodeNotes articles about shipping software without treating a green build as the end of the reasoning: testing real request paths, protecting client contracts, making deliberate incompatible changes, controlling temporary rollout branches, and migrating live data while multiple versions still overlap.

Read By Problem

Start from the delivery risk in front of you, then follow the guide that helps prove, stage, or roll out the change safely.

Core Testing And Delivery Guides

These articles are grouped by the delivery question they answer: what behavior has actually been proven before release, and how a live system changes without forcing every client, instance, and row of data to move at once.

Prove Behavior Before Release

Start here when a green build is not enough and you need evidence about real request paths, compatibility, or production-shaped failure modes.

Why Tests Pass but Production Still Breaks

Understand the gap between a passing suite and production conditions such as retries, concurrency, dirty data, rollout state, and partial failure.

Tests can pass while production still breaks when the suite proves the intended path but misses retries, concurrency, dirty data, rollout state, or ambiguous dependency behavior.

How to Write API Integration Tests

Test real API request boundaries across authentication, persistence, transactions, duplicate requests, concurrency, and response contracts.

A practical guide to API integration testing with real request boundaries, auth, persistence checks, failure cases, idempotency, concurrency, and response contracts.

API Contract Testing: Prevent Breaking Clients Before Release

Catch accidental request, response, error, and schema incompatibilities in CI before existing clients receive them.

How API contract testing catches breaking request, response, error, and schema changes before release with OpenAPI diffs, consumer examples, and CI compatibility checks.

Change Systems Without A Flag Day

Use these guides when software must evolve while old clients, old code, live data, or rollout controls remain in use.

API Versioning Without Breaking Clients

Plan intentional API incompatibility through compatibility rules, parallel versions, migration windows, telemetry, and sunset signals.

How to version APIs without breaking existing clients, including compatibility policy, breaking-change examples, staged v1 to v2 rollout, deprecation headers, telemetry, and release gates.

When Feature Flags Increase System Complexity

Keep deployment controls from becoming permanent hidden branches through lifecycle rules, ownership, tests, and cleanup.

How feature flags grow from safe release controls into hidden complexity, and how lifecycle rules, ownership, tests, and cleanup keep them contained.

Safe Database Migrations in Production

Move schema and data safely through expand-and-contract, compatibility code, resumable backfills, staged constraints, and rollback planning.

A practical rollout plan for safe database migrations using expand-and-contract, phased constraints, resumable backfills, rollback planning, and production monitoring.

How These Topics Connect

Integration tests prove behavior through real application boundaries. Contract tests protect the assumptions existing clients build against. Versioning handles the incompatible changes a compatibility check cannot remove. Feature flags let a team separate deployment from release, but only while their combinations and cleanup stay controlled. Database migrations apply the same compatibility discipline to live data and running application versions.

The common thread is delivery under overlap. Production always contains something old while something new is arriving: a client, an instance, a message, a flag state, or a database row. Reliable delivery means testing and planning for that overlap instead of discovering it after release.