---
title: "When Code Ships but the Database Doesn't: The Nine-Day Cost of Incomplete Releases"
canonical: https://dxdev.com/blog/half-shipped-release-breaks-downstream/
datePublished: 2026-08-14
---
A season update on a test site took 39 seconds. After the fix it took 2.5.

The fix had shipped nine days earlier. The code change went live, but the database script it depended on was never run.

## Copying without removing

A league rollover copies the previous season's games into the new season. The new code depended on the database script. Without it, rollovers kept copying games and never removed the originals.

The code had shipped and the database script had not run.

## Measuring after the script

I applied the missing script. On a test site the update dropped from 39 seconds to 2.5.

Then came the damage. Seventeen leagues were left stuck. Their rollovers were then completed with the script in place, and the count of duplicated games went from 6,195 to 10. The 10 that remain are unrelated old rows.

## What "fixed" should have meant

I filed three follow-on tickets out of this. The lesson is narrower anyway. When a code change depends on a schema change, both halves have to be confirmed in production, and "fixed" should mean the second half ran.

For this bug, the check would have been two questions. Did the script run against the production database? Does the behavior it enables show up in a measurement? Here that measurement was 39 seconds against 2.5.
