<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>The Ops Community ⚙️: Todd H. Gardner</title>
    <description>The latest articles on The Ops Community ⚙️ by Todd H. Gardner (@toddhgardner).</description>
    <link>https://community.ops.io/toddhgardner</link>
    <image>
      <url>https://community.ops.io/images/KME56du659qEAuksXNEZJJ0WeCNUmzeIAM3H1l068P4/rs:fill:90:90/g:sm/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL3Vz/ZXIvcHJvZmlsZV9p/bWFnZS83OS9iZTFm/NGU0NC04YmRkLTRk/MjYtOTU5YS03Mzkz/MTcwMzQ2YmUuanBn</url>
      <title>The Ops Community ⚙️: Todd H. Gardner</title>
      <link>https://community.ops.io/toddhgardner</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://community.ops.io/feed/toddhgardner"/>
    <language>en</language>
    <item>
      <title>How to Audit Your Domain's Certificate History (And Why You Should Be Terrified)</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Tue, 28 Oct 2025 18:45:14 +0000</pubDate>
      <link>https://community.ops.io/certkit/how-to-audit-your-domains-certificate-history-and-why-you-should-be-terrified-lah</link>
      <guid>https://community.ops.io/certkit/how-to-audit-your-domains-certificate-history-and-why-you-should-be-terrified-lah</guid>
      <description>&lt;p&gt;You probably have no idea how many SSL certificates exist for your domains. Or who has them.&lt;/p&gt;

&lt;p&gt;Most ops teams track the certificates they issue. Nobody tracks the certificates they didn't issue. The ones from your previous CDN. Your former hosting provider. That contractor who left six months ago. They're all still out there. Still valid.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://certkit.io/blog/bygonessl-and-the-certificate-that-wouldnt-die" rel="noopener noreferrer"&gt;BygoneSSL research&lt;/a&gt; found 1.5 million domains with valid certificates owned by the wrong people. Your domains are probably in that list.&lt;/p&gt;

&lt;p&gt;Time to find out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with Certificate Transparency Logs
&lt;/h2&gt;

&lt;p&gt;Every publicly trusted certificate gets logged. That's good news. It means you can find them.&lt;/p&gt;

&lt;p&gt;Go to &lt;a href="https://www.certkit.io/tools/ct-logs/" rel="noopener noreferrer"&gt;CertKit Certificate Search&lt;/a&gt; and search for your domain. You want to see everything. Not just valid certs. Everything.&lt;/p&gt;

&lt;p&gt;What you'll find will make you uncomfortable.&lt;/p&gt;

&lt;p&gt;I searched for a client's domain last week. Found over 100 certificates. They knew about 3.&lt;/p&gt;

&lt;p&gt;The rest? Old hosting providers. Development agencies. That "quick test" someone ran with Let's Encrypt. A wildcard certificate from their previous CDN that doesn't expire until 2026.&lt;/p&gt;

&lt;p&gt;Each one is a potential security incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Vendors You Forgot About
&lt;/h2&gt;

&lt;p&gt;Look at the issuer field for each certificate. See Let's Encrypt? Sectigo? DigiCert? Now ask yourself: who uses those CAs?&lt;/p&gt;

&lt;p&gt;That Sectigo certificate from 2023? Probably your old CDN. Still valid for another 200 days.&lt;/p&gt;

&lt;p&gt;The Let's Encrypt cert renewed every 90 days? Could be that staging server your contractor set up. The one that's supposedly decommissioned. Except someone's still renewing the certificate.&lt;/p&gt;

&lt;p&gt;The DigiCert wildcard? Your previous hosting provider included it "free" with your plan. You moved providers. They kept the certificate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the SANs (Subject Alternative Names)
&lt;/h2&gt;

&lt;p&gt;This is where things get really fun. Multi-domain certificates.&lt;/p&gt;

&lt;p&gt;Your domain might be bundled with 50 other domains on the same certificate. Maybe 500. I've seen CDN certificates with over 700 domains.&lt;/p&gt;

&lt;p&gt;Here's why that matters: If any of those domains changes ownership, the new owner can revoke the entire certificate. Your site goes down because some random domain on your shared certificate got sold.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Subdomain Problem
&lt;/h2&gt;

&lt;p&gt;Wildcards are convenient. They're also dangerous.&lt;/p&gt;

&lt;p&gt;That *.yourdomain.com certificate you issued two years ago? It works for every subdomain. Including the ones you delegated to vendors. The test environments you forgot about. The staging server that "doesn't exist anymore."&lt;/p&gt;

&lt;p&gt;Search for these patterns in your CT logs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;*.yourdomain.com (wildcards)&lt;/li&gt;
&lt;li&gt;staging.yourdomain.com&lt;/li&gt;
&lt;li&gt;test.yourdomain.com
&lt;/li&gt;
&lt;li&gt;dev.yourdomain.com&lt;/li&gt;
&lt;li&gt;Any vendor-specific subdomains&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each valid certificate is active infrastructure, whether you know about it or not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Can Request Certificates?
&lt;/h2&gt;

&lt;p&gt;This is the question nobody asks. Who can prove control of your domain?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anyone with access to your DNS&lt;/li&gt;
&lt;li&gt;Anyone receiving admin emails&lt;/li&gt;
&lt;li&gt;Anyone who can place files on your web server&lt;/li&gt;
&lt;li&gt;Anyone with access to your cloud account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a lot of people. Current employees. Former employees. Your DNS provider. Your CDN. Your hosting company.&lt;/p&gt;

&lt;p&gt;They can all request certificates. Right now. And you won't know until you check the CT logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What To Do About It
&lt;/h2&gt;

&lt;p&gt;You can't revoke certificates you don't control. Revocation barely works anyway. But you can minimize future damage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Immediate steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Document every certificate you find. Note the expiration dates.&lt;/li&gt;
&lt;li&gt;CAA records. Set them now. Lock down which CAs can issue certificates.&lt;/li&gt;
&lt;li&gt;Monitor CT logs. Weekly at minimum. Daily is better. Or monitor them continuously with CertKit.&lt;/li&gt;
&lt;li&gt;Rotate credentials after vendor changes. DNS passwords, cloud API keys, everything.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Long term fixes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Short certificate lifespans. The &lt;a href="https://www.certkit.io/47-day-certs" rel="noopener noreferrer"&gt;47 day certificates&lt;/a&gt; everyone's complaining about? They solve this problem. A certificate issued today expires before real damage happens.&lt;/p&gt;

&lt;p&gt;Certificate automation. Manual processes can't track this. You need tools that discover, monitor, and manage certificates continuously.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want to automate certificate discovery and monitoring? &lt;a href="https://www.certkit.io" rel="noopener noreferrer"&gt;CertKit&lt;/a&gt; tracks every certificate for your domains, not just the ones you issued. Because the certificates you don't know about are the ones that hurt you.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>secops</category>
      <category>certificates</category>
    </item>
    <item>
      <title>Let's Encrypt Ate Everyone's Lunch: From 0% to 59% Market Share</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Mon, 06 Oct 2025 21:13:49 +0000</pubDate>
      <link>https://community.ops.io/certkit/lets-encrypt-ate-everyones-lunch-from-0-to-59-market-share-5h2l</link>
      <guid>https://community.ops.io/certkit/lets-encrypt-ate-everyones-lunch-from-0-to-59-market-share-5h2l</guid>
      <description>&lt;p&gt;Remember paying $300 for an SSL certificate?&lt;/p&gt;

&lt;p&gt;Of course you do. It was 2015. You had a budget line item called "certificates." Purchasing needed three approvals. The renewal reminder went to Dave, who left six months ago.&lt;/p&gt;

&lt;p&gt;Then Let's Encrypt showed up and chose violence.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers Don't Lie
&lt;/h2&gt;

&lt;p&gt;2016: Let's Encrypt had 0.1% market share.&lt;br&gt;
2024: 59%.&lt;/p&gt;

&lt;p&gt;That's not growth. That's annihilation.&lt;/p&gt;

&lt;p&gt;They didn't just disrupt the certificate industry. They ate it. While the traditional CAs were figuring out how to charge more for wildcard domains, Let's Encrypt was issuing millions of free certificates. Daily. With 90-day lifetimes that forced everyone to automate whether they liked it or not.&lt;/p&gt;

&lt;p&gt;Which, surprise, is exactly what we needed for &lt;a href="https://www.certkit.io/blog/47-day-certificate-ultimatum" rel="noopener noreferrer"&gt;47 day certificates&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Business Model That Shouldn't Have Worked
&lt;/h2&gt;

&lt;p&gt;Here's what Let's Encrypt proposed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free certificates&lt;/li&gt;
&lt;li&gt;No phone support
&lt;/li&gt;
&lt;li&gt;No sales team&lt;/li&gt;
&lt;li&gt;90-day expiration (not the 3-year cash cows)&lt;/li&gt;
&lt;li&gt;API-only provisioning&lt;/li&gt;
&lt;li&gt;Funded by... donations?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The CAs laughed. Actually laughed.&lt;/p&gt;

&lt;p&gt;"Nobody will trust free certificates."&lt;br&gt;
"Enterprises need hand-holding."&lt;br&gt;
"90 days is too short."&lt;br&gt;
"Automation is too complex for normal ops teams."&lt;/p&gt;

&lt;p&gt;Turns out normal ops teams were already automating everything else. Adding one more API call? Not exactly rocket science.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Part Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Let's Encrypt didn't win because they were free.&lt;/p&gt;

&lt;p&gt;They won because they removed the friction.&lt;/p&gt;

&lt;p&gt;No sales calls. No "contact us for pricing." No validation documents. No account managers. No renewal reminders. No phone trees. No support tickets.&lt;/p&gt;

&lt;p&gt;Just: Here's your cert. See you in 90 days.&lt;/p&gt;

&lt;p&gt;We'd been so beaten down by the certificate industrial complex that we forgot what simple looked like.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;certbot certonly &lt;span class="nt"&gt;--webroot&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; /var/www/html &lt;span class="nt"&gt;-d&lt;/span&gt; example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done. Cert issued. Automatically renewed until the heat death of the universe.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Panic Was Delicious
&lt;/h2&gt;

&lt;p&gt;Watch a $600 million industry realize it's been disrupted by a nonprofit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2016: "It's just for hobbyists."&lt;/li&gt;
&lt;li&gt;2017: "Enterprises will never adopt it."&lt;/li&gt;
&lt;li&gt;2018: "Our Extended Validation certificates are superior."&lt;/li&gt;
&lt;li&gt;2019: "We provide better support."&lt;/li&gt;
&lt;li&gt;2020: "Our management platform is worth the cost."&lt;/li&gt;
&lt;li&gt;2021: "Please?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best part? They started offering free certificates too. But with "premium features." Like what? Support for the free certificates that don't need support because they're automated?&lt;/p&gt;

&lt;p&gt;DigiCert bought Symantec's certificate business for $950 million in 2017.&lt;/p&gt;

&lt;p&gt;That same year, Let's Encrypt was running on a $2.5 million budget.&lt;/p&gt;

&lt;p&gt;And winning.&lt;/p&gt;

&lt;h2&gt;
  
  
  They Fixed the Wrong Problem
&lt;/h2&gt;

&lt;p&gt;The CAs spent years optimizing the wrong thing. Making certificate purchasing "easier." Building better dashboards. Adding more validation levels.&lt;/p&gt;

&lt;p&gt;Let's Encrypt realized the problem wasn't purchasing.&lt;/p&gt;

&lt;p&gt;It was that certificates existed at all.&lt;/p&gt;

&lt;p&gt;Make them invisible. Make them automatic. Make them someone else's problem (specifically: nobody's problem).&lt;/p&gt;

&lt;p&gt;Eight years later, Let's Encrypt issues certificates for most of the encrypted web. Your bank, your cloud provider, probably this blog.&lt;/p&gt;

&lt;p&gt;All running on infrastructure that the "serious" CAs said would never work.&lt;/p&gt;

&lt;p&gt;Turns out "never" is about 8 years in certificate time.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>secops</category>
      <category>certificates</category>
      <category>security</category>
    </item>
    <item>
      <title>Why Every DevOps Team Has a Certificate Horror Story</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Fri, 19 Sep 2025 15:40:45 +0000</pubDate>
      <link>https://community.ops.io/certkit/why-every-devops-team-has-a-certificate-horror-story-fk1</link>
      <guid>https://community.ops.io/certkit/why-every-devops-team-has-a-certificate-horror-story-fk1</guid>
      <description>&lt;h2&gt;
  
  
  The Certificate That Ruined Christmas
&lt;/h2&gt;

&lt;p&gt;It was December 23rd, 4:47 PM. Sarah was halfway through her third glass of office party punch when her phone exploded. Production was down. Not slow. Not degraded. Dead.&lt;/p&gt;

&lt;p&gt;The wildcard certificate had expired.&lt;/p&gt;

&lt;p&gt;The one that covered *.api.company.com, *.admin.company.com, and seventeen other subdomains nobody documented. The renewal script? It had been failing silently for six weeks. The logs? Rotated into oblivion. The person who wrote it? Left for greener pastures in October.&lt;/p&gt;

&lt;p&gt;Sarah spent Christmas Eve on a Zoom call with three other engineers, manually generating certificates while the CEO asked "how did this happen?" every fifteen minutes.&lt;/p&gt;

&lt;p&gt;Every DevOps team has this story. The details change, but the pain is universal.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Museum of Certificate Disasters
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Demo Day Special
&lt;/h3&gt;

&lt;p&gt;Picture this: Your CEO is presenting to potential investors. Big screen. Lots of money in the room. Click to the product demo and—browser warning. "Your connection is not private." &lt;/p&gt;

&lt;p&gt;Turns out that staging environment you spun up six months ago for "just this one demo"? Its certificate expired yesterday. The renewal was handled by Gary's laptop. Gary's in Bali. Gary doesn't check Slack on vacation.&lt;/p&gt;

&lt;p&gt;The CEO improvises. The investors are "concerned about technical operations." You update your resume.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Acquisition Surprise
&lt;/h3&gt;

&lt;p&gt;Your company just acquired a smaller competitor. Congratulations! You now own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;47 domains nobody has a list of&lt;/li&gt;
&lt;li&gt;Certificates from three different CAs&lt;/li&gt;
&lt;li&gt;At least six that expired last year but "the sites still work somehow"&lt;/li&gt;
&lt;li&gt;A WordPress multisite with a cert that expires tomorrow&lt;/li&gt;
&lt;li&gt;No documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The previous team's solution? A spreadsheet on someone's desktop titled "certs_final_FINAL_v2_actually_final.xlsx". It was last updated in 2021.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Prometheus Punishment
&lt;/h3&gt;

&lt;p&gt;You built beautiful monitoring. Prometheus, Grafana, the works. Alerts for everything. CPU, memory, disk space, network latency, even that custom metric for coffee machine status.&lt;/p&gt;

&lt;p&gt;The monitoring certificate expired on Tuesday.&lt;/p&gt;

&lt;p&gt;Nobody knew because... the monitoring was down.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Load Balancer Lottery
&lt;/h3&gt;

&lt;p&gt;Three identical load balancers. Same config. Same automation. Same certificate renewal script.&lt;/p&gt;

&lt;p&gt;Two renewed perfectly. The third didn't.&lt;/p&gt;

&lt;p&gt;Why? Nobody knows. The logs show success. The script returned 0. The old certificate is still being served. You check everything twice. Time zones? Permissions? Phase of the moon?&lt;/p&gt;

&lt;p&gt;Four hours later you manually replace it and add "investigate later" to a ticket that will never be investigated.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Forgotten Fleet
&lt;/h3&gt;

&lt;p&gt;That certificate scanner you ran last month found 73 certificates across your infrastructure. You manage 12 of them. The others?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The printer management interface (apparently it has HTTPS?)&lt;/li&gt;
&lt;li&gt;Bob's development VM that's somehow internet-facing&lt;/li&gt;
&lt;li&gt;A Grafana instance from a hackathon three years ago&lt;/li&gt;
&lt;li&gt;The old CEO's vanity project that "we're definitely shutting down next month" for the past two years&lt;/li&gt;
&lt;li&gt;Something called "test-server-do-not-delete-important"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Half expired already. The other half expire next month. None are in your renewal automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Keeps Happening
&lt;/h2&gt;

&lt;p&gt;We're smart people. We automate everything. We have CI/CD pipelines that would make NASA jealous. So why do certificates keep biting us?&lt;/p&gt;

&lt;p&gt;Because certificate management exists in the gap between "too important to ignore" and "too boring to do right."&lt;/p&gt;

&lt;p&gt;It's not exciting like Kubernetes. It's not trendy like observability. It's just... certificates. So we cobble together the minimum viable solution and promise to "revisit this next quarter."&lt;/p&gt;

&lt;p&gt;Next quarter never comes. Until 4:47 PM on December 23rd.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Universal Constants of Certificate Pain
&lt;/h2&gt;

&lt;p&gt;Every certificate horror story shares the same elements:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's always the one you forgot about.&lt;/strong&gt; Never the main production cert you monitor obsessively. It's the Jenkins box. The VPN appliance. That API endpoint only accounting uses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The person who knows is gone.&lt;/strong&gt; They left for a startup. Or they're on parental leave. Or they just forgot because they set it up three years ago after four beers at the company offsite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The documentation lies.&lt;/strong&gt; If it exists at all. That runbook? It references servers that were decommissioned in 2020. The wiki page? Last updated by an intern who "thinks this is how it works."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It happens at the worst possible time.&lt;/strong&gt; During the big demo. Black Friday. When you're on vacation. When the senior engineer is at a wedding. Murphy's Law was written about SSL certificates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking the Cycle
&lt;/h2&gt;

&lt;p&gt;Here's the thing: we've all tried to fix this. We've written the scripts. Built the automation. Created the runbooks. Set up the monitoring.&lt;/p&gt;

&lt;p&gt;But maintaining certificate infrastructure isn't your job. It's a distraction from your actual job. You didn't become a DevOps engineer to babysit OpenSSL.&lt;/p&gt;

&lt;p&gt;That's why we keep having these disasters. We treat &lt;a href="https://www.certkit.io/blog/why-you-built-your-own-certificate-management" rel="noopener noreferrer"&gt;certificate management like a side project&lt;/a&gt; instead of the critical infrastructure it actually is. We wouldn't run our own power plant. Why are we running our own certificate authority?&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Horror Story
&lt;/h2&gt;

&lt;p&gt;Every DevOps engineer reading this is nodding along, remembering their own certificate disaster. The one that ruined a weekend. Or a holiday. Or a career.&lt;/p&gt;

&lt;p&gt;Maybe it's time to stop collecting these war stories.&lt;/p&gt;

&lt;p&gt;Maybe it's time to let someone else worry about whether the certificate renewal script will work next month.&lt;/p&gt;

&lt;p&gt;Maybe it's time to stop playing certificate roulette and admit that some problems are worth paying someone else to solve.&lt;/p&gt;

&lt;p&gt;But until then? Check your certificates. That Jenkins box is probably expiring next week.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>secops</category>
      <category>security</category>
    </item>
    <item>
      <title>Apple's 47-Day SSL Certificate Plan is Your Next On-Call Nightmare</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Wed, 03 Sep 2025 21:09:04 +0000</pubDate>
      <link>https://community.ops.io/certkit/apples-47-day-ssl-certificate-plan-is-your-next-on-call-nightmare-2aec</link>
      <guid>https://community.ops.io/certkit/apples-47-day-ssl-certificate-plan-is-your-next-on-call-nightmare-2aec</guid>
      <description>&lt;p&gt;Remember when SSL certificates lasted three years? &lt;/p&gt;

&lt;p&gt;Pepperidge Farm remembers.&lt;/p&gt;

&lt;p&gt;In 2020, Apple decided that was too easy. Now we're heading toward 47-day certificates. Not 45. Not 50. Forty-seven days, because apparently Apple's random number generator picked that one.&lt;/p&gt;

&lt;p&gt;Let me walk you through the timeline of how we got here, and why your 2027 is about to become certificate renewal hell.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Timeline to Madness
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Good Old Days (Pre-2020)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Certificate Lifespan: 3 years (1,095 days)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Life was simple. You'd buy a certificate, install it, set a calendar reminder for 2.5 years later, then forget about it. Sure, sometimes that reminder got lost and production went down, but that was a once-every-three-years problem.&lt;/p&gt;

&lt;p&gt;My team managed 200+ certificates this way. One spreadsheet. Quarterly reviews. Bob from accounting could handle renewals. It worked.&lt;/p&gt;

&lt;h3&gt;
  
  
  September 2020: The First Cut
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Certificate Lifespan: 1 year (398 days)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apple announces at their developer conference that Safari will only trust certificates issued for 398 days or less. Not 365 days like a normal year. 398 days, because Apple.&lt;/p&gt;

&lt;p&gt;Google immediately agrees. Mozilla follows. The certificate authorities cave within weeks.&lt;/p&gt;

&lt;p&gt;Suddenly, your annual renewal process needs to happen... annually. Revolutionary.&lt;/p&gt;

&lt;h3&gt;
  
  
  March 2026: The Plot Thickens
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Certificate Lifespan: 200 days&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Why stop at one year?" asks someone at Apple who clearly doesn't manage certificates.&lt;/p&gt;

&lt;p&gt;Next March—that's in 6 months, people—we drop to 200 days.&lt;/p&gt;

&lt;p&gt;200 days. That's a renewal every six and a half months. Your nice quarterly review process? Useless. That junior developer who "figured out the cert stuff"? They're now spending 15% of their time on certificates.&lt;/p&gt;

&lt;h3&gt;
  
  
  March 2027: Getting Ridiculous
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Certificate Lifespan: 100 days&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A renewal every three months. Four times a year. Per certificate.&lt;/p&gt;

&lt;p&gt;Got 100 certificates? That's 400 renewals annually. That's more than one renewal every single working day.&lt;/p&gt;

&lt;h3&gt;
  
  
  March 2029: Peak Insanity
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Certificate Lifespan: 47 days&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Forty. Seven. Days.&lt;/p&gt;

&lt;p&gt;Why 47? Who knows. Maybe someone at Apple lost a bet. Maybe it's a Hitchhiker's Guide reference. Maybe they just hate us.&lt;/p&gt;

&lt;p&gt;At 47 days, you're renewing certificates eight times per year. Per certificate. &lt;/p&gt;

&lt;p&gt;Let's do the math that Apple apparently didn't:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100 certificates × 8 renewals = 800 renewal events per year&lt;/li&gt;
&lt;li&gt;800 renewals ÷ 250 working days = 3.2 renewals every single day&lt;/li&gt;
&lt;li&gt;Zero room for error&lt;/li&gt;
&lt;li&gt;Zero time for vacation&lt;/li&gt;
&lt;li&gt;Zero patience left&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Operational Reality Nobody's Talking About
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Manual Processes Are Dead
&lt;/h3&gt;

&lt;p&gt;That runbook where you SSH into servers and copy certificates? Dead.&lt;/p&gt;

&lt;p&gt;The Ansible playbook Jim wrote in 2019? Dead.&lt;/p&gt;

&lt;p&gt;At 47-day intervals, a single failure cascades immediately. Miss one renewal because someone's on vacation? You've got 47 days to catch it. Except you won't, because certificate #2 is expiring tomorrow, and #3 the day after that.&lt;/p&gt;

&lt;h3&gt;
  
  
  Change Windows Become Impossible
&lt;/h3&gt;

&lt;p&gt;"We only deploy on Tuesdays between 2-4 PM after CAB approval."&lt;/p&gt;

&lt;p&gt;Cool story. Your certificates expire when they expire. That carefully planned change management process? It's about to meet the reality of 8x more certificate deployments.&lt;/p&gt;

&lt;p&gt;Your options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get blanket approval for certificate renewals (good luck with that audit)&lt;/li&gt;
&lt;li&gt;Automate everything (should've started yesterday)&lt;/li&gt;
&lt;li&gt;Watch everything burn (honestly, might be easier)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Hidden Costs Multiply
&lt;/h3&gt;

&lt;p&gt;Every certificate renewal isn't just swapping a file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load balancer configs need updating&lt;/li&gt;
&lt;li&gt;CDN certificates need propagation
&lt;/li&gt;
&lt;li&gt;Service restarts risk downtime&lt;/li&gt;
&lt;li&gt;Monitoring needs to verify the update&lt;/li&gt;
&lt;li&gt;Documentation needs to reflect changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At 47 days, you're doing this dance constantly. Forever. Until you die or change careers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tools Are Not Ready
&lt;/h2&gt;

&lt;p&gt;Your $50,000/year monitoring platform that "supports everything"? Doesn't support 47-day automated rotation.&lt;/p&gt;

&lt;p&gt;Your enterprise load balancer? Manual process only.&lt;/p&gt;

&lt;p&gt;Your CDN? API supports updates, but rate-limits you to 10 changes per month.&lt;/p&gt;

&lt;p&gt;Your managed Kubernetes service? Actually, they're probably fine. But everything else is screwed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Actually Means for Your Team
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Staffing Reality
&lt;/h3&gt;

&lt;p&gt;At 47-day certificates, certificate management becomes a full-time job. Not hyperbole. Actual math:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;200 certificates × 8 renewals × 30 minutes per renewal = 800 hours/year&lt;/li&gt;
&lt;li&gt;That's 0.4 FTE just for basic renewals&lt;/li&gt;
&lt;li&gt;Add troubleshooting, failures, and coordination: 1.0 FTE minimum&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Congratulations, you're hiring a Certificate Engineer. That's a real job title now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automation Isn't Optional Anymore
&lt;/h3&gt;

&lt;p&gt;"We'll automate it eventually" becomes "We automate it or we die."&lt;/p&gt;

&lt;p&gt;But here's what automation actually means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rewriting deployment pipelines&lt;/li&gt;
&lt;li&gt;Updating every system configuration&lt;/li&gt;
&lt;li&gt;Building certificate discovery tools&lt;/li&gt;
&lt;li&gt;Creating fallback procedures&lt;/li&gt;
&lt;li&gt;Testing failure scenarios&lt;/li&gt;
&lt;li&gt;Training everyone on the new process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conservative estimate: 6-12 months of engineering work. For certificates. The things that used to just work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Path Forward (Since Apple Won't Stop)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Option 1: Full Automation or Death
&lt;/h3&gt;

&lt;p&gt;Invest heavily now. And I mean now. Not next quarter. Not after the current sprint.&lt;/p&gt;

&lt;p&gt;Build certificate automation that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handles every system, not just the easy ones&lt;/li&gt;
&lt;li&gt;Fails gracefully with automatic rollbacks&lt;/li&gt;
&lt;li&gt;Alerts intelligently without noise&lt;/li&gt;
&lt;li&gt;Scales to thousands of certificates&lt;/li&gt;
&lt;li&gt;Works with your legacy nightmare systems&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Option 2: Managed Certificate Services
&lt;/h3&gt;

&lt;p&gt;Give up. Pay someone else. Let it be their problem.&lt;/p&gt;

&lt;p&gt;Whether it's your CDN provider, a managed certificate service, or &lt;a href="https://www.certkit.io/blog/why-we-built-certkit" rel="noopener noreferrer"&gt;something we built because we're equally frustrated&lt;/a&gt;, the point is: stop pretending this is sustainable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 3: Proxy Everything
&lt;/h3&gt;

&lt;p&gt;Put all your certificates at the edge. Cloudflare, Akamai, whatever. Let them handle the 47-day nonsense. Your internal systems keep their self-signed certs that last forever.&lt;/p&gt;

&lt;p&gt;Not elegant. Not ideal. But it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Part Where I Stop Complaining and Admit Reality
&lt;/h2&gt;

&lt;p&gt;Look, I get it. Shorter certificate lifespans increase security. Compromised certificates have less time to cause damage. Automated systems are more reliable than manual processes. In theory.&lt;/p&gt;

&lt;p&gt;But theory and practice are only the same in theory.&lt;/p&gt;

&lt;p&gt;In practice, we're forcing massive operational changes on an industry that still runs COBOL in production. We're expecting perfect automation from companies that can barely keep their primary systems running. We're creating complexity that will cause more outages than it prevents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Action Items for This Week
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Count your certificates.&lt;/strong&gt; All of them. Including that test server everyone forgot about.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calculate your renewal burden.&lt;/strong&gt; Multiply by 8 for the 2027 reality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start the automation discussion.&lt;/strong&gt; Today. Not tomorrow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget for tooling.&lt;/strong&gt; You're going to need it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update your resume.&lt;/strong&gt; Just in case.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The 47-day certificate apocalypse is coming whether we're ready or not. Apple's decided. Google's agreed. The certificate authorities are implementing it.&lt;/p&gt;

&lt;p&gt;We built &lt;a href="https://www.certkit.io/blog/why-we-built-certkit" rel="noopener noreferrer"&gt;CertKit&lt;/a&gt; because we saw this coming and decided to do something about it. But whether you use our solution, build your own, or just pray to the certificate gods, you need to act now.&lt;/p&gt;

&lt;p&gt;Because in 2029, while you're renewing certificates for the third time this month, remember: Apple thinks this is making the internet "more secure."&lt;/p&gt;

&lt;p&gt;Sure it is.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;How are you preparing for 47-day certificates? Drop your horror stories and survival strategies in the comments. Misery loves company, and we certificate wranglers need all the help we can get.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>secops</category>
      <category>security</category>
      <category>automation</category>
      <category>tools</category>
    </item>
    <item>
      <title>Monitoring Web Performance: Why Your Synthetic Tests Aren't Telling the Whole Story</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Thu, 05 Jun 2025 15:52:00 +0000</pubDate>
      <link>https://community.ops.io/requestmetrics/monitoring-web-performance-why-your-synthetic-tests-arent-telling-the-whole-story-ah1</link>
      <guid>https://community.ops.io/requestmetrics/monitoring-web-performance-why-your-synthetic-tests-arent-telling-the-whole-story-ah1</guid>
      <description>&lt;p&gt;As DevOps and SRE professionals, we're obsessed with monitoring everything. We track server metrics, application performance, and infrastructure health. But when it comes to web performance monitoring, many of us are flying blind without realizing it.&lt;/p&gt;

&lt;p&gt;Here's a reality check that might surprise you: &lt;strong&gt;Google's research found that 50% of websites with perfect Lighthouse scores still fail Core Web Vitals when measured with real user data.&lt;/strong&gt; 🚨&lt;/p&gt;

&lt;p&gt;If you're relying solely on synthetic testing for web performance insights, you're missing critical production issues that could be impacting your users and your SLAs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Synthetic Testing Trap in Production Environments
&lt;/h2&gt;

&lt;p&gt;Most of us use Lighthouse, WebPageTest, or similar tools in our CI/CD pipelines. These synthetic tests are great for catching obvious performance regressions before deployment, but they have serious limitations in production monitoring:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔧 Controlled Environment Bias&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Synthetic tests run in perfect conditions: clean networks, consistent hardware, no browser extensions&lt;/li&gt;
&lt;li&gt;Real users deal with network congestion, device thermal throttling, and competing background processes&lt;/li&gt;
&lt;li&gt;Your CDN might perform differently across geographic regions, but synthetic tests typically run from a single location&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚙️ Infrastructure Reality Gap&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Synthetic tests can't simulate real database load, API response times under actual traffic, or third-party service degradation&lt;/li&gt;
&lt;li&gt;Auto-scaling events, container restarts, and network partitions affect real users but won't show up in synthetic testing&lt;/li&gt;
&lt;li&gt;Load balancer behavior and cache performance vary significantly between synthetic and production traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;📊 Missing Context for SLA Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Synthetic tests give you a single data point, not user segment analysis&lt;/li&gt;
&lt;li&gt;You can't correlate performance issues with business metrics or user behavior&lt;/li&gt;
&lt;li&gt;No visibility into how performance affects conversion rates or user retention&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real User Monitoring: Production Observability for Web Performance
&lt;/h2&gt;

&lt;p&gt;Real User Monitoring (RUM) works by embedding a lightweight JavaScript agent in your web application that collects performance data from actual user sessions. Think of it as APM for the frontend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How RUM Fits Your Monitoring Stack:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// RUM collection happens passively using browser APIs&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;observer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PerformanceObserver&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getEntries&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Send real user metrics to your monitoring platform&lt;/span&gt;
    &lt;span class="nf"&gt;sendToMonitoring&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entryType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;startTime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;connectionType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;effectiveType&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;navigation&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;buffered&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;long-animation-frame&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;buffered&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use a tool that figures all this out for you, like &lt;a href="https://requestmetrics.com/" rel="noopener noreferrer"&gt;Request Metrics&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What RUM Reveals That Synthetic Testing Misses:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;⚡ &lt;strong&gt;Production Load Reality&lt;/strong&gt; - How your application performs under actual traffic patterns, database load, and infrastructure stress&lt;/p&gt;

&lt;p&gt;🌍 &lt;strong&gt;Geographic Performance Variations&lt;/strong&gt; - CDN effectiveness, edge performance, and regional infrastructure issues that affect different user segments&lt;/p&gt;

&lt;p&gt;📱 &lt;strong&gt;Device &amp;amp; Network Diversity&lt;/strong&gt; - Real device performance from your actual user base, not simulated conditions&lt;/p&gt;

&lt;p&gt;🔄 &lt;strong&gt;Progressive Degradation&lt;/strong&gt; - Performance issues that develop over time or during specific traffic patterns&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing RUM in Your DevOps Workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Integration with Existing Monitoring:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Most RUM tools can export metrics to DataDog, New Relic, or your existing observability platform&lt;/li&gt;
&lt;li&gt;Set up alerts based on Core Web Vitals thresholds and business impact metrics&lt;/li&gt;
&lt;li&gt;Correlate frontend performance with backend APM data for full-stack visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure Considerations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RUM agents typically add &amp;lt;10KB to your bundle size&lt;/li&gt;
&lt;li&gt;Use CSP policies to ensure secure data collection&lt;/li&gt;
&lt;li&gt;Consider GDPR compliance for user data collection in your deployment regions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Complete Monitoring Strategy
&lt;/h2&gt;

&lt;p&gt;Don't abandon synthetic testing—use both approaches strategically:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development &amp;amp; CI/CD:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Synthetic tests in your pipeline to catch regressions before deployment&lt;/li&gt;
&lt;li&gt;Performance budgets as part of your deployment gates&lt;/li&gt;
&lt;li&gt;Consistent baseline measurements for A/B testing infrastructure changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Production Monitoring:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RUM for continuous real-user performance monitoring&lt;/li&gt;
&lt;li&gt;Business impact correlation and SLA tracking&lt;/li&gt;
&lt;li&gt;Geographic and device segment analysis for capacity planning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Incident Response:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RUM identifies performance issues affecting real users&lt;/li&gt;
&lt;li&gt;Synthetic tests help reproduce and debug specific problems&lt;/li&gt;
&lt;li&gt;Combined data provides complete picture for post-incident reviews&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tool Selection for Operations Teams
&lt;/h2&gt;

&lt;p&gt;When evaluating RUM solutions, consider:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Integration capabilities&lt;/strong&gt; with your existing monitoring stack&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Real-time alerting&lt;/strong&gt; that integrates with PagerDuty/OpsGenie&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Geographic data collection&lt;/strong&gt; for multi-region deployments&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Custom metrics&lt;/strong&gt; for business-specific performance indicators&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Privacy compliance&lt;/strong&gt; features for global deployments  &lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start small:&lt;/strong&gt; Implement RUM on your most critical user flows first&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Baseline performance:&lt;/strong&gt; Establish current real-user performance metrics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set meaningful alerts:&lt;/strong&gt; Focus on business impact, not just threshold crossings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate and expand:&lt;/strong&gt; Add more pages and metrics based on initial insights&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The biggest surprise most teams discover? Performance issues they never knew existed, often affecting their most valuable user segments.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;For a comprehensive deep-dive into RUM implementation, business impact analysis, and tool selection criteria, check out this detailed guide: &lt;a href="https://requestmetrics.com/web-performance/you-need-rum-to-understand-web-perf/" rel="noopener noreferrer"&gt;Why You Need Real User Monitoring to Really Understand Your Web Performance&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Discussion Questions for the Community:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🤔 How do you currently monitor web performance in your production environments?&lt;/p&gt;

&lt;p&gt;🚀 Have you found gaps between your synthetic test results and actual user complaints?&lt;/p&gt;

&lt;p&gt;⚙️ What's your experience integrating frontend performance monitoring with your existing observability stack?&lt;/p&gt;

&lt;p&gt;Drop your war stories and tool recommendations in the comments! 👇&lt;/p&gt;

</description>
      <category>monitoring</category>
      <category>performance</category>
      <category>devops</category>
      <category>o11y</category>
    </item>
    <item>
      <title>HTTP Caching for DevOps: Supercharge Site Performance Without Code Changes</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Fri, 28 Feb 2025 17:06:02 +0000</pubDate>
      <link>https://community.ops.io/requestmetrics/http-caching-for-devops-supercharge-site-performance-without-code-changes-1o8g</link>
      <guid>https://community.ops.io/requestmetrics/http-caching-for-devops-supercharge-site-performance-without-code-changes-1o8g</guid>
      <description>&lt;p&gt;Let's face it: developers get the glory for performance wins, but often it's us ops folks configuring the servers who can make the biggest impact. HTTP caching is the perfect example - a few server configuration tweaks can dramatically reduce load and improve user experience without touching application code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Server-Side Caching Configuration 🚀
&lt;/h2&gt;

&lt;p&gt;Different web servers have different syntax, but the goal is the same: properly configured HTTP headers. Here are the magic incantations for common servers:&lt;/p&gt;

&lt;h3&gt;
  
  
  Nginx
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Inside server or location block&lt;/span&gt;
&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="sr"&gt;*&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s"&gt;.(jpg|jpeg|png|gif|ico|css|js)&lt;/span&gt;$ &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="kn"&gt;expires&lt;/span&gt; &lt;span class="s"&gt;1y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cache-Control&lt;/span&gt; &lt;span class="s"&gt;"public,&lt;/span&gt; &lt;span class="s"&gt;max-age=31536000,&lt;/span&gt; &lt;span class="s"&gt;immutable"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# For HTML with validation&lt;/span&gt;
&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="sr"&gt;*&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s"&gt;.html&lt;/span&gt;$ &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cache-Control&lt;/span&gt; &lt;span class="s"&gt;"public,&lt;/span&gt; &lt;span class="s"&gt;max-age=300,&lt;/span&gt; &lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Apache
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;FilesMatch&lt;/span&gt;&lt;span class="sr"&gt; "\.(jpg|jpeg|png|gif|ico|css|js)$"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;   &lt;span class="nc"&gt;Header&lt;/span&gt; &lt;span class="ss"&gt;set&lt;/span&gt; Cache-Control "public, max-age=31536000, immutable"
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;FilesMatch&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;FilesMatch&lt;/span&gt;&lt;span class="sr"&gt; "\.html$"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;   &lt;span class="nc"&gt;Header&lt;/span&gt; &lt;span class="ss"&gt;set&lt;/span&gt; Cache-Control "public, max-age=300, must-revalidate"
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;FilesMatch&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Monitoring Cache Effectiveness
&lt;/h2&gt;

&lt;p&gt;How do you know if your caching strategy is working? Look at these metrics:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cache Hit Ratio&lt;/strong&gt;: Percentage of requests served from cache vs origin&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bandwidth Savings&lt;/strong&gt;: Reduced egress traffic from your servers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server Load Reduction&lt;/strong&gt;: Fewer requests hitting your application&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pro tip: Set up a dashboard tracking HTTP status codes - you want to see lots of 304s!&lt;/p&gt;

&lt;h2&gt;
  
  
  Cache Validation: The DevOps Secret Weapon
&lt;/h2&gt;

&lt;p&gt;Smart validation configuration can reduce server load dramatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;# Enable ETags in Nginx
etag on;

# Apache ETags (already enabled by default)
FileETag MTime Size
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Proper ETag configuration means your server can respond with lightweight 304 responses instead of full payloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  CDN Integration Strategy
&lt;/h2&gt;

&lt;p&gt;Your CDN's cache behavior must align with your origin headers. For Cloudflare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;# Cache Everything rule with Edge TTL:
cache_everything: true
edge_cache_ttl: 2592000
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This two-tier caching approach (browser + CDN) creates a performance multiplier effect!&lt;/p&gt;

&lt;p&gt;For more details on HTTP caching implementation patterns, check out my &lt;a href="https://requestmetrics.com/web-performance/http-caching/" rel="noopener noreferrer"&gt;comprehensive HTTP caching guide&lt;/a&gt; covering both developer and operational aspects.&lt;/p&gt;

&lt;p&gt;What server-side caching optimizations have you implemented? I'd love to hear your experiences!&lt;/p&gt;

</description>
      <category>performance</category>
      <category>http</category>
      <category>caching</category>
      <category>nginx</category>
    </item>
    <item>
      <title>GTMetrix Alternatives: Why You Need More Than Just Synthetic Testing</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Thu, 27 Feb 2025 15:56:31 +0000</pubDate>
      <link>https://community.ops.io/requestmetrics/gtmetrix-alternatives-why-you-need-more-than-just-synthetic-testing-58o7</link>
      <guid>https://community.ops.io/requestmetrics/gtmetrix-alternatives-why-you-need-more-than-just-synthetic-testing-58o7</guid>
      <description>&lt;p&gt;GTMetrix has been a go-to tool for website performance testing for years. It runs a synthetic test, gives you a score, and tells you whether your site is fast or slow. Simple, right?  &lt;/p&gt;

&lt;p&gt;Except &lt;strong&gt;synthetic tests don’t reflect real-world performance&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;GTMetrix runs tests in &lt;strong&gt;ideal conditions&lt;/strong&gt;—clean network, no background tasks, no real user interactions. But real visitors:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load your site &lt;strong&gt;on unreliable mobile networks&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Get hit with &lt;strong&gt;third-party scripts slowing things down&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Experience &lt;strong&gt;delayed interactions and layout shifts&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If GTMetrix tells you your site is fast, but your real users still struggle, &lt;strong&gt;you need better insights than synthetic tests alone can provide&lt;/strong&gt;.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Synthetic Testing Isn’t Enough
&lt;/h2&gt;

&lt;p&gt;Synthetic tests generate &lt;strong&gt;lab-based results&lt;/strong&gt;, which are great for debugging but fail to capture &lt;strong&gt;real-world bottlenecks&lt;/strong&gt;. A perfect synthetic score means nothing if your actual users are waiting for elements to load or watching buttons shift just as they try to click them.  &lt;/p&gt;

&lt;p&gt;The better approach? &lt;strong&gt;Synthetic Testing + Real User Monitoring (RUM) + Google’s Chrome UX Report (CrUX)&lt;/strong&gt;.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Synthetic Testing&lt;/strong&gt; runs performance tests in a &lt;strong&gt;controlled environment&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real User Monitoring (RUM)&lt;/strong&gt; collects performance data from &lt;strong&gt;actual visitors&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CrUX&lt;/strong&gt; pulls &lt;strong&gt;real-world Core Web Vitals&lt;/strong&gt; from Chrome users.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best GTMetrix Alternatives Right Now
&lt;/h2&gt;

&lt;p&gt;If you’re running a mid-sized website with &lt;strong&gt;500,000 page views per month&lt;/strong&gt;, here’s how GTMetrix competitors compare:  &lt;/p&gt;

&lt;h3&gt;
  
  
  1. PageSpeed Insights (Free &amp;amp; Simple)
&lt;/h3&gt;

&lt;p&gt;💰  &lt;strong&gt;Free&lt;/strong&gt; and backed by Google  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;real Chrome UX Report (CrUX) data&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;No real-time monitoring
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. WebPageTest (Advanced &amp;amp; Free)
&lt;/h3&gt;

&lt;p&gt;💰 Free with &lt;strong&gt;detailed synthetic test options&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports &lt;strong&gt;network throttling, waterfall charts, and filmstrip views&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;No real user monitoring
&lt;/li&gt;
&lt;li&gt;Slow to run tests&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Request Metrics (Synthetic + RUM in One Dashboard)
&lt;/h3&gt;

&lt;p&gt;💰 &lt;strong&gt;$88/month for full monitoring&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://requestmetrics.com/" rel="noopener noreferrer"&gt;Learn more about Request Metrics&lt;/a&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Combines Synthetic Testing + Real User Monitoring (RUM) + CrUX&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracks real Core Web Vitals from actual visitors&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automates synthetic tests on your busiest pages&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Pingdom (Integrated Uptime)
&lt;/h3&gt;

&lt;p&gt;💰 $130/mo - Uptime &amp;amp; Basic RUM&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uptime monitoring + RUM
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited synthetic testing flexibility&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Speedcurve (Advanced custom reporting)
&lt;/h3&gt;

&lt;p&gt;💰 $143/mo&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Combines synthetic + real user monitoring&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highly customizable dashboards and reporting&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steep learning curve—complex reports can be difficult to configure&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SpeedCurve offers deep performance insights, but &lt;strong&gt;the custom reporting system is difficult to interpret&lt;/strong&gt;. If you need quick, actionable data, other tools may be easier to work with.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;GTMetrix was great when it was free, but &lt;strong&gt;paying for one-off synthetic tests doesn’t make sense anymore&lt;/strong&gt;.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you need &lt;strong&gt;quick lab tests&lt;/strong&gt;, use &lt;strong&gt;PageSpeed Insights&lt;/strong&gt; or &lt;strong&gt;WebPageTest&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;If you want to &lt;strong&gt;track real-world performance&lt;/strong&gt;, go with &lt;strong&gt;Request Metrics&lt;/strong&gt; ($88/mo).
&lt;/li&gt;
&lt;li&gt;If you need &lt;strong&gt;uptime alerts &amp;amp; monitoring&lt;/strong&gt;, &lt;strong&gt;Pingdom&lt;/strong&gt; is an option.
&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;deep custom reporting&lt;/strong&gt;, &lt;strong&gt;SpeedCurve&lt;/strong&gt; delivers—but expect a &lt;strong&gt;learning curve&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📖 &lt;strong&gt;Read the full breakdown here:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://requestmetrics.com/web-performance/gtmetrix-alternatives/" rel="noopener noreferrer"&gt;GTMetrix Alternatives: The Best Tools for Website Performance&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>webperformance</category>
      <category>monitoring</category>
      <category>devops</category>
      <category>synthetic</category>
    </item>
    <item>
      <title>Website Image Optimization: Speed Up Your Site with Better Image Handling</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Wed, 05 Feb 2025 17:45:05 +0000</pubDate>
      <link>https://community.ops.io/requestmetrics/website-image-optimization-speed-up-your-site-with-better-image-handling-1381</link>
      <guid>https://community.ops.io/requestmetrics/website-image-optimization-speed-up-your-site-with-better-image-handling-1381</guid>
      <description>&lt;p&gt;Images make websites engaging, but they’re also one of the biggest performance killers. Large, unoptimized images &lt;strong&gt;slow down page loads, hurt SEO, and wreck Core Web Vitals&lt;/strong&gt;. If your site feels sluggish, image bloat is probably to blame.  &lt;/p&gt;

&lt;p&gt;Optimizing images &lt;strong&gt;can dramatically improve load times&lt;/strong&gt; while keeping your website visually sharp. Here’s a quick breakdown of &lt;strong&gt;how to make images load faster&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;For a full deep dive, check out the complete guide:&lt;br&gt;&lt;br&gt;
➡ &lt;a href="https://requestmetrics.com/web-performance/high-performance-images/" rel="noopener noreferrer"&gt;How to Optimize Website Images&lt;/a&gt;  &lt;/p&gt;


&lt;h2&gt;
  
  
  📸 Use the Right Image Format
&lt;/h2&gt;

&lt;p&gt;Not all image formats are efficient:  &lt;/p&gt;

&lt;p&gt;✔ &lt;strong&gt;JPG (JPEG)&lt;/strong&gt; – Best for photos, small size with lossy compression.&lt;br&gt;&lt;br&gt;
✔ &lt;strong&gt;PNG&lt;/strong&gt; – Best for graphics &amp;amp; transparency but large files.&lt;br&gt;&lt;br&gt;
✔ &lt;strong&gt;WebP&lt;/strong&gt; – Smaller than JPG/PNG, great for most images.&lt;br&gt;&lt;br&gt;
✔ &lt;strong&gt;AVIF&lt;/strong&gt; – Best compression, but not universally supported yet.  &lt;/p&gt;

&lt;p&gt;Use a &lt;strong&gt;CDN&lt;/strong&gt; to &lt;strong&gt;automatically serve WebP/AVIF&lt;/strong&gt; when supported.  &lt;/p&gt;


&lt;h2&gt;
  
  
  ⚡ Compress and Optimize
&lt;/h2&gt;

&lt;p&gt;Uncompressed images &lt;strong&gt;waste bandwidth&lt;/strong&gt;. Shrink files using:  &lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;TinyPNG, ImageMin, or Squoosh&lt;/strong&gt; for lossy compression.&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Strip metadata&lt;/strong&gt; (EXIF, camera details) to remove extra bloat.  &lt;/p&gt;

&lt;p&gt;Even &lt;strong&gt;minor compression&lt;/strong&gt; can cut image size by 50% or more.  &lt;/p&gt;


&lt;h2&gt;
  
  
  ⏳ Lazy-Load Below-the-Fold Images
&lt;/h2&gt;

&lt;p&gt;Prevent unnecessary downloads using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"image.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Optimized Image"&lt;/span&gt; &lt;span class="na"&gt;loading=&lt;/span&gt;&lt;span class="s"&gt;"lazy"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This &lt;strong&gt;improves Largest Contentful Paint (LCP)&lt;/strong&gt; by focusing resources on critical images.  &lt;/p&gt;




&lt;h2&gt;
  
  
  📱 Serve Responsive Images
&lt;/h2&gt;

&lt;p&gt;Don’t make mobile users load huge desktop images. Use &lt;code&gt;srcset&lt;/code&gt; and &lt;code&gt;sizes&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;picture&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; 
    &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"image-700.jpg 700w, image-1200.jpg 1200w"&lt;/span&gt; 
    &lt;span class="na"&gt;sizes=&lt;/span&gt;&lt;span class="s"&gt;"(max-width: 1200px) 100vw, 1200px"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"image-1200.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Optimized image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/picture&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This &lt;strong&gt;delivers the right size image&lt;/strong&gt; for every screen.  &lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Cache and Deliver Images Efficiently
&lt;/h2&gt;

&lt;p&gt;✔ &lt;strong&gt;Use a CDN&lt;/strong&gt; – Faster global delivery.&lt;br&gt;&lt;br&gt;
✔ &lt;strong&gt;Enable HTTP/2 or HTTP/3&lt;/strong&gt; – Loads images in parallel.&lt;br&gt;&lt;br&gt;
✔ &lt;strong&gt;Set caching headers&lt;/strong&gt; – Prevents unnecessary re-downloads.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cache-Control: public, max-age=31536000, immutable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📌 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Optimizing images is an &lt;strong&gt;easy win for site speed and SEO&lt;/strong&gt;.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use efficient formats (WebP, AVIF)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compress and lazy-load images&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serve responsive images for mobile&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Host images with CDNs &amp;amp; caching&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For &lt;strong&gt;detailed steps&lt;/strong&gt;, check out the full guide:&lt;br&gt;&lt;br&gt;
➡ &lt;a href="https://requestmetrics.com/web-performance/high-performance-images/" rel="noopener noreferrer"&gt;How to Optimize Website Images&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webperformance</category>
      <category>performance</category>
      <category>images</category>
      <category>corewebvitals</category>
    </item>
    <item>
      <title>How to Fix Long Animation Frames (LoAFs) and Speed Up Your Website</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Mon, 21 Oct 2024 17:50:00 +0000</pubDate>
      <link>https://community.ops.io/requestmetrics/how-to-fix-long-animation-frames-loafs-and-speed-up-your-website-23jc</link>
      <guid>https://community.ops.io/requestmetrics/how-to-fix-long-animation-frames-loafs-and-speed-up-your-website-23jc</guid>
      <description>&lt;p&gt;If your website feels sluggish or unresponsive during animations, you’re likely dealing with &lt;strong&gt;Long Animation Frames (LoAFs)&lt;/strong&gt;. LoAFs occur when a single animation frame takes longer than 50 milliseconds to render, causing stuttering, lag, or what developers often call “jank.”&lt;/p&gt;

&lt;p&gt;The problem is, LoAFs aren’t immediately visible in Chrome DevTools by default. However, you can use the &lt;strong&gt;PerformanceObserver API&lt;/strong&gt; to track and analyze them in real time, helping you identify what’s slowing down your animations.&lt;/p&gt;

&lt;p&gt;One of the primary causes of LoAFs is &lt;strong&gt;heavy JavaScript execution&lt;/strong&gt;. Long-running scripts block the main thread and prevent the browser from rendering frames efficiently. To resolve this, break up long tasks into smaller chunks and spread them across multiple frames using setTimeout or other techniques to give the browser time to process animations smoothly.&lt;/p&gt;

&lt;p&gt;Another common culprit is &lt;strong&gt;forced synchronous layouts&lt;/strong&gt;, which happen when you modify the DOM and immediately read layout properties like offsetWidth or scrollHeight. To avoid this, batch your DOM reads and writes to minimize layout recalculations, or use transform for animations to avoid triggering expensive reflows.&lt;/p&gt;

&lt;p&gt;For modern web apps like &lt;strong&gt;Single Page Applications (SPAs)&lt;/strong&gt;, optimizing component re-renders and deferring non-essential JavaScript using code-splitting can also help reduce LoAFs and improve the user experience.&lt;/p&gt;

&lt;p&gt;For a more detailed breakdown of how to diagnose and fix Long Animation Frames, check out the full post on &lt;a href="https://requestmetrics.com/web-performance/long-animation-frame-loaf/" rel="noopener noreferrer"&gt;LoAFs and how to optimize them here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>performance</category>
      <category>webdev</category>
      <category>sre</category>
      <category>webperfops</category>
    </item>
    <item>
      <title>Our Super Friendly AI Sloth that Analyzes Your Observability Data</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Mon, 15 May 2023 00:00:00 +0000</pubDate>
      <link>https://community.ops.io/requestmetrics/our-super-friendly-ai-sloth-that-analyzes-your-observability-data-5c46</link>
      <guid>https://community.ops.io/requestmetrics/our-super-friendly-ai-sloth-that-analyzes-your-observability-data-5c46</guid>
      <description>&lt;p&gt;Seems like everyone is building a ChatGPT thing right now, doesn’t it? Well we are too! Inspired by so many others, we decided to see what AI could do with our simplified analytics and observability data.&lt;/p&gt;

&lt;p&gt;Turns out, it can do quite a lot.&lt;/p&gt;

&lt;p&gt;I’m thrilled to share that &lt;a href="https://requestmetrics.com/feature/ai-analysis/" rel="noopener noreferrer"&gt;we’ve shipped our first AI insights chatbot, Professor Sloth&lt;/a&gt;. With this ChatGPT-powered AI Assistant, Request Metrics is taking data analysis to the next level by helping you spot anomalies, suggesting courses of action, and guiding you towards valuable insights.&lt;/p&gt;

&lt;p&gt;But this wasn’t without it’s challenges…&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt Engineering Challenges
&lt;/h2&gt;

&lt;p&gt;Integrating OpenAI’s ChatGPT into Request Metrics proved to be an interesting challenge, particularly when it came to the emerging problem of &lt;em&gt;prompt engineering&lt;/em&gt;. To get &lt;em&gt;correct&lt;/em&gt; and interesting results, we had to talk to this supremely powerful AI like it was a first-grade math student. Phrases like &lt;em&gt;“go slow”&lt;/em&gt;, &lt;em&gt;“check your work”&lt;/em&gt;, and &lt;em&gt;“let’s take this step by step”&lt;/em&gt; litter our prompts.&lt;/p&gt;

&lt;p&gt;Without these statements, we found that ChatGPT would often outright lie to us, reporting median values that weren’t in the dataset, or reporting trends that were not statistically relevant. Much like guiding a young learner, it was essential to provide clear instructions and set expectations to ensure that ChatGPT could understand and analyze the data effectively.&lt;/p&gt;

&lt;p&gt;With a little care and patience, this approach allowed us to harness the power of AI while maintaining a high level of accuracy and relevance in the insights generated by Professor Sloth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Professor Sloth and Data Analysis
&lt;/h2&gt;

&lt;p&gt;Incorporating an AI Assistant like Professor Sloth into your data analysis workflow offers numerous advantages. Here are some benefits we’ve observed while using Professor Sloth:&lt;/p&gt;

&lt;h3&gt;
  
  
  Anomaly Detection
&lt;/h3&gt;

&lt;p&gt;Professor Sloth can quickly spot anomalies in your data, helping you identify potential issues and areas for improvement. This can save you time and effort by automating the initial data exploration process. Here’s an example where the professor found an &lt;a href="https://requestmetrics.com/feature/api-monitoring/" rel="noopener noreferrer"&gt;API Endpoint anomaly&lt;/a&gt;, and pointed out that they are all SVG file requests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/c0N5Cej9FTCsu2oZ1zqT_NiMreR7YsixwsRjqCH8ykM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3lxNHFv/ZmVuYzlkOXNjNDJl/NnU1LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/c0N5Cej9FTCsu2oZ1zqT_NiMreR7YsixwsRjqCH8ykM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3lxNHFv/ZmVuYzlkOXNjNDJl/NnU1LnBuZw" alt="Professor Sloth identifying an API Anomaly" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Actionable Recommendations
&lt;/h3&gt;

&lt;p&gt;Our ChatGPT-powered AI Sloth suggests courses of action based on the data it analyzes. This helps you make informed decisions on where to invest your resources and how to improve your website’s performance. Here’s an example where it found the largest &lt;a href="https://requestmetrics.com/feature/web-analytics/" rel="noopener noreferrer"&gt;web analytics sources of traffic&lt;/a&gt;, and recommended additional focus.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/nobikWADS-8tuwPaFMSBqY3xUb_fTbQNDvFN1Mu8KNk/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2oyc244/dTB3NTBkdjNjODVh/Mjl3LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/nobikWADS-8tuwPaFMSBqY3xUb_fTbQNDvFN1Mu8KNk/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2oyc244/dTB3NTBkdjNjODVh/Mjl3LnBuZw" alt="Professor Sloth Recommending Analytics Focus" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Guided Analysis
&lt;/h3&gt;

&lt;p&gt;Professor Sloth recommends additional data analysis steps to help you dive deeper into specific areas of interest. This can be particularly useful when you’re unsure where to start or need help identifying new avenues for exploration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/6AeygAzV7HzKWAUEBj7VbZkh3XhhF0bRzKlChGBe6mo/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3NvanU1/dmoxZmxrd2ZyNDR6/eHo2LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/6AeygAzV7HzKWAUEBj7VbZkh3XhhF0bRzKlChGBe6mo/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3NvanU1/dmoxZmxrd2ZyNDR6/eHo2LnBuZw" alt="Professor Sloth Recommending Geographic Filters" width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, Professor Sloth suggested some geographic filters to get more relevant data, focusing on US and German traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ongoing Training for Professor Sloth
&lt;/h2&gt;

&lt;p&gt;Currently, Professor Sloth is available in a handful of locations throughout the Request Metrics UI. However, we have big plans for our AI Assistant. In the coming weeks, we’ll be expanding its presence within the platform and teaching it about more types of data.&lt;/p&gt;

&lt;p&gt;As the AI APIs continue to evolve, we hope to expand Professor Sloth’s chat capabilities, allowing you to ask further questions about your data and receive even more personalized insights. With this ChatGPT-powered feature, we aim to make data analysis more accessible, efficient, and enjoyable for all users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Professor Sloth shows off the power and potential of AI integration in data analysis. By overcoming the challenges of prompt engineering and leveraging the capabilities of OpenAI’s ChatGPT, we’ve created a valuable tool that can revolutionize the way you approach your website’s data.&lt;/p&gt;

&lt;p&gt;With Professor Sloth, you’ll gain access to anomaly detection, actionable recommendations, and guided analysis, all powered by cutting-edge AI technology. As we continue to expand and evolve this feature, we’re confident that Professor Sloth will become an indispensable asset in your quest for data-driven insights and website optimization.&lt;/p&gt;

&lt;p&gt;Ready to try it out? Check out our &lt;a href="https://app.requestmetrics.com/demo" rel="noopener noreferrer"&gt;live sandbox&lt;/a&gt; and see what Professor Sloth has to say about the data. Or &lt;a href="https://app.requestmetrics.com/signup" rel="noopener noreferrer"&gt;sign-up for Request Metrics free&lt;/a&gt; and get AI-powered insights on your own analytics and observability data!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>o11y</category>
      <category>devops</category>
    </item>
    <item>
      <title>Expanding Our Vision: Unifying Client-Side Observability Data</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Thu, 11 May 2023 00:00:00 +0000</pubDate>
      <link>https://community.ops.io/requestmetrics/expanding-our-vision-unifying-client-side-observability-data-42i8</link>
      <guid>https://community.ops.io/requestmetrics/expanding-our-vision-unifying-client-side-observability-data-42i8</guid>
      <description>&lt;p&gt;In 2021, we started Request Metrics as a simple and developer-friendly service to measure and &lt;a href="https://requestmetrics.com/web-performance/measure-web-performance" rel="noopener noreferrer"&gt;improve web performance&lt;/a&gt;. We built an incredible platform that distilled complex data down into simple reports and recommendations. Lots of teams around the world found valuable insights in Request Metrics that they couldn’t get anywhere else.&lt;/p&gt;

&lt;p&gt;But web performance data can be very unpredictable—the web slows down in all sorts of ways. When one of our customer’s pages slowed down, or their &lt;a href="https://requestmetrics.com/core-web-vitals/" rel="noopener noreferrer"&gt;Core Web Vitals&lt;/a&gt; slipped, we ran into 2 big limitations:&lt;/p&gt;

&lt;p&gt;First, does this delay matter to my user? Did it cost me a sale? Do I need to fix it right now? We couldn’t answer these questions because we didn’t have enough context about what the user was trying to do.&lt;/p&gt;

&lt;p&gt;Second, what is causing this thing to be slow? We can’t always recreate the problem in our local environments, and we didn’t have deep enough data to debug individual sessions.&lt;/p&gt;

&lt;p&gt;To address these problems, we needed to think &lt;em&gt;bigger&lt;/em&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  A Challenge Beyond Web Performance
&lt;/h2&gt;

&lt;p&gt;The limitations we faced aren’t limited to web performance. When there’s a JavaScript error, how do we know if it has user impact? When an API is failing, does it halt the checkout flow? When a user is interacting, which components do they depend on?&lt;/p&gt;

&lt;p&gt;Today, this data is scattered across various kinds of tools, such as product analytics, error reporting, API observability, performance, and security monitoring. There is so much power to be unlocked by bringing this data together, and that’s exactly what Request Metrics is going to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Client-Side Observability Platform
&lt;/h2&gt;

&lt;p&gt;Our goal for Request Metrics is to bring these disparate pools of data together—to unify client-side data and reveal the correlations between user intent, product analytics, and system monitoring.&lt;/p&gt;

&lt;p&gt;Imagine getting an alert with this context:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;3 API endpoints are returning higher 500 responses than normal, and form submissions for impacted sessions are down by 75%.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We are going to combine operational problems with user impact so that we can focus on the problems that really impact our users, and cut out the noisy background radiation of the web.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accelerating and Expanding Observability
&lt;/h2&gt;

&lt;p&gt;Many monitoring products need to understand your entire infrastructure—every service, database, and backend resource you depend on. To get that, you have to deploy agents, make code changes, or use specific platforms. It’s a huge upfront cost and many small teams can’t justify it. We’re approaching the problem differently.&lt;/p&gt;

&lt;p&gt;What if we approached observability from what the &lt;em&gt;real users&lt;/em&gt; see, instead of our infrastructure? And what if we made the setup so easy that any engineer could do it in 1 minute. What if you could copy-paste a single bit of JavaScript into your page and get visibility into everything the user touches? That’s what we’re building: turnkey analytics and observability from the client-side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and Privacy in Analytics
&lt;/h2&gt;

&lt;p&gt;Many security-focused organizations are unable to use cloud services for potentially sensitive data, and have been left behind by modern analytics and monitoring vendors.&lt;/p&gt;

&lt;p&gt;That’s why we’re making Request Metrics ready to be installed on-premise, or in your private cloud. A single install, package, and vendor to manage that can give you monitoring visibility across your teams.&lt;/p&gt;

&lt;p&gt;Oh, and because we don’t drop a cookie or track anything identifiable about the end user (dropping IP and user agent on ingest), we’re fully GDPR compliant and ready to use anywhere you need visibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Road Ahead
&lt;/h2&gt;

&lt;p&gt;We have an ambitious vision, and we’re diligently working to make it a reality over the remainder of this year. Today we’ve already shipped Session Analytics, with the ability to dive into a full session timeline for users. We’re expanding our performance tools into full &lt;a href="https://requestmetrics.com/feature/user-experience-monitoring/" rel="noopener noreferrer"&gt;User Experience monitoring&lt;/a&gt;, allowing you to dig all the way into individual load timings and waterfalls. As well as &lt;a href="https://requestmetrics.com/feature/api-monitoring/" rel="noopener noreferrer"&gt;API observability&lt;/a&gt;, tracking the traffic, responses, and performance of your first party and third-party API calls.&lt;/p&gt;

&lt;p&gt;Soon, you’ll see security and website integrity reports added, so we can tell you when naughty JavaScript sneaks into your code or tries to steal data from your users. We’ll also be bringing a JavaScript error reporting component, and expanding analytics to include custom events and user journeys. There is so much great stuff coming!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Request Metrics is a new kind of dev tool: focused on the &lt;em&gt;user experience&lt;/em&gt; of your site, doing more of the thinking for you, and exposing when weird things happen in your system. You shouldn’t have to feed your dev tools queries, it should just give you answers. We’re excited to make it happen and help you make better, faster software. Sign up for a &lt;a href="https://app.requestmetrics.com/signup" rel="noopener noreferrer"&gt;free trial of Client-Side Observability&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>sre</category>
      <category>performance</category>
      <category>devops</category>
      <category>o11y</category>
    </item>
    <item>
      <title>Explaining Performance to Non-Technical Stakeholders</title>
      <dc:creator>Todd H. Gardner</dc:creator>
      <pubDate>Tue, 13 Sep 2022 08:00:00 +0000</pubDate>
      <link>https://community.ops.io/requestmetrics/explaining-performance-to-non-technical-stakeholders-3mdp</link>
      <guid>https://community.ops.io/requestmetrics/explaining-performance-to-non-technical-stakeholders-3mdp</guid>
      <description>&lt;p&gt;Whether you’re an e-commerce company, a SaaS provider, or a content publisher, understanding the performance of your website is important to &lt;em&gt;everyone&lt;/em&gt; on the team—not just the developers. Performance is a huge part of the user experience and directly tied to how well your website achieves its goals. But web performance is often measured in very technical terms, like &lt;a href="https://requestmetrics.com/web-performance/largest-contentful-paint" rel="noopener noreferrer"&gt;Largest Contentful Paint&lt;/a&gt;, that cause most business folk’s eyes to glaze over.&lt;/p&gt;

&lt;p&gt;This language gap is a big part of the reason why many websites are so slow. Many only consider performance from their own perspective—“it’s fast for me”—and leave it at that. We simply lack the vocabulary to talk about the problem.&lt;/p&gt;

&lt;p&gt;To effectively talk about web performance with everyone on the team, you have to break through the jargon and talk about what really matters: the experience of the real users and how that impacts the business. Here’s a few ways to do that:&lt;/p&gt;

&lt;h2&gt;
  
  
  Push what’s Important
&lt;/h2&gt;

&lt;p&gt;Performance is rarely top of mind, and it’s unlikely anyone will go looking for it unless a user is complaining. Most users don’t complain—they just leave.&lt;/p&gt;

&lt;p&gt;To keep your users, you need to know about performance before it gets bad. You need to know when it’s important.&lt;/p&gt;

&lt;p&gt;At Request Metrics, its our job to figure out what’s important and push the relevant information to you. We examine all your web performance data and push a summary to your inbox with what you need to know.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/cz3h0YtRAGGxrZnF0vgVIy-FteENP7VGFgyhl5xJbc8/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzRwdHVx/M3FxMzcya3dlZXZm/NDU1LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/cz3h0YtRAGGxrZnF0vgVIy-FteENP7VGFgyhl5xJbc8/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzRwdHVx/M3FxMzcya3dlZXZm/NDU1LnBuZw" alt="User Experience Report" width="800" height="1136"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://requestmetrics.com/assets/images/webperf/explaining-performance/Desktop_UX_Report.pdf" rel="noopener noreferrer"&gt;Download the full report PDF.&lt;/a&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;And to make it sharable, we publish it as a PDF so that you can forward it on to your client, your boss, or the executives in charge.&lt;/p&gt;

&lt;h2&gt;
  
  
  BLUF: Bottom Line Up Front
&lt;/h2&gt;

&lt;p&gt;This old military acronym is about getting right to the most important information first—lives could depend on it!&lt;/p&gt;

&lt;p&gt;Your situation is (probably) not that dire, but the advice stands. If the most interesting performance anomalies are buried three clicks deep, it’s unlikely to be discovered.&lt;/p&gt;

&lt;p&gt;At Request Metrics,we expose the interesting things in plain language at the top of all of our reports and dashboards.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/rQU4wX8GSEfZ8R-zD76cv8QR7gMF0QQ5FZqIgK5bEro/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3IyNjVu/aW1nb3FvaG00NHg3/eGprLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/rQU4wX8GSEfZ8R-zD76cv8QR7gMF0QQ5FZqIgK5bEro/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3IyNjVu/aW1nb3FvaG00NHg3/eGprLnBuZw" alt="Plain language descriptions of performance in Request Metrics" width="758" height="876"&gt;&lt;/a&gt;&lt;br&gt;Plain language descriptions of performance in Request Metrics.
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;This takes the burden off the developer to interpret the data for their team. We can plainly state what’s happening, backed up with data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Describe Metrics as User Impact
&lt;/h2&gt;

&lt;p&gt;Web performance metrics are highly technical and confusing—even to developers. If you don’t understand what &lt;a href="https://requestmetrics.com/web-performance/cumulative-layout-shift/" rel="noopener noreferrer"&gt;Cumulative Layout Shift&lt;/a&gt; is measuring, its hard to care that the score isn’t good.&lt;/p&gt;

&lt;p&gt;Instead, start the conversation with the user impact of the metric, like “the website has a lot of frustrating shifting of content for 75% of our users”&lt;/p&gt;




&lt;p&gt;Performance can be a powerful way to make your websites better and more effective—but only if you know how to have the conversation. Remember to Push what’s important to your stakeholders, put the bottom line up front, and describe metrics in terms of user impact. If you have the real user data and reports from Request Metrics, that will help.&lt;/p&gt;

&lt;p&gt;Have a look at the &lt;a href="https://requestmetrics.com/assets/images/webperf/explaining-performance/Desktop_UX_Report.pdf" rel="noopener noreferrer"&gt;example performance report&lt;/a&gt; and see how it can help drive the performance conversation on your team.&lt;/p&gt;

</description>
      <category>webperf</category>
      <category>data</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
