<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/36-60-days-system-design-questions-gbo4pu24m" -->

---
title: 36/60 Days System Design Questions | daily.dev
description: A system design question exploring CDN protocol configuration for reducing tail latency in high packet-loss environments. The scenario presents a mobile app...
canonical: https://daily.dev/posts/36-60-days-system-design-questions-gbo4pu24m
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: 36/60 Days System Design Questions | daily.dev
og:description: A system design question exploring CDN protocol configuration for reducing tail latency in high packet-loss environments. The scenario presents a mobile app...
og:url: https://daily.dev/posts/36-60-days-system-design-questions-gbo4pu24m
og:image: https://api.daily.dev/og/posts/gBo4Pu24m.png
og:image:alt: 36/60 Days System Design Questions
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 36/60 Days System Design Questions

**[Joud Awad](https://daily.dev/sources/iac4jsbu0lv8wbsc85fsh)** · [@joudawad](https://daily.dev/joudawad) · 2 min read · 156 upvotes · 27 comments

## Summary

A system design question exploring CDN protocol configuration for reducing tail latency in high packet-loss environments. The scenario presents a mobile app architecture where p99 latency spikes to 800ms+ on lossy networks (4G/5G transitions, flaky WiFi). Readers must choose between HTTP/2-only, HTTP/3-only, or a split HTTP/3-to-clients with HTTP/2-to-origin approach — the strategy used by Netflix and Cloudflare in production.

## Content

Your API response went from 320ms to 95ms after a CDN switch.

Nothing changed on the server. Same origin. Same payload.

The only difference: the CDN started speaking HTTP/3 to your clients.

Here's the setup:

Mobile app → Load Balancer → Origin (NestJS) → DB

Every request goes through the CDN first. Latency is acceptable — until high packet-loss environments (mobile 4G → 5G transitions, flaky WiFi, Asia-Pacific routes). You're seeing 800ms+ tail latency for the p99. The CDN supports HTTP/2 and HTTP/3. What do you enable?

A) HTTP/2 only — multiplexing over a single TCP connection eliminates the old HTTP/1.1 head-of-line problem. Proven, widely supported.

B) HTTP/3 only — built on QUIC (UDP), eliminates TCP head-of-line blocking entirely, 0-RTT connection resumption. Modern clients handle it fine.

C) HTTP/2 to origin, HTTP/2 to clients — maximize multiplexing end-to-end, avoid QUIC instability in enterprise firewalls.

D) HTTP/3 to clients, HTTP/2 to origin — QUIC handles the lossy last mile, HTTP/2 handles the stable datacenter leg.

One of these is how Netflix, Cloudflare, and most major CDNs actually handle this in production.

Pick one — A, B, C, or D — and tell me why. Full breakdown in the comments.

If your team is debating CDN config or protocol upgrades, share this — the tradeoff is sharper than most people think.

Drop your answer 👇

#30DaysOfSystemDesign #SystemDesign #HTTP #WebPerformance

## Community discussion

Top comments from developers on daily.dev.

**@joudawad** · 18 upvotes

> Answer: D — HTTP/3 to clients, HTTP/2 to origin
>
> The problem is the last mile. Mobile clients on lossy connections are where TCP falls apart.
>
>
> HTTP/2 fixed HTTP/1.1's application-layer head-of-line blocking by multiplexing streams over one TCP connection. But TCP itself still has head-of-line blocking at the transport layer. A single lost packet stalls ALL streams until it's retransmitted. On a 4G connection dropping 2% of packets, your 20-stream HTTP/2 connection grinds to a halt.
>
>
> HTTP/3 runs on QUIC (UDP). Each stream is independent. A dropped packet stalls only that stream, the other 19...

**@joudawad** · 6 upvotes

> Why A falls short (HTTP/2 only):
>
> HTTP/2 multiplexing is a genuine improvement over HTTP/1.1, but it doesn't solve TCP head-of-line blocking. On lossy mobile connections, you're still at the mercy of the TCP retransmission window. For p99 tail latency on bad networks, HTTP/2 won't move the needle.

**@joudawad** · 4 upvotes

> Why C is wrong (HTTP/2 end-to-end):
>
> Same problem as A. You've done nothing about the last mile. Consistent HTTP/2 end-to-end sounds clean, but "clean" doesn't show up in your p99.

**@joudawad** · 4 upvotes

> Why B is wrong (HTTP/3 only):
>
> HTTP/3 to origin introduces real operational risk. Enterprise firewalls and some cloud load balancers block UDP port 443 or rate-limit it. Your origin infra isn't the bottleneck, the last mile is. Fixing the origin leg with QUIC doesn't help the problem; it just adds complexity and potential breakage.

**@joudawad** · 2 upvotes

> Also, it would mean a lot to me if you could support my content and stay in touch 🙏
>
> - YouTube: [https://www.youtube.com/@system-design-lab](https://www.youtube.com/@system-design-lab)
> - LinkedIn: [https://www.linkedin.com/in/joud-awad/](https://www.linkedin.com/in/joud-awad/)
> - Medium Blog: [https://joudwawad.medium.com/](https://joudwawad.medium.com/)
> - Substack: [https://joudawad.substack.com/](https://joudawad.substack.com/)

---

Tags: [#career](https://daily.dev/tags/career)

[View this post on daily.dev](https://daily.dev/posts/36-60-days-system-design-questions-gbo4pu24m)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"DiscussionForumPosting","mainEntityOfPage":"https://daily.dev/posts/36-60-days-system-design-questions-gbo4pu24m","headline":"36/60 Days System Design Questions","text":"A system design question exploring CDN protocol configuration for reducing tail latency in high packet-loss environments. The scenario presents a mobile app architecture where p99 latency spikes to 800ms+ on lossy networks (4G/5G transitions, flaky WiFi). Readers must choose between HTTP/2-only, HTTP/3-only, or a split HTTP/3-to-clients with HTTP/2-to-origin approach — the strategy used by Netflix and Cloudflare in production.","url":"https://daily.dev/posts/36-60-days-system-design-questions-gbo4pu24m","datePublished":"2026-06-11T17:40:53.137Z","dateModified":"2026-06-11T17:41:19.511Z","author":{"@type":"Person","name":"Joud Awad","url":"https://daily.dev/joudawad","image":"https://media.daily.dev/image/upload/s--dOB9RaXY--/f_auto/v1773320801/avatars/avatar_iaC4JsBU0lV8wBsc85fSh?_a=BAMAMiiu0","description":"Principal Solution Architecture ","worksFor":{"@type":"Organization","name":"Metalab","logo":"https://www.google.com/s2/favicons?domain=metalab.com&sz=128"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"EndorseAction"},"userInteractionCount":81870}},"image":"https://media.daily.dev/image/upload/s--Ut1eO4iV--/f_auto/v1781199659/posts/gBo4Pu24m?_a=BAMAMiWQ0","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":156},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":27}],"comment":[{"@type":"Comment","text":"Answer: D — HTTP/3 to clients, HTTP/2 to origin\nThe problem is the last mile. Mobile clients on lossy connections are where TCP falls apart.\nHTTP/2 fixed HTTP/1.1’s application-layer head-of-line blocking by multiplexing streams over one TCP connection. But TCP itself still has head-of-line blocking at the transport layer. A single lost packet stalls ALL streams until it’s retransmitted. On a 4G connection dropping 2% of packets, your 20-stream HTTP/2 connection grinds to a halt.\nHTTP/3 runs on QUIC (UDP). Each stream is independent. A dropped packet stalls only that stream, the other 19 keep flowing. Add 0-RTT resumption (subsequent connections skip the handshake entirely) and you shave 1-2 round trips on every reconnect. That’s where the latency gains come from.\nBut your datacenter leg (CDN to origin) is a different story. It’s a stable, low-loss private network. QUIC’s benefits disappear on reliable connections. HTTP/2 multiplexing is mature, well-optimized, and doesn’t carry QUIC’s CPU overhead for cryptography (QUIC encrypts everything at the transport layer, no cleartext, ever).\nThis is exactly how Cloudflare, Fastly, and Akamai operate: HTTP/3 on the edge-facing side, HTTP/2 (or even HTTP/1.1 with keepalive) on the origin-facing side.","datePublished":"2026-06-11T17:41:54.450Z","dateModified":"2026-06-12T06:54:46.782Z","url":"https://daily.dev/posts/gBo4Pu24m#c-Rq3hA6WXt","author":{"@type":"Person","name":"Joud Awad","url":"https://daily.dev/joudawad","image":"https://media.daily.dev/image/upload/s--dOB9RaXY--/f_auto/v1773320801/avatars/avatar_iaC4JsBU0lV8wBsc85fSh?_a=BAMAMiiu0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":18}},{"@type":"Comment","text":"Why A falls short (HTTP/2 only):\nHTTP/2 multiplexing is a genuine improvement over HTTP/1.1, but it doesn’t solve TCP head-of-line blocking. On lossy mobile connections, you’re still at the mercy of the TCP retransmission window. For p99 tail latency on bad networks, HTTP/2 won’t move the needle.","datePublished":"2026-06-11T17:42:00.395Z","url":"https://daily.dev/posts/gBo4Pu24m#c-MEuEvbexM","author":{"@type":"Person","name":"Joud Awad","url":"https://daily.dev/joudawad","image":"https://media.daily.dev/image/upload/s--dOB9RaXY--/f_auto/v1773320801/avatars/avatar_iaC4JsBU0lV8wBsc85fSh?_a=BAMAMiiu0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":6}},{"@type":"Comment","text":"Why C is wrong (HTTP/2 end-to-end):\nSame problem as A. You’ve done nothing about the last mile. Consistent HTTP/2 end-to-end sounds clean, but “clean” doesn’t show up in your p99.","datePublished":"2026-06-11T17:42:26.716Z","url":"https://daily.dev/posts/gBo4Pu24m#c-u0vMx7Vqp","author":{"@type":"Person","name":"Joud Awad","url":"https://daily.dev/joudawad","image":"https://media.daily.dev/image/upload/s--dOB9RaXY--/f_auto/v1773320801/avatars/avatar_iaC4JsBU0lV8wBsc85fSh?_a=BAMAMiiu0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":4}},{"@type":"Comment","text":"Why B is wrong (HTTP/3 only):\nHTTP/3 to origin introduces real operational risk. Enterprise firewalls and some cloud load balancers block UDP port 443 or rate-limit it. Your origin infra isn’t the bottleneck, the last mile is. Fixing the origin leg with QUIC doesn’t help the problem; it just adds complexity and potential breakage.","datePublished":"2026-06-11T17:42:02.751Z","url":"https://daily.dev/posts/gBo4Pu24m#c-ddF7RUh4n","author":{"@type":"Person","name":"Joud Awad","url":"https://daily.dev/joudawad","image":"https://media.daily.dev/image/upload/s--dOB9RaXY--/f_auto/v1773320801/avatars/avatar_iaC4JsBU0lV8wBsc85fSh?_a=BAMAMiiu0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":4}},{"@type":"Comment","text":"Also, it would mean a lot to me if you could support my content and stay in touch 🙏\n\nYouTube: https://www.youtube.com/@system-design-lab\nLinkedIn: https://www.linkedin.com/in/joud-awad/\nMedium Blog: https://joudwawad.medium.com/\nSubstack: https://joudawad.substack.com/","datePublished":"2026-06-11T17:42:39.612Z","url":"https://daily.dev/posts/gBo4Pu24m#c-OLDXX5jQN","author":{"@type":"Person","name":"Joud Awad","url":"https://daily.dev/joudawad","image":"https://media.daily.dev/image/upload/s--dOB9RaXY--/f_auto/v1773320801/avatars/avatar_iaC4JsBU0lV8wBsc85fSh?_a=BAMAMiiu0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2}}],"isPartOf":{"@type":"WebPage","url":"https://daily.dev/sources/iac4jsbu0lv8wbsc85fsh","name":"Joud Awad"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Joud Awad","item":"https://daily.dev/sources/iac4jsbu0lv8wbsc85fsh"},{"@type":"ListItem","position":3,"name":"36/60 Days System Design Questions"}]}
```

