Podcast delivery looks like the easiest job on this roadmap: static MP3 files behind a CDN, done. The traps are all in the ecosystem around the files — measurement prefixes that stack redirects onto every play, industry counting rules built on range-request quirks, RSS feeds polled relentlessly by every app on earth, and a release-morning traffic shape that looks like a small launch. Audio is simple; podcasting is not quite.
The workload: files, feeds and apps
Three moving parts: enclosure files (the audio — typically MP3 or AAC, tens of megabytes an episode), the RSS feed that lists them, and a client zoo you do not control — hundreds of apps plus the big platforms, each with its own download, streaming and retry behaviour. Unlike web traffic, most fetches are automated: apps auto-download new episodes to subscribers on release, which both creates the spike (section five) and means your delivery must be friendly to background clients on mobile networks — resumable, patient, cache-stable. There is no player you can tune and no JavaScript you can run; every control you have lives in the files, the feed and the URLs.
Audio files: TTLs, ranges and immutability
Treat episodes as immutable: publish under a per-episode URL, cache with long TTLs, and if you must replace audio (corrections, re-edits), publish a new file and update the feed rather than overwriting — apps cache aggressively and a purged-in-place episode reaches listeners unevenly for days. Range requests are not optional: apps stream by ranges, resume interrupted downloads by ranges, and — consequentially — industry measurement counts by ranges, so verify your CDN serves 206 responses correctly from cache on these file sizes (behaviour notes in our range-requests piece). Keep ID3 metadata at the front of the file so players can read titles and chapters from the first range without fetching the tail. And resist per-listener URLs on the media itself — every variant is a cache miss, and the personalization that matters belongs in measurement (section four), not in the object.
The RSS feed: small file, heavy traffic
The feed is a few hundred kilobytes fetched millions of times: platforms and apps poll it on schedules you do not control, some of them rudely. Cache it at the edge with a TTL of a few minutes — short enough that a new episode propagates promptly, long enough that the polling herd hits cache — and make sure conditional requests work end to end: correct ETag/Last-Modified handling turns most polls into tiny 304s, which is the difference between the feed being free and the feed being a standing origin load. Feed changes are also your only push channel to the ecosystem, so releases are simply feed updates; there is no purge choreography if TTLs are short, and the general rules in setting TTLs apply with the feed as the classic “small, hot, briefly fresh” object.
Measurement without wrecking delivery
Podcast analytics live in the delivery path: measurement services work as redirect prefixes stacked in front of the enclosure URL, so a single play may traverse two or three 301s before reaching your CDN. Each prefix adds a round trip to time-to-audio and a party who can break playback — so keep the chain short, prefer services that measure from your CDN logs over ones that add hops where you have the choice, and monitor the full chain externally, because “the podcast is down” is very often a dead prefix, not your delivery. Counting itself follows industry guidelines that de-duplicate by IP-and-agent and require a minimum-served threshold precisely because range requests fragment a play into many partial responses — which is why your raw CDN request counts will always exceed measured listens, and why log-based measurement needs your log fields intact: ranges, bytes served, user agent, referrer. Decide early which number is the number, or every stakeholder meeting becomes a reconciliation exercise.
Release spikes, back-catalogue and video
Release morning is a miniature launch: the moment the feed updates, subscriber auto-downloads arrive in a wave that dwarfs the day’s baseline — predictable in time (you chose the publish moment) and shape, so let the edge absorb it: the new episode is one hot object, hit ratio should be effectively total within minutes, and origin egress should barely move; if it does, request collapsing on the new object is the first thing to check. The back-catalogue behaves like VOD’s long tail — steady trickle across thousands of episodes, ideal for an origin shield and cheap storage. And as podcasts grow video versions, the delivery quietly stops being this guide and becomes VOD delivery — segmented, ladder-encoded, an order of magnitude more bytes — worth recognizing as a different workload before the invoice does it for you.
