Library// definition

Backfill: the word that hides four different jobs

In short

Backfill covers four different operations: a first historical load, a repair of a gap the live pipeline missed, a reprocess forced by a change to your own transforms, and a full rebuild. They share one shape — writing records for a period the pipeline has already passed — and nothing else. Only gap repair is routine, and the other three each break something distinct.

Key takeaways

  • A backfill is any run writing records for a period the live pipeline has already passed.
  • Gap repair is the only routine one. The other 3 are events with their own approvals.
  • A transform change rewrites derived rows for records whose source never changed at all.
  • Half a corpus in one representation and half in another is a broken index, not a slow migration.
  • Every request needs a scope, a cut-off, and an answer on deletes inside the window.

A backfill is any run that writes records for a period the live pipeline has already passed. That one shape covers 4 operations people describe with the same word, differing in what triggers them, what they rewrite and what they can destroy. Agreeing which one is being asked for is most of the risk management.

The four operations the word is doing duty for

JobWhat triggers itWhat it writesWhat it can break
First historical loadA new source is connected and everything before today is missingEvery record in the retained historyLive throughput if unthrottled, and its own accuracy if old records are read under today's schema
Gap repairA run failed, an export never arrived, a window was skippedA bounded period, usually hours or daysCounts, if ingestion is not idempotent, since the window overlaps existing records
Transform-change reprocessingThe extractor, chunking rule or embedding model changedDerived rows for records whose source never changedComparability: the corpus holds 2 representations and results across them differ in meaning
Full rebuildSuspected drift, a corrupted index, a migrationEverything, from source to serving layerAvailability and trust, if the index is queryable while only partly populated
The 4 jobs called backfill, what triggers each, and what each can break

Only the second row should ever be routine. Gaps happen weekly in any pipeline reading systems it does not control, and repairing them should be a button rather than a project. The other 3 are events: each needs a named owner, a written scope, and agreement on what the corpus looks like halfway through.

The two words missing from almost every backfill request

"Can you backfill the last 2 years" is not a specification. Five answers turn it into one, and the fourth is the one that gets skipped and later hurts.

  1. Which sources, named individually. A range across 6 feeds is 6 jobs with 6 retention limits, and the shortest one decides the real answer.
  2. The time boundaries, inclusive, against a named clock. A range in local time spanning a daylight-saving change is a 1-hour ambiguity somebody finds later.
  3. Which layers get rewritten: source records, chunks, embeddings, summaries. Each layer multiplies the cost and the time.
  4. What happens to deletions inside the window. A record created in March and deleted in June is resurrected by a naive backfill, which is worse than a missing one.
  5. The cut-off, and the rule for records after it, or the backfill and the live pipeline fight over the same rows.

Why reprocessing is the expensive one and rebuilding is the risky one

A transform-change reprocess touches every record whether or not anything upstream moved, so its size is the whole corpus every time. On an embedding-heavy corpus that is real money, and the unit is chunks not documents: a 40-page report can be 120 chunks, so 50,000 documents is millions of paid calls. It is slow too, meeting a rate limit no concurrency gets past.

A full rebuild costs less and risks more. Its purpose is to catch the drift incremental updates accumulate silently — the case in rebuilding the whole index against updating only what changed — and its danger is the window where the index is live and half-populated. In a stream it becomes a replay from a stored offset competing with live consumption, worth knowing before choosing between scheduled batches and a stream.

Two things to check before promising anyone a backfill

The first is whether the history is reachable. The extraction route decides it: a sanctioned export usually offers a full range, a file or email drop may retain only 90 days, and a route driving the source's interface often cannot reach history at all — the ranking in scheduled exports against driving the interface. A source that discarded the period is not a scheduling problem.

The second is whether reprocessing may overwrite. Where a record must be reproducible as it stood on a date — clinical, claims and regulated financial work, as in AI across healthcare operations — a reprocess that replaces the stored text destroys the evidence of what the system said at the time. Version the derived rows and keep the superseded ones addressable.

It is a useful question for a vendor or build partner: what happens when you change the chunking rule on 400,000 documents. A specific answer describes a parallel index, a switchover and a cost; a vague one about automatic reindexing describes a hope. That is the probe in how to test an AI-native claim, and it belongs in the scoping of any AI automation and agent engineering. The rest sits in data readiness and pipelines, part of the engineering library.

Frequently asked questions

Short answers to the follow-ups this page tends to raise.

What is a backfill in a data pipeline?

It is any run writing records for a period the live pipeline has already passed. The word covers 4 distinct operations: loading history when a source is first connected, repairing a gap left by a failed run, reprocessing derived data after your own transform changed, and rebuilding everything from source. They share a shape and differ in cost, risk and frequency.

What is the difference between a backfill and a reprocess?

A backfill usually means filling in source data never loaded; a reprocess means rewriting derived data from records you already hold, because the transform changed. It matters because a reprocess touches the whole corpus regardless of what changed upstream, and on an embedding-heavy system that is the most expensive routine operation there is.

What should a backfill request specify?

Named sources, inclusive time boundaries against a stated clock, which layers are rewritten, how deletions inside the window are treated, and a cut-off with a rule for the overlap. Deletions are the one people forget: a record created in March and deleted in June is resurrected by a naive backfill, and nobody looks for it afterwards.

Can a transform change be rolled out gradually across a corpus?

Only if you accept a degraded system for the whole rollout, or build into a parallel index and switch over. A partly reprocessed corpus holds 2 representations: with a new chunking rule, old and new passages compete in one result list on different terms; with a new embedding model the vectors sit in different spaces, so distances across the set mean nothing.

  • backfill
  • reprocessing
  • definitions
  • pipelines
// shipped work

The work behind this page

Builds from our portfolio that this page draws on.

Working on something in this space?

Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.

Start the conversation