Accepted Break
When two data sets that should agree are compared, each mismatch is called a break, a term from reconciliation. An accepted break is a break that a named owner has reviewed and decided to allow for a stated period. It is different from a break nobody has looked at and from a check that was loosened until it passed. In a migration, the usual cause is a deliberate or unavoidable change: a corrected rounding rule, a new timestamp precision, a field that the old system filled with a default and the new one leaves empty.
What a record contains
An accepted break is useful only if it can be audited and if it stops covering more than it was approved for. A record therefore carries:
- What is allowed: the specific check and column, not “the amounts comparison” as a whole.
- How much: a bound on the affected rows or the size of the difference, so the difference cannot grow unnoticed under the same approval.
- Who and why: an owner with authority over the data’s meaning, often the business owner of the numbers and not the migration team, and a reason that explains the cause.
- Until when: an expiry date after which the difference blocks again unless someone renews the decision. Breaks with an age and an owner stay visible; breaks without them become permanent drift.
A waiver in a comparison tool is the mechanical form of this record: it removes the named difference from the count of blocking problems. The sketch below, an illustrative implementation run with Python 3.12.14, applies a single waiver for a rounding difference that affects 2,036 lines, with a limit of 2,100 rows and an expiry date.
def blocking(diffs, today):
out = []
for d in diffs:
w = next((w for w in waivers if (w["check"], w["column"]) == (d["check"], d["column"])), None)
if w is None: out.append((d, "no waiver"))
elif today > w["expires"]: out.append((d, "waiver expired"))
elif d["rows"] > w["max_rows"]: out.append((d, f"{d['rows']} rows exceeds waived {w['max_rows']}"))
return out
within scope no blockers
grown ['2600 rows exceeds waived 2100']
expired ['waiver expired']
other column ['no waiver']
The same difference passes while it is inside its scope and date, and blocks when it grows to 2,600 rows, when the date passes, or when it appears in a column the waiver does not name.
What it must not become
The acceptance decision cannot be derived from the downstream results looking fine today. A consumer metric that passes now may fail when the data shifts, while the break remains. The approval rests on understanding the cause and on the consequence for the people who use the numbers, which the owner must be able to state. The tolerance on an aggregate should also be smaller than the fault it is meant to catch: a 0.1% tolerance on totals would not see a rounding difference of 0.0003%, and would not make it an accepted break either, since nobody decided anything. Where fixing the cause is cheap, fixing it is usually better than recording a break, because every accepted break is a rule the next engineer has to know.
References
Discover more from Insightful Data Lab
Subscribe to get the latest posts sent to your email.
