I was on a call with an e-commerce team last year that thought they were "advanced" because they'd turned on a CDN five years ago. Their cache hit ratio was 62%, purges took 20 minutes, and every config change required a support ticket. They weren't advanced, they were just comfortable. That's the trap a maturity model is designed to break — it doesn't tell you you're doing okay, it shows you exactly where you're stuck and what the next level actually demands.
Where Most Teams Actually Sit: The Five Stages of CDN Maturity
After a decade of migrations, outages, and post-mortems, I've come to see the same five stages everywhere. Level 1 is Ad-Hoc: you've pointed your DNS at a CDN, you're caching images, and that's about it. No version-controlled config, no real monitoring beyond what the vendor dashboard gives you. Level 2 is Managed: you've got basic cache rules, you've turned on TLS and maybe WAF, and someone on the team actually owns the CDN config. Most companies I assess live here for years without realizing it. They think they're done because the site is faster than it was without a CDN.
Level 3 is where things get intentional. That's Optimized — you're tuning origin shielding, you're writing proper Cache-Control and CDN-Cache-Control headers, you're using stale-while-revalidate and stale-if-error to smooth over origin blips. You’ve got tiered caching and you’ve stopped using wildcard purges for every little asset update. Level 4 is Automated: infrastructure as code, CI/CD for edge config, synthetic tests on every deploy. And Level 5 is Intelligent Edge: you're running compute at the edge, doing real-time image optimization, A/B testing, and using the CDN as an application platform, not just a cache. The jump from Level 2 to Level 3 is the hardest because it forces you to fix origin behavior, not just CDN settings.
I like to score each capability area from 1 to 5 so you can see the unevenness. Your security might be Level 4 while your caching strategy is still Level 1. That imbalance is normal, and it's exactly what makes the model useful — you don't need to be Level 5 everywhere. You need to know which gaps are hurting performance and reliability right now. I've used this JSON template in workshops to get teams aligning quickly instead of arguing over opinions.
{
"cdn_maturity_assessment": {
"date": "2024-12-15",
"assessor": "platform-team",
"capabilities": {
"caching_strategy": {
"score": 2,
"evidence": "Cache hit ratio 68%, no origin shield, uses max-age=0 for HTML",
"target_level": 3
},
"performance_tuning": {
"score": 3,
"evidence": "HTTP/2 + Brotli enabled, early hints tested",
"target_level": 4
},
"security_posture": {
"score": 4,
"evidence": "WAF in block mode, mTLS for origin, bot management enabled",
"target_level": 4
},
"automation": {
"score": 1,
"evidence": "Manual portal changes, no Terraform/Pulumi, no config review",
"target_level": 3
},
"observability": {
"score": 2,
"evidence": "Only vendor dashboard, no log streaming to SIEM",
"target_level": 3
}
},
"priority": ["automation", "caching_strategy", "observability"]
}
}
Running an Honest Assessment Without Fooling Yourself
You can't assess maturity by reading your CDN's marketing page. You've got to look at how you actually operate day to day. I run these assessments as a half-day workshop with engineering, SRE, and security in the same room — not as a survey sent around by email. We'll walk through real incidents: How long did the last purge take to propagate globally? Who approved the last edge rule change and where's the pull request? Can we roll back a bad config in under five minutes? If the answer is "we'd have to call support," that's not Level 3, no matter what your architecture diagram says.
The questions that reveal the truth are often boring. Are you sending correct Cache-Control headers from origin, or are you overriding everything at the edge because you don't trust the app team? The HTTP Working Group Specifications are pretty clear on how freshness and validation should work, and the guides on web.dev Articles explain stale-while-revalidate better than most vendor docs. If you haven't implemented that correctly, you'll never get past Level 2. I once audited a media site that had a 92% hit ratio on paper, but half of that was caching 404s and personalized API responses they shouldn't have been caching at all. The metric looked great until we checked what was being cached.
Don't try to fix everything at once. Pick the one or two capabilities where moving up a level unblocks your next business goal. If you're planning a migration in the next two quarters, use your assessment to feed directly into a Comprehensive CDN Migration Checklist: Every Step from Planning to Cutover so you don't carry old bad habits to the new provider. And be honest about ownership — I've seen teams score themselves a 4 on automation when their Terraform files hadn't been applied in nine months. Your score should reflect what's running in production today, not what's in a repo.
#!/bin/bash
# Quick CDN capability check - run against prod URL
# Checks cache status, TTFB, and header hygiene
URL="https://www.example.com/static/app.js"
echo "Testing $URL"
for i in 1 2 3; do
echo "--- Request $i ---"
curl -s -o /dev/null -D - "$URL" \
-H "Pragma: no-cache" | grep -iE '^(x-cache|cf-cache-status|age|cache-control|strict-transport-security|x-origin-shield):'
curl -s -o /dev/null -w "TTFB: %{time_starttransfer}s | Total: %{time_total}s | Size: %{size_download} bytes\n" "$URL"
done
# Check for stale-while-revalidate support
echo "--- Cache-Control Analysis ---"
curl -s -I "$URL" | grep -i cache-control
# Expect: public, max-age=31536000, stale-while-revalidate=86400, stale-if-error=86400
What Each Level Looks Like in Real Metrics
Maturity models fail when they stay abstract. You need numbers that tell you when you've actually graduated to the next level. I don't care if a team *says* they're Level 4; I want to see their purge propagation, their hit ratio, and their deploy frequency. When we moved a large SaaS client from Level 2 to Level 3 last year, the only thing that convinced their CTO was showing origin offload go from 58% to 91% in two weeks after we fixed their cache keys and added origin shield. That single metric paid for the whole project.
Use the table below as a reality check, not a vanity scorecard. Your numbers will vary by content type — an API-heavy app will never hit 98% cache ratio — but the trend and the operational targets should be consistent. If your p95 TTFB is still above 600ms globally, you aren't optimized, no matter how many features you've turned on. And if you're evaluating vendors to help you close these gaps, don't rely on slide decks. Run a structured test with a CDN Vendor Evaluation Matrix: Scoring Providers on What Actually Matters and make them prove purge times and cache performance on your traffic. When you're ready to formalize requirements, a solid CDN RFP Template: Writing Requirements That Get Meaningful Vendor Responses will force you to define those target metrics in writing instead of waving your hands about "better performance."
| Capability Metric | Level 2: Managed | Level 3: Optimized | Level 4+: Automated / Intelligent |
|---|---|---|---|
| Cache Hit Ratio (static assets) | 70% - 85% | 92% - 97% | >97% with tiered cache + origin shield |