Andrew Yong
Start a project ↗
● Long read · 28 min · 42 pages

The 1.5-second playbook.

How I structure a marketing site so it loads in under 1.5 seconds on a mid-range phone on a 4G connection — every decision, every trade-off, with real numbers from real shipped sites.

2026 edition · last updated 04 · 22 · Free · no signup

Contents

  1. The 1.5-second number · why it matters, how to measure honestly
  2. Set the budget before you design · the file that fails your build
  3. Pick the stack that doesn't fight you · static beats SSR for marketing sites
  4. Trim the hero image first · the single biggest win
  5. One font, subset, swap · how to save 200 KB without compromising taste
  6. Defer everything below the fold · what actually needs to be in <head>
  7. Real-user monitoring > lab · why your DevTools lie
  8. Ship, measure, ship again · the 30-day discipline

01 · The 1.5-second number

Why 1.5 seconds? Because Google's Largest Contentful Paint threshold for "Good" is 2.5 seconds. Because the median mobile user is on a 4G connection with 100 ms of round-trip latency. Because the page should be readable before they get bored and bounce back to Twitter.

1.5 is not a vanity metric. It's the ceiling at which a real user, on a real phone, in a real place, decides whether to stay.

This playbook focuses on marketing sites — landing pages, portfolios, brochures. Application UIs have different priorities.

02 · Set the budget before you design

Most teams measure performance after the design is final. By then the hero animation is shipped, the font stack is locked, and the only thing left to optimize is compression. That's like trying to make a building lighter by changing the paint.

The fix: write a performance budget into the proposal. Add a CI check that fails the deploy if any page violates it. I include this as the first deliverable on every project.

03 · Pick the stack that doesn't fight you

For marketing sites, static-site generation wins. Astro and 11ty are my defaults. The HTML is prerendered, the JS is opt-in, the deploys are atomic. Compare to Next.js, which is brilliant for apps but ships a runtime by default — runtime you have to negotiate down for marketing work.

04 · Trim the hero image first

The hero image is almost always the LCP element. If it's over 200 KB, you've lost. Fix:

  • Convert to WebP at quality 78 — usually 60–80% smaller than the original JPEG
  • Serve a smaller version at smaller viewports with <picture> and srcset
  • Preload it with <link rel="preload" as="image"> in <head>
  • Reserve its space with explicit width and height attributes to prevent CLS

… more chapters in the full version. Get in touch if you want the working file. I send PDFs on request.

Want me to apply this to your site?

The playbook is free. The implementation is what I sell. See packages or send a brief.

AY Book a Call Get started today