A free VIN decode looks like one button click. Under the hood it is normalize, validate, cache lookup, optional proxy hop, NHTSA DecodeVinValues, field mapping, and render. When p95 climbs, "the API is slow" is not a diagnosis -- you need spans that show which stage burned the budget and whether the wait was yours or upstream. This post sketches a small OpenTelemetry-style span pattern in TypeScript: one parent decode span, child spans for cache and upstream, and attributes that stay useful...