Most football fans see a young left-back hugging the touchline and call it width. A data engineer sees an event stream with high-cardinality spatial attributes, out-of-order timestamps. And a rate limit problem when the fullback sprints into the final third. The two views converge on a single player: Valentín Barco. His movement profile - overlapping runs, inverted positioning, quick progressive carries - is a surprisingly good stress test for real-time sports data infrastructure. This article isn't a scouting report it's an engineering breakdown of what happens when you try to model a dynamic, high-mobility fullback using event data, tracking coordinates - state machines. And streaming architectures.
The same stream processing patterns that detect fraudulent transactions can explain why Valentín Barco's overlapping runs collapse a defensive block faster than a central midfielder's through ball.
If you have built pipelines for telemetry, clickstream. Or sensor networks, you already understand most of the problems in modern football analytics. What changes is the domain vocabulary. A progressive carry is just a state transition, and a pressure event is an interval joinA heatmap is a geospatial aggregation over a sliding window. In the sections below, we will walk through concrete engineering approaches - using DuckDB, WebSockets, OpenCV, and Apache Kafka-style semantics - to analyze a player like Valentín Barco without losing your mind over data quality, out-of-order events. Or coordinate systems.
Why Fullback Movement Data Resembles High-Cardinality Telemetry
Fullbacks generate a specific kind of data problem. Unlike central defenders, who occupy a relatively stable band in front of the penalty box, a fullback like Valentín Barco oscillates between two extreme positions: defensive recovery along the byline and high attacking width near the opponent's corner flag. In telemetry terms, this is high-cardinality spatial behavior with rapid changes in velocity, direction. And distance to the ball. A naive aggregation - say, average x-coordinate per half - tells you almost nothing because the player occupies two distinct modes, not one normal distribution.
In production observability systems, we would call this a bimodal distribution and treat it with quantile-based alerting rather than mean-based dashboards. When I built a prototype dashboard for fullback positional monitoring, the mean position for Valentín Barco across a match could land in the center circle. Which is absurd. The solution was to use percentile bins - p10, p50, p90 - and visualise the upper tail separately. This is the same technique you would apply to request latency in a microservices environment. See our article on percentile-based SLO monitoring for more on this pattern.
Public Event Data isn't Tracking Data: Understanding the Data Contract
Most open-source football datasets are event data, not tracking data. Event data is a log of discrete actions: passes, shots, tackles, interceptions, carries. Each event typically includes a timestamp, player ID, location coordinates, and outcome fields. Tracking data, by contrast, is a continuous stream of positions for all 22 players and the ball, often sampled at 10-25 Hz. If you try to answer a question like "how often does Valentín Barco overlap beyond the left winger? " using only event data, you will fail because overlapping runs aren't always recorded as events. The off-ball movement is invisible.
This is a data contract mismatch. Event data promises a lossy, domain-specific compression of reality. Tracking data promises raw positional truth but introduces timestamp alignment, frame interpolation. And coordinate normalisation problems. A practical engineering approach is to treat event data as the source of record for actions and Tracking data as the source of truth for space. When you join the two, you need a deterministic join key: match ID - player ID. And a synchronised clock. In my own work, I have seen mismatched clocks between optical tracking rigs and broadcast feeds produce forward-looking bias of up to two frames. Which is enough to misclassify a close offside or a touch on a carry.
- Event data: discrete actions, low data rate, richer semantic labels.
- Tracking data: continuous coordinates, high data rate, sparse semantic labels.
- Join complexity: timestamp skew, player ID mapping, coordinate system transforms.
Ingesting StatsBomb Open Data Into DuckDB for Low-Latency Exploration
If you want to prototype a fullback analysis without paying for a commercial tracking feed, start with the StatsBomb open-data repository. It contains event data for dozens of matches in JSON format. You can load these JSON files directly into DuckDB using its read_json_auto function, then query events by position, type. And outcome. DuckDB's columnar execution engine is fast enough to scan millions of events on a laptop, which makes it a practical alternative to spinning up a distributed Spark cluster for exploratory work.
One production pattern I use is to flatten nested event
.Need a Custom App Built?
Let's discuss your project and bring your ideas to life.
Contact Me Today →