Tracking Geometry Drift as a Service-Level Objective
Spatial accuracy is a continuous quantity that most pipelines report as a boolean. This guide sits beneath spatial test observability and metrics and shows how to express it instead as a service-level objective with an error budget: choosing an indicator that consumers actually feel, setting a target from what they need rather than from what the pipeline currently achieves, computing the burn, and using the result to have a conversation that a pass-fail gate makes impossible.
The framing is borrowed from reliability engineering and it transfers cleanly, because the underlying situation is the same. Perfect is unattainable, some degradation is acceptable, and the useful question is how much has been spent rather than whether anything has broken.
Root cause: a threshold discards the information you need
A gate compares a measurement against a limit and reports a boolean. That is correct behaviour for a gate — a merge decision has to be binary — and it destroys the two things needed to manage accuracy over time: the magnitude of the measurement and its history.
Consider a drift measurement that has moved from 2 mm to 8 mm over a quarter against a 10 mm limit. Every run in that quarter was green. Nothing in the gate’s output distinguishes the first week from the last, and the first indication anybody receives is a failing build in the following month, at which point the cause is a quarter old and the investigation starts cold.
Choosing the indicator
A service-level indicator is the measurement a consumer would recognise as their experience of the system, and picking one that nobody feels is the most common way this framing fails. Three candidates recur in spatial pipelines and they suit different consumers.
Round-trip coordinate residual suits any consumer that overlays your data against another source. It is measurable without any consumer involvement, which makes it the easiest to start with, and it is a good proxy for “does this line up”.
Area or length delta after processing suits consumers who aggregate — a reporting pipeline, a billing calculation, anything where a total must reconcile. It is the indicator that catches a simplification tolerance change, which residual will not.
Feature-level agreement against a reference suits consumers doing joins or lookups: the fraction of features whose relationship to a reference layer is unchanged. It is the most expensive to compute and the closest to what a downstream system actually depends on.
| Indicator | Consumer who feels it | Catches | Costs |
|---|---|---|---|
| Round-trip residual | Anyone overlaying data | Transform and datum problems | One transform per fixture point |
| Area or length delta | Anyone aggregating | Simplification, precision changes | One pass over the geometry |
| Feature agreement | Anyone joining | Relationship changes, boundary shifts | A spatial join per run |
| Invalid-geometry rate | Anyone rendering or tiling | Structural degradation upstream | Already computed by the suite |
Setting the target from need, not from current performance
The instinct when setting an objective is to measure what the pipeline currently does and set the target just above it. That produces a number that is always met and therefore never informative — the objective becomes a description rather than a commitment.
The target should come from the consumer’s requirement: the map scale the data is rendered at, the survey standard it must satisfy, the tolerance the downstream join uses. That number is usually harder to obtain and always more useful, because it makes the objective capable of being missed — which is the entire point of having one.
Where the requirement and the current performance are far apart, the honest response is to state both. An objective of 1 cm against a current 8 cm is a commitment with a plan attached, and it is far more useful than an objective of 9 cm that nothing will ever violate.
where
Computing and reading the burn
The burn is the fraction of the error budget consumed, and its rate of change is more informative than its level. Three readings recur and each implies a different action.
Flat burn near zero means the objective is comfortably met and possibly too loose. If it has been flat for two quarters, the target is worth revisiting — either tightening it towards what consumers actually need, or acknowledging that this indicator is not the one to watch.
Steady burn tracking the window means the pipeline is operating at its objective, spending budget at the rate the objective anticipated. This is the healthy state and it needs no action, which is worth saying explicitly because it looks like a problem to anyone reading the number without the rate.
Accelerating burn is the actionable signal. The budget will exhaust before the window rolls, and the time between noticing and exhausting is the window in which a fix is cheap. This is the entire operational value of the construction.
The natural cadence for reading it is weekly, alongside whatever review already happens. Alerting on the burn rate rather than the level gives the earliest useful warning: a rate that would exhaust the budget before the window ends is worth a message regardless of how much budget currently remains.
What the Framing Makes Possible
The operational value is real but secondary. The primary value is that a measured series with an agreed target enables a conversation that a pass-fail gate makes impossible.
With a gate, a producer and a consumer can only discuss whether the data is acceptable, and the discussion has no shared quantity. With an objective, both parties look at the same series, and the questions become tractable: is the target right, is the current performance improving, how much of the budget does a proposed change consume. Disagreements become about numbers rather than about adjectives.
That is also why the objective should be agreed rather than imposed. A target set unilaterally by the consuming team is a demand; the same number agreed after both parties have looked at the series is a commitment, and the difference shows up in whether anybody acts when the budget starts burning.
Where no negotiation is possible — a supplier who will not engage, a dataset that arrives without discussion — the objective still earns its place, but its purpose changes. It becomes a record of what the pipeline is absorbing, which is what turns “the data is sometimes bad” into a quantity that can be shown to somebody with the authority to change the arrangement.
Failure modes and edge cases
- An indicator nobody feels. A drift metric on a quantity no consumer depends on produces an objective that is technically met and operationally irrelevant. Choose the indicator by asking who would notice if it degraded.
- A target set from current performance. It cannot be missed, so it reports nothing. Set it from need and treat the gap as the improvement backlog.
- A window shorter than the change rate. A seven-day window on a quantity that drifts over months resets before any trend accumulates. Match the window to the timescale of the changes you want to catch.
- Comparing across a population change. A percentile computed over a different number of features is not comparable to the previous one, and a chart will happily place them adjacent. Carry the population and break the series when it moves materially.
- Burning budget on a known cause. If a batch is known to be bad, excluding it from the calculation is legitimate and must be recorded, or the series quietly stops meaning what it claims.
- Treating budget exhaustion as a failure. It is a decision point: fix the pipeline, or change the objective. Both are valid, and pretending only the first is turns the framing back into a gate.
Conclusion
An error budget converts spatial accuracy from a property that is either acceptable or not into a quantity with a rate of change. Choosing an indicator a consumer feels, setting the target from their requirement rather than from current performance, computing the burn and alerting on its rate gives a signal that arrives with time to act — and, more valuably, gives two teams a shared number to negotiate over, which is the contribution spatial test observability and metrics makes beyond the gate.
Related
- Spatial Test Observability and Metrics — the parent layer and the metric families this objective draws on.
- Emitting OpenTelemetry Spans from Spatial Tests — the per-run detail beneath the aggregate series.
- Asserting CRS Round-Trip Accuracy in pytest — computing the residual this indicator most often uses.
- Setting Up Spatial Tolerance Thresholds in Assertions — deriving the target from measurable bounds.