Reducing Latency in Global URL Redirection: Architecture, Routing, and Performance Tuning
Global URL redirection looks simple: a user clicks a short link, your service responds with a redirect, and the browser loads the destination. But at global scale, that “simple” flow becomes a performance puzzle made of network geography, DNS behavior, TLS handshakes, cache hit rates, data replication, and how you compute redirect decisions under real-world conditions.
Latency is not just a nice-to-have metric for redirection platforms. It directly affects:
- User trust (slow redirects feel suspicious or broken)
- Conversion rates (every extra moment loses users, especially on mobile)
- Campaign performance (ads, QR codes, social posts all depend on fast clicks)
- SEO and crawler behavior (bots time out or reduce crawl efficiency)
- Infrastructure cost (inefficient designs force more compute and bandwidth to achieve the same throughput)
This article goes deep into how global redirection latency is created, how to measure it correctly, and—most importantly—how to reduce it systematically. We’ll cover the entire path: DNS, network routing, TLS, application logic, storage, caching, edge compute, multi-region replication, and reliability strategies that keep redirects fast even during partial outages.
Understanding Where Redirect Latency Really Comes From
Before optimizing anything, you need a clear mental model of the redirect journey. In a redirect flow, the user typically experiences two full web requests:
- Request to the short link service
- Request to the destination after receiving the redirect response
That means latency isn’t just “how fast your server responds.” It’s the sum of multiple stages, many outside your direct control, plus the additional hop you introduce by design.
The end-to-end redirect timeline
A typical redirect click can include:
- DNS resolution for the short domain
- Network connection setup (TCP or QUIC)
- TLS handshake (if HTTPS)
- HTTP request to your redirect endpoint
- Application decision (lookup + rules + security checks)
- HTTP redirect response (301/302/307/308)
- DNS resolution for the destination domain (if not cached)
- Destination connection + TLS + request
- Destination content download and rendering
Your platform primarily controls #4–#6, partially influences #1–#3, and indirectly affects #7–#9 by choosing redirect codes, headers, and caching patterns.
Why redirects “feel” slower than normal pages
Even if your redirect response is only a few hundred bytes, the user still needs a full round-trip and a second navigation. This is why shaving 20–50 milliseconds at multiple points matters: small improvements stack up, and you’re competing with a user’s patience plus mobile networks plus cross-border routing.
Latency distribution matters more than averages
In global systems, averages hide pain. You should care about:
- Median (p50): typical performance
- p95: what most users experience during peak and bad routes
- p99: the tail, where user frustration and timeouts happen
- Worst-case by region: long-haul routes reveal design weaknesses
A redirect service can have an excellent p50 but a terrible p99 due to cache misses, slow database reads, or a subset of users routed to far-away regions.
Measuring Redirect Latency the Right Way
You can’t optimize what you can’t see. Redirect latency needs measurement from multiple angles because server-side timing alone can lie.
Three measurement layers you should use together
1) Real user monitoring (RUM)
This measures what users actually experience in browsers and apps.
What it captures well:
- regional ISP routing quirks
- device and network conditions
- real DNS resolver behavior
- mobile versus desktop differences
What it misses:
- deep internal breakdown unless you correlate with server logs
2) Synthetic probes
Bots that click links from known locations at fixed intervals.
Great for:
- baseline regional comparisons
- regression detection after deployments
- testing new PoPs or DNS policies
Be careful:
- synthetic probes often have cleaner networks than real users
- results can be overly optimistic unless you vary ISPs and device profiles
3) Server-side tracing and logs
This is where you learn why redirects are slow.
Track at least:
- request arrival timestamp
- time spent in cache lookup
- time spent in storage read
- time spent in rule evaluation
- response serialization time
- response status and redirect target class (direct, rules-based, blocked, etc.)
Split latency into actionable components
Create a standard breakdown such as:
- Edge/network latency: time from user to closest entry point
- Compute latency: time to run redirect logic
- Data latency: time to fetch mapping and metadata
- Decision latency: time to evaluate rules and safety checks
- Response latency: time to send redirect response
Even if you can’t measure all components in the client, you can measure them on the server and infer the rest.
Always segment by cache hit/miss
The most common reason global redirect latency spikes is cache miss amplification. Your monitoring should make it impossible to hide this.
For every request, log:
- mapping cache hit or miss
- rule cache hit or miss
- threat verdict cache hit or miss
- which region served the request
- whether storage call happened and how long it took
If you do nothing else, this segmentation alone will reveal where your time goes.
DNS Strategy: Your First Latency Lever
DNS is often the earliest performance decision your system makes. For global redirection, DNS policy determines where a user enters your network. Bad DNS decisions can add hundreds of milliseconds before your app even runs.
Goal: route users to the closest healthy entry point
Common approaches include:
Anycast IP routing
You advertise the same IP from many locations; Internet routing brings users to a “nearby” point.
Pros:
- often fastest entry
- simple for clients
- resilient when a site fails (traffic shifts)
Cons:
- “nearby” depends on BGP reality, not geography
- debugging can be harder
- misrouting can happen for some ISPs
Geo-based DNS responses
DNS answers vary by resolver location, returning different regional endpoints.
Pros:
- more predictable regional mapping (when done well)
- can include health-aware decisions
Cons:
- relies on DNS resolver location, not user location
- users on global resolvers may appear in the wrong country
- DNS caching can delay changes during incidents
TTL tradeoffs: speed vs control
TTL (time-to-live) influences how quickly changes propagate:
- Low TTL: faster failover and routing adjustments, but higher DNS query volume
- High TTL: fewer queries, but slower response to outages and reroutes
For redirect platforms, a common strategy is:
- moderate TTL for stability
- use health-aware routing at the edge layer for real-time resilience
Reduce DNS “depth” to reduce time
Each additional DNS indirection can add time. Keep your DNS chain as short as possible:
- avoid unnecessary alias levels
- avoid multi-step resolution patterns when possible
- minimize the number of hostnames the client must resolve during the redirect request
DNS is not the only factor, but it is the first one—and it is one of the easiest to get wrong globally.
Edge-First Architecture: The Biggest Latency Win
If your redirect service is served only from a small number of regions, users far away will pay a heavy round-trip penalty. The most effective approach for global redirects is an edge-first design: serve redirect responses from locations close to users.
What “edge-first” means in practice
Instead of routing all redirect requests to a central origin, you:
- terminate the request at a nearby edge location
- perform redirect decision logic there when possible
- use cached mapping and rules at the edge
- only call a regional or central backend on cache miss or special cases
Why edge matters more for redirects than for pages
A normal web page might load images and scripts from a CDN, but still fetch HTML from a central server. With redirects, the “content” is tiny, and the user is extremely sensitive to the extra hop. Serving that hop locally gives outsized benefits.
Edge patterns for redirect systems
Pattern A: Edge cache + origin fallback
- edge checks cache for short code mapping
- on hit: return redirect immediately
- on miss: fetch from origin, store in edge cache, respond
This is the most common and usually the best starting point.
Pattern B: Edge compute with embedded rule engine
- mapping and logic run entirely at the edge for most requests
- origin is mainly for admin updates and long-tail misses
This reduces latency further but requires careful design for rule complexity and updates.
Pattern C: Hybrid by link class
- “hot” links replicated to edge aggressively
- “cold” links served from regional origins
- enterprise links get higher cache priority and prewarming
This aligns performance with business value while keeping costs manageable.
Redirect Code and Header Choices That Affect Speed
Redirect status codes are not just semantics. They influence caching behavior, browser decisions, and how quickly the next navigation begins.
Choosing the right redirect status
- 301 / 308: permanent redirects; clients and intermediaries may cache
- 302 / 307: temporary redirects; typically less cacheable by default
For short links used in campaigns, you often want the flexibility to change destinations. That pushes you toward temporary redirects, but you can still use caching intelligently.
A practical approach:
- use temporary redirects for most user-created links
- use permanent redirects only for truly permanent canonical mappings
- use caching headers to control performance without sacrificing control
Use caching headers intentionally
Even if you use a temporary redirect, you can improve speed by enabling controlled caching for safe cases:
- cache public, non-personalized redirects longer
- cache personalized or geo-conditional redirects shorter
- include vary-like behavior in your logic: different cache keys for different conditions
Be careful: caching a redirect that depends on user agent, region, or A/B assignment can cause incorrect behavior if your cache key does not include those inputs.
Data Store Choices: The Hidden Latency Trap
Many redirect platforms start with a database lookup per click. That works at small scale but becomes your main latency source globally.
Redirect traffic is read-heavy
Clicks are overwhelmingly reads:
- a link is created once
- it is clicked many times
This is perfect for architectures that emphasize:
- fast key-value lookups
- caching
- replication optimized for reads
What you want from the mapping store
For each click, your platform should ideally do:
- one fast lookup by short code
- return destination + flags + rule pointers
The mapping store should be:
- low latency
- horizontally scalable
- globally replicable or cache-friendly
- optimized for point reads
Avoid expensive joins and multi-query flows
Latency explodes when click handling requires:
- join across link table + user table + rules table
- multiple reads to compute “final redirect”
- fetching analytics config separately
- calling external services for validation
Instead, design a click-optimized record that contains what the redirect handler needs in one read.
Click-optimized record example (conceptual)
A single record might include:
- destination URL (or an internal reference to it)
- link status (active, paused, blocked)
- rule profile ID
- safety verdict state
- caching policy hints
- updated timestamp and version
Even small redesigns to reduce “number of reads per click” can drop p95 latency dramatically.
Caching Strategy: Turn Global Latency Into Local Latency
Caching is the heart of fast global redirection. The best systems treat the origin store as a fallback, not the default.
Use a multi-layer cache hierarchy
A strong design uses multiple caches:
- In-process memory cache (fastest, per instance)
- Regional cache (shared across instances in a region)
- Edge cache (closest to users)
- Origin store (source of truth)
This layered approach ensures:
- hot keys are served at the closest possible layer
- misses are still fast because a nearer cache may have it
- origin load stays stable even under spikes
Cache key design: correctness first, then speed
Your cache key must reflect what changes the redirect result.
If your redirect is purely code → destination, keying by code is enough.
If your redirect depends on:
- country or region
- device type
- language
- A/B bucket
- time window
- threat verdict freshness
Then your cache key must incorporate those factors or your logic must be structured so those decisions happen after a stable base mapping is cached.
A high-performance pattern is:
- cache base mapping by code
- cache rule profiles by profile ID
- combine them quickly at request time
This avoids exploding cache key cardinality while still supporting dynamic behavior.
Negative caching is essential
When a user requests a non-existent code, or a code that is blocked, you should cache that outcome briefly. Otherwise, attackers or bots can force repeated expensive origin reads.
Negative caching helps with:
- random code scanning
- repeated hits to deleted links
- brute-force enumeration attempts
Set negative cache TTL shorter than positive cache TTL to avoid long-lived errors after a link is created.
Stampede protection prevents tail latency spikes
A cache stampede happens when many requests miss the cache and hit the origin at once. This creates a p95/p99 blow-up that looks like “random slowness” during traffic bursts.
Use one or more:
- request coalescing (only one origin fetch per key at a time)
- stale-while-revalidate (serve old value while updating)
- probabilistic early refresh (refresh before expiry for hot keys)
These techniques stabilize latency under load.
Multi-Region Replication Without Slow Reads
If your redirect logic requires reading from a central region, you lose. But multi-region replication introduces consistency challenges. The trick is to separate control plane and data plane.
Control plane vs data plane
- Control plane: link creation, updates, admin operations, analytics configuration
- Data plane: click handling and redirect response
Your data plane must be optimized for reads and must remain fast even if the control plane is slow.
Recommended pattern: async replication + cache-first reads
- writes go to a primary region (or nearest write region)
- updates replicate asynchronously to other regions
- clicks read from local caches and local replicas
- if a replica is slightly behind, serve the last known good mapping and reconcile later
For redirects, eventual consistency is usually acceptable if you manage edge cases carefully:
- when a link is disabled, you want that to propagate quickly
- when a link destination changes, a brief delay is often acceptable for most use cases
You can prioritize “stop” updates (pause/block) to propagate faster than routine edits.
Versioning prevents weirdness
Store a version number or updated timestamp with each link record. This enables:
- cache invalidation logic
- safe merges across regions
- monotonic updates (never apply older data over newer)
A simple version strategy dramatically reduces the risk of serving outdated redirects longer than intended.
Speeding Up Rule-Based Redirects Without Slowing Everything Down
Modern short links rarely redirect to a single static destination. They often include:
- geo targeting
- device targeting
- language targeting
- time-of-day scheduling
- A/B testing
- rotation
- deep link behaviors for apps
- fraud filtering
- safety gating
Every extra feature can add latency if implemented carelessly.
Golden rule: resolve “base mapping” first, then apply rules fast
Make the first step always:
- lookup code → base mapping and rule profile ID
Then apply rules using:
- precompiled decision trees
- cached rule profiles
- minimal string parsing
- no external calls in the click path
Keep rule evaluation O(1) to O(log n), not O(n)
If your system scans a long list of rules per click, it will degrade as customers add complexity. Instead:
- index rules by condition type (country, device, language)
- use hashed lookups or small fixed arrays
- compute a small “context fingerprint” from request signals
Example: fast context fingerprint
You might compute a compact internal representation:
- country code (from edge location)
- device class (mobile/desktop/tablet/bot)
- language group
- time bucket
- experiment bucket
Then select the target using a small map or table, not a rule scan.
Avoid heavy user-agent parsing on every click
User-agent parsing libraries can be expensive, and bots can send enormous headers.
Optimize by:
- using simple device classification heuristics
- caching parsed results for common user agents
- applying strict header size limits to prevent abuse
If you do advanced parsing, do it selectively:
- only for links that require device targeting
- only after the base mapping confirms the link is active
TLS and Transport Choices That Reduce Handshake Time
TLS handshake time can be a major chunk of redirect latency, especially on mobile networks.
Use modern TLS settings
Key improvements that typically reduce latency:
- TLS 1.3 support
- session resumption
- optimized certificate chains
- OCSP stapling (where applicable)
Even without naming specific providers, the principle is: reduce handshake round trips and avoid slow validation paths.
HTTP/3 can help on unstable networks
QUIC-based transport can reduce head-of-line blocking and improve performance when:
- packet loss is common
- mobile networks switch between towers
- latency is variable
If you adopt it, ensure:
- graceful fallback to HTTP/2 and HTTP/1.1
- careful monitoring by region and device type
Transport improvements won’t fix slow backend reads, but they can shrink the baseline cost of each click.
Compute Path Optimization: Make Redirect Handling Cheap
Redirects should be among the cheapest requests you serve. A well-optimized redirect handler can be extremely fast.
Prefer a lean request pipeline
A fast click handler typically:
- validates request (minimal)
- extracts short code
- checks hot caches
- applies rules (if needed)
- returns redirect response
Avoid in the hot path:
- heavy JSON serialization
- complex templating
- unnecessary logging with large payloads
- synchronous analytics writes
- synchronous security scanning
Push analytics off the critical path
Click analytics are important—but they don’t need to block the redirect response.
Best practice:
- respond immediately
- enqueue analytics event asynchronously
- batch and compress events
- process in near real time or streaming
If you must do something synchronously, keep it minimal:
- increment a fast counter
- store a lightweight event in a buffer
Tail latency often comes from analytics writes that unexpectedly slow down during peak traffic.
Cold starts matter if you use serverless compute
If your edge or region compute can cold start, users will feel it as random slow clicks. Reduce cold start effects by:
- keeping runtimes small
- avoiding huge dependencies
- warming critical routes
- using provisioned concurrency for high-traffic regions
Security and Abuse Prevention Without Killing Speed
URL redirection services face constant abuse:
- phishing
- malware distribution
- spam campaigns
- link scanning and enumeration
- bot traffic and click fraud
Security checks can easily add latency if done naïvely.
Pre-compute security when the link is created
Instead of scanning on every click:
- scan at creation time
- rescan periodically or on destination change
- store a verdict and confidence score
- update verdict asynchronously when new intelligence arrives
Then, at click time, the handler only needs:
- a fast verdict lookup (ideally cached)
- a simple decision: allow, block, or interstitial
Use tiered enforcement
Not all links need the same scrutiny.
A tiered model can reduce latency:
- trusted accounts: fast path with occasional sampling
- new accounts: stricter rate limits and more frequent scanning
- suspicious patterns: additional checks or forced interstitial
Rate limiting at the edge protects performance
Bot floods can destroy cache hit rates and increase origin load. Rate limiting at the closest point prevents:
- expensive origin hits for random codes
- cache stampede on cold keys
- log and analytics overload
Edge-level controls keep legitimate clicks fast by stopping garbage traffic early.
Global Routing Strategy: Put Users Near Their Redirect Decisions
Even with good caching, you need intelligent routing so users don’t travel unnecessarily far.
Serve from the nearest healthy point
A high-performing global redirect network aims for:
- nearest entry point for most users
- fast failover when a site is degraded
- consistent experience across regions
Health checks should be:
- continuous
- multi-layer (edge availability, region health, origin health)
- fast to react but not flappy
Resilience strategies that also improve latency
Resilience is not just for uptime; it also improves speed by avoiding degraded paths.
Useful techniques:
- automatic regional failover when latency crosses thresholds
- circuit breakers to stop calling slow dependencies
- serve stale on failure for cacheable mappings
- multi-backend fallback for critical lookups
Serving a slightly stale redirect for a short period is often better than timing out.
Prewarming and Hot Link Replication
In real redirect traffic, a small portion of links generate a huge share of clicks. Use this to your advantage.
Identify hot links and treat them differently
Maintain a “hot key” list based on:
- clicks per minute
- recent growth rate
- campaign schedules
- customer tier
Then:
- prewarm hot links at the edge
- keep hot links in higher-priority caches
- refresh before expiration
- replicate rule profiles associated with hot links
This can transform p95 latency during major campaigns.
Avoid manual prewarming as the default
Manual prewarming is fragile. Aim for automation:
- when a link crosses a click threshold, replicate it
- when a campaign is scheduled, prewarm by time window
- when a QR code is generated, prewarm regionally where it will be used
Handling Destination Performance Without Owning It
You don’t control the destination site, but you can avoid making it slower.
Minimize redirect overhead
- keep your response small
- avoid unnecessary headers
- avoid extra hops (don’t chain redirects internally)
- avoid interstitial pages unless required for safety or compliance
Avoid multi-step redirects inside your own system
A bad pattern is:
- short code redirects to a tracking URL
- tracking URL redirects to a policy page
- policy page redirects to destination
Each additional hop adds latency and increases failure probability. If you must do gating, consolidate logic into one decision and one redirect when possible.
Preserve method and behavior correctly
Use redirect codes that match your intent. If a destination expects a particular method behavior (common in app flows), incorrect codes can trigger retries or errors that look like slowness.
Performance Tuning at the Network and OS Level
Once architecture and caching are solid, system-level tuning can reduce tail latency.
Connection management
For region-based backends:
- reuse connections with keep-alive
- tune connection pools to avoid queueing
- avoid per-request DNS resolution on backend calls
- set sensible timeouts to prevent thread exhaustion
Timeouts and budgets
Every dependency in the click path should have:
- a strict timeout
- a fallback behavior
A redirect that times out is worse than a redirect that serves stale (when safe). Set budgets like:
- total click handler time budget
- storage read budget
- rule evaluation budget
- analytics enqueue budget
Make budgets visible in logs so regressions are caught early.
A Practical Reference Architecture for Low-Latency Global Redirects
Here’s a proven blueprint you can adapt.
Components
Edge layer
- terminates user connections
- performs basic request validation and rate limiting
- checks edge cache for mapping and rule profile
- returns redirect on cache hit
- fetches from regional backend on miss (with stampede protection)
Regional data plane
- stateless redirect service (fast compute)
- regional shared cache for mappings and rule profiles
- local read replica or regional key-value store
- async event stream for analytics
Global control plane
- link creation and management APIs
- admin dashboards
- write database
- replication pipeline to regions and edge caches
- security scanning pipeline
Data flow principles
- click handling should succeed even if admin systems are slow
- analytics should not block redirect response
- most clicks should be served from edge cache
- origin reads should be rare and fast
- stop/block updates should propagate quickly everywhere
Step-by-Step Plan to Reduce Latency (Without Breaking Everything)
If you already have a working redirect platform, you can improve latency safely with a staged plan.
Step 1: Measure and segment
- instrument click handler timings
- segment by region, ISP class (if possible), and cache hit/miss
- define p50/p95/p99 targets
Step 2: Fix cache misses first
- add multi-layer caching if missing
- implement stampede protection
- add negative caching for invalid or blocked codes
Step 3: Reduce storage dependency
- create click-optimized records
- reduce reads per click to one
- eliminate joins and secondary lookups in the hot path
Step 4: Move redirect decisions closer to users
- introduce edge caching
- expand regional presence or edge compute
- ensure DNS routing aligns with your topology
Step 5: Make rules fast
- cache rule profiles
- precompile rule evaluation structures
- avoid heavy parsing unless required
Step 6: Make analytics asynchronous
- enqueue events fast
- batch processing
- protect the click path with timeouts and fallbacks
Step 7: Harden for abuse
- edge rate limiting
- bot filtering heuristics
- caching for negative outcomes
- avoid expensive work for suspicious traffic
Step 8: Improve tail latency
- tune timeouts and connection pools
- serve stale on dependency failures
- add failover and circuit breakers
Common Latency Killers in Global URL Redirection
Even mature systems can fall into these traps:
1) Too many synchronous dependencies
If your click handler calls:
- user service
- billing service
- analytics database
- threat scoring service
- rule engine service
You’ve created a latency chain. Keep click handling self-sufficient.
2) Cache keys that don’t match reality
If personalization exists but cache keys ignore it, you’ll have:
- incorrect redirects
- reduced cache hit rate
- unpredictable performance
3) No protection against cache stampedes
Without coalescing or stale-while-revalidate, hot links can collapse your origin during spikes.
4) Logging too much in the hot path
Huge log payloads, synchronous log shipping, or high-cardinality logging can add surprising latency.
5) Treating redirects like “normal API requests”
Redirects are special: they must be fast, tiny, and reliable. They deserve a dedicated data plane design.
Checklist: Low-Latency Global Redirect Best Practices
Use this as an operational checklist.
DNS and routing
- route users to nearby entry points
- keep DNS resolution depth minimal
- choose TTL values that balance control and stability
- implement health-aware routing or fast failover
Edge and caching
- edge cache for mappings and rule profiles
- multi-layer caching with local + regional + edge
- stampede protection
- negative caching
- prewarm hot links
Storage and data model
- one read per click (ideal)
- click-optimized record design
- avoid joins and multi-call logic
- region-friendly replication strategy with versioning
Rule evaluation
- cache rule profiles
- precompile decision logic
- minimize user-agent parsing cost
- keep click-time logic lightweight and predictable
Analytics
- async event pipeline
- batching and compression
- no blocking writes in click path
- guardrails for backpressure
Resilience
- circuit breakers on dependencies
- timeouts with safe fallbacks
- serve stale when acceptable
- regional failover strategy
Security
- pre-scan and store verdicts
- edge rate limiting against bot floods
- fast allow/block decisions at click time
FAQs: Reducing Latency in Global URL Redirection
How fast should a global redirect be?
There’s no single number, but a strong goal is:
- extremely low compute time (single-digit milliseconds in ideal cases)
- most requests served from edge or regional cache
- consistent p95 and controlled p99 across key markets
The best targets are based on your user regions and the networks they use.
Should I always use edge compute for redirects?
Edge compute is powerful, but edge caching alone can deliver major gains. A practical path is:
- edge caching + regional fallback
- then edge compute for more complex rule handling if needed
Is it okay to serve stale redirects briefly?
Often yes, especially for stable links and for resilience during incidents. You should treat stop/block actions as higher priority updates that propagate faster, while destination edits can tolerate short delays depending on customer expectations.
Why does my redirect p99 spike during campaigns?
Usually because:
- hot links expire from cache and cause origin stampedes
- new regions start seeing traffic with cold caches
- analytics pipelines back up and slow synchronous work
- bot traffic increases and degrades cache efficiency
Prewarming, stampede protection, and async analytics usually fix this.
Does personalization always make redirects slower?
Not necessarily. If you structure it correctly:
- cache base mapping
- cache rule profiles
- use fast decision structures
You can support sophisticated routing while keeping latency low.
Final Thoughts: Treat Redirection as a Global Real-Time System
Reducing latency in global URL redirection is not one trick—it’s a systems discipline. The biggest wins come from:
- bringing redirect decisions close to users
- making the click path cache-first and dependency-light
- designing storage and rules for one-read, fast-evaluate behavior
- protecting performance against spikes, abuse, and partial failures
- measuring correctly and optimizing the tail, not just the average
A fast redirect platform feels invisible—users click and immediately arrive. That invisibility is the product: it increases trust, improves conversion, and makes every campaign perform better. When you engineer for that experience across continents, networks, and devices, you don’t just reduce latency—you build a platform people rely on at scale.