BitBootcampBitBootcamp ← all explainers 🔄 Review ⚙ Settings

Drill 100 — The Consent That Expired

Theme: Compliance, Privacy & Model Governance · Format: 20-min drill · Difficulty: core

The story

A card issuer's fraud platform collects rich signals on every applicant and transaction: device fingerprints, geolocation, merchant sequences, login cadence. The consent notice customers accept at onboarding is specific — the data is collected "to detect and prevent fraud on your account" — and buried in the retention schedule is a limit: fraud signals are kept for twenty-four months past the last transaction, after which the lawful basis to hold them lapses. For years the platform does exactly one thing with the data: it scores transactions for fraud. Unremarkable, compliant, boring.

Three years on, a data-science team stands up a next-best-offer model for the marketing org. Someone remembers the fraud tables — device type, spend patterns, session behavior — and realizes they are a goldmine of engagement signal. The warehouse grant is valid, the SQL is trivial, and the historical depth is exactly what a propensity model wants. They train on it. The model lifts campaign conversion by a healthy margin, and the reuse never surfaces in any review, because nothing about training a model on a table you can already read looks like a decision that needs sign-off.

Then a data-protection regulator opens a routine examination of the marketing program and asks a single question: what is the lawful basis for training this model on fraud-prevention data? The team goes looking for the answer. The consent covered fraud, not marketing. And the twenty-four-month retention window on much of that data closed over a year ago — the records should have been expired, but nobody tracked the clock. The data was used for a purpose it was never consented for, after the consent to hold it at all had already expired.

⏸ Stop here and ask the room: the regulator wants the lawful basis in writing. What do you hand them?

Run it — facilitator script

Timing: ~2 min story · ~10 min questions · ~3 min reveal · ~5 min transfer.

Read the story aloud, pause at the blockquote, and let the room feel the trap: no access rule was broken and no data was stolen. The drill lands when someone realizes there are two violations stacked on top of each other — wrong purpose, and expired basis — and the platform could express neither.

The regulator asks for a lawful basis. Name every reason there isn't one.

The data was three years old and reused for a new purpose. Which control should have caught it, and when?

What has to be recorded, at collection time, for anyone to answer the regulator in an afternoon?

The reveal

There is no lawful basis, and the team cannot manufacture one after the fact. The consent said fraud; the use was marketing; and the retention clock had already run out, so a large share of the training data should have been deleted before the marketing model ever saw it. The examination widens from "was this campaign compliant?" to "what else in the warehouse is being used past its purpose or past its expiry?" — and nobody can answer, because the platform records neither purpose nor expiry in any form a query can read. The model gets pulled, the campaign is unwound, and the remediation is a warehouse-wide reconstruction of collection context that was cheap to capture at ingestion and enormously expensive to rebuild years later.

Why this happens — the mechanics

Consent is a scoped, time-boxed contract, and standard data infrastructure preserves neither dimension. An ETL (Extract, Transform, Load) job carries types, values, and schemas — the properties queries need — and strips the legal context, because no column type exists for "collected under fraud-consent notice v3, retain until 2022-06." The purpose scope evaporates the moment the data lands in a shared table, and the expiry date was never a field in the first place; it lived in a retention schedule in a policy document, enforced by nobody. So the two facts that define the lawful basis — what for and until when — are exactly the two the platform forgets first.

That forgetting inverts the cost curve, which is this whole theme's signature. At collection time, recording purpose and expiry is a tag and a date — minutes of work by the people who know the answer. Years later, reconstructing them means reverse-engineering the collection context of every table from ingestion logs and old consent notices, under a regulator's clock. Nothing enforces the cheap moment, because the data scores fraud identically whether or not its purpose and expiry were ever written down — the deadline that would force the work never arrives until an examiner invents one, at the expensive end.

And reuse is the path of least resistance. Doing the compliant thing — noticing that marketing is a new purpose, checking whether the data is still in its retention window, triggering a fresh consent — takes legal knowledge and friction. Doing the violating thing takes ten minutes of SQL against a table you can already read, and produces a model that lifts conversion. When the platform expresses no purpose boundary and no expiry, every incentive points across the line, and each quiet reuse normalizes the next. The expired consent didn't fail loudly on any single day; it was never tracked, so there was no day on which it could fail — until someone finally looked.

Diagrams

Problem — how the failure unfolds:

timeline
    title A consent that lapsed, then got reused
    section Collection
        2019 : Fraud data collected : Consent - fraud only, keep 24 months
    section Silent decay
        2019-2021 : Data scores transactions for fraud
        2021 : Retention window closes (silent) : Records should expire - nobody tracks the clock (silent)
        2022 : Marketing team finds the fraud tables (silent) : Trains a next-best-offer model on it (silent)
        2023 : Campaign ships - conversion lifts
    section Discovery
        2024 : Regulator asks for the lawful basis : None exists - wrong purpose and expired
        2024-2025 : Warehouse-wide remediation : Reconstruct purpose and expiry after the fact

Solution — where the guardrails go:

flowchart TD
    A["Fraud data collected<br/>(purpose scope + expiry<br/>recorded at ingest)"] --> R["Consent registry<br/>(purpose, consent version,<br/>expiry date per record)"]
    R --> T["Purpose tag travels with<br/>the data through lineage"]
    T --> P["Training pipeline requests<br/>fraud data for a<br/>marketing model"]
    P --> G["Data-use policy check<br/>(purpose match AND<br/>expiry not passed)"]
    G -->|"mismatch or expired"| D["Build fails closed<br/>(no lawful basis, no<br/>training run)"]
    R -.-> RF["Consent-refresh job<br/>(re-consent 60 days<br/>before expiry)"]
    T -.-> M["Purpose and expiry monitor<br/>on query and training logs"]
    M -.-> AL["Off-purpose or expired<br/>use flagged within one day"]

What good looks like

The lesson

Consent is a scoped, time-boxed contract, and a lawful basis has to be provable at the moment of use — which means the platform must record two things collection-time infrastructure throws away first: what the data was collected for, and until when. Store purpose and expiry as queryable metadata, tag the data so both travel through lineage, and put a fail-closed policy check between the data and any new use. If you can't join a model's training set back to a consented purpose and an unexpired basis, you don't have consent — you have a finding waiting for someone to look.

Named concepts: lawful basis, consent expiry, purpose limitation, data-use governance.

Real-world echoes

Transfer

Pick the richest dataset your models train on and answer three questions in writing: what purpose was it collected under, where is that recorded, and when does the lawful basis to hold it expire? If any answer lives in a policy document rather than a queryable field, a model somewhere is already training on data it may have no basis to use.

Make it a ticket: add a purpose tag and an expiry date to your most sensitive training source in the catalog this sprint, and wire one pre-training gate that fails the build when a model's declared purpose doesn't match the data's tag or the data is past expiry. One source, one gate; the pattern scales from there.

Related