Tactical playbook · Factor 7 of 7 · AUG v3
How to improve SaaS performance in 2026
Core Web Vitals as growth multiplier. The 5 CWV metrics, 10 tactics ranked by lift, the measured cross-AAERA-stage compound, and worked examples from Linear (Performance 10), Plausible (10), Vercel (9).
The short answer
Performance is the only AUG factor that multiplies every other factor simultaneously. A 4s → 1.5s LCP improvement typically lifts bounce -20%, Activation +15%, pages-per-session +0.4 (Engagement +25%), ad-viewable +15% (Monetization +8%). One ship, five compounding factors. The single highest-leverage tactic for 2026: static export (Next.js output:'export' or Astro) deployed to Cloudflare Pages or Vercel. Sub-1.5s LCP becomes table-stakes; product feels native rather than web.
Diagnostic — is your Performance below 8?
On the GrowthFriction 1-10 rubric, you're below 8 if any of:
- LCP at p75 above 2.5 seconds
- INP at p75 above 200ms
- CLS at p75 above 0.05
- TTFB at p75 above 400ms
- Page weight above 200KB transferred
- Mobile LCP more than 50% slower than desktop
- Google PageSpeed Insights score below 85 on Mobile category
Performance is the most measurable AUG factor — every metric is objective and tooled for measurement. If you're below 8, the compound effect across every other factor means the ROI of fixing Performance is higher than the ROI of fixing any other single factor.
The 5 Core Web Vitals (instrument all of these)
- LCP (Largest Contentful Paint) — Time until main content visible. Target <1.5s. Failure threshold >4s.
- INP (Interaction to Next Paint) — Time from user input to paint. Target <200ms. Failure >500ms.
- CLS (Cumulative Layout Shift) — Visual instability score (0-1). Target <0.05. Failure >0.25.
- TTFB (Time to First Byte) — Server response time. Target <400ms. Failure >800ms.
- Page weight — Total transferred KB. Target <100KB initial. Failure >500KB.
Measured AAERA impact per Performance improvement
Every Performance ship lifts multiple downstream factors simultaneously. Empirical deltas from large-scale CWV-improvement studies (Google, Akamai, Cloudflare, Vercel):
- LCP 4s → 2s: Bounce -20% · Activation +15% · Pages/session +0.4 (Engagement +25%)
- LCP 2s → 1s: Bounce -10% · Activation +8% · Pages/session +0.2
- INP 500ms → 200ms: Activation +12% · Rage-click rate -50%
- CLS 0.15 → 0.02: Bounce -5% · Ad-viewable +15% · pRPM +8%
- TTFB 1s → 300ms: Mobile bounce -18% (mobile disproportionately affected)
- Page weight 500KB → 100KB: Tier-3 geo activation +35% (data-cost sensitive markets)
The 10 tactics ranked by Performance lift
- Static export (Next.js output:'export') (LCP -60%, TTFB -80%). The single largest Performance lever in 2026 for content-heavy SaaS. Generates HTML-and-CSS-only pages that load in 200-400ms. Deploy to Cloudflare Pages or Vercel for edge-distribution. GrowthFriction runs this stack.
- Cloudflare Pages / Workers / Vercel edge deployment (TTFB -70% globally). Static files served from edge POPs near users. 200+ POPs worldwide. TTFB drops to 80-150ms even in Tier-3 geos.
- Critical CSS inlined, rest lazy (LCP -30%). Inline the CSS needed for above-fold render in <head>. Defer the rest. Removes render-blocking CSS dependency.
- Font stack without custom fonts (LCP -20%, CLS -80%). Use system-ui or web-safe stack. If custom fonts required, use font-display: optional + preload + WOFF2. Most SaaS marketing sites do not need custom fonts; the trade for the LCP+CLS lift is rarely worth it.
- Image dimensions + decoding=“async” + AVIF(CLS -90%, LCP -25%). Every img has explicit width/height. AVIF format (50% smaller than WebP). Decoding async. Lazy-load below-fold.
- Defer all non-critical JS (INP -50%). Move analytics, third-party scripts, non-interactive widgets to defer or async. Critical-path JS only what's needed for first interaction.
- Zero above-fold images (CSS gradients instead) (LCP <800ms achievable). For hero sections that don't require photographic imagery, CSS gradients + SVG graphics outperform image-based heroes. LCP becomes the H1 text, not an image.
- Resource hints (preconnect, dns-prefetch) (TTFB -100ms). For third-party domains (analytics, fonts, CDN), preconnect to establish connection before resource is needed.
- Remove heavy libraries (jQuery, lodash, moment.js) (Page weight -70%). Modern browsers don't need jQuery. Replace lodash with native ES methods. Replace moment with date-fns (10× smaller) or Intl.DateTimeFormat (zero bytes).
- content-visibility: auto for below-fold (Paint time -40% on long pages). Tells browser to skip rendering below-fold content until scrolled into view. Massive improvement on long-form content pages.
Worked example — Linear (Performance 10, composite 42)
Linear scores Performance 10 — the engineering polish IS the brand:
- Sub-100ms interactions across the entire surface. Keystroke-to-paint feels native, not web.
- Real-time sync without page reloads. CRDT-based collaborative state.
- Initial app load <1.5s on broadband. Cold-start optimized via aggressive code-splitting + tree-shaking.
- Performance is integral to the product promise. “The faster way to ship software” — implies speed of the tool itself.
Result: Performance 10 is the floor that allows every other factor to compound. Without sub-100ms interactions, Linear's Engagement 9 + Activation 9 wouldn't be possible — slow tools don't get used daily. Lesson: Performance is the infrastructure-level factor that compounds across all others.
Worked example — Notion (Performance 6, composite 27)
Notion shows the inverse pattern. 7-factor profile: 10 Acquisition, 7 Activation, 9 Engagement, 9 Retention, 10 Advocacy, 8 Monetization, 6 Performance. The Performance 6 is the diagnostic — Notion lags on large workspaces, edits feel laggy, page-load can take 2-4s on complex pages.
The cause: Notion's database-on-frontend architecture loads all data into the client and renders dynamically. Powerful but slow. The compound: Performance 6 drags Activation 7 (users wait for empty page, bounce) and Retention 9 (would be 10 if speed felt native).
Notion shipped a 2025 performance rewrite. If Performance 6 → 8 ships, composite 27 → ~32. The Performance fix is the highest-leverage single factor for Notion in 2026.
Performance anti-patterns (forbidden per AUG framework)
- Loading third-party scripts synchronously. Blocks render. Use defer or async always.
- Images without dimensions. Causes CLS. CWV penalty.
- Web fonts without font-display: optional. Invisible text during font swap = LCP regression.
- Hidden text that loads after font swap. Same as above.
- SPA with no server-rendered first paint. First paint is the spinner. LCP catastrophe.
- Auto-injecting heavy chat widgets (Intercom, Drift) on first load.150-500KB JS bundle that blocks INP.
- Pop-up modals that block first interaction. Performance issue cascades to Activation.
- Video autoplay above fold. LCP becomes the video poster (huge), INP suffers from video decoder.
- Loading every page in single bundle. Code-split per route. Most frameworks do this automatically; verify in your bundle analyzer.
Measurement — what to track
- LCP / INP / CLS / TTFB at p75 (web-vitals library + your analytics)
- Google PageSpeed Insights score on Mobile + Desktop (run weekly per page)
- Chrome User Experience Report (CrUX) field data via GSC
- Page weight per route (Webpack/Vite bundle analyzer)
- Mobile vs Desktop CWV gap (red flag if >50% slower on mobile)
- Tier-3 geo TTFB (test from APAC/LATAM in WebPageTest or Cloudflare Speed Test)
- Time-to-interactive on slow 4G simulation (Chrome DevTools throttling)
The 30-day Performance sprint plan
- Week 1: Diagnose. Run PageSpeed Insights on 10 representative pages. Identify the worst page. Profile in Chrome DevTools Performance tab. Identify LCP blocker.
- Week 2: Ship the top-3 highest-lift tactics that match your stack. For most Next.js SaaS: static export, critical CSS inlining, AVIF images, font-display: optional.
- Week 3: Defer non-critical JS. Audit third-party scripts. Remove anything not core (or load on user interaction only).
- Week 4: Measure. Re-run PSI. Check field data in GSC (real-user CrUX). Compute new Performance score. The compound to Activation + Engagement usually shows within 14-21 days as new cohorts experience the faster site.
The framework lesson
Performance is the multiplicative infrastructure factor. Every CWV improvement compounds across every AAERA stage. The math: Performance 6 → 9 with same other scores lifts AUG composite by 50%+ via the multiplier chain.
The 2026 standard has moved. Sub-1.5s LCP is table-stakes for content SaaS. Sub-200ms INP is table-stakes for interactive SaaS. The Linear standard (sub-100ms interactions) is the new aspiration. Static export + edge deployment + careful critical-path management get you to the standard.
For founders: Performance is also the most measurable factor. Every other factor requires interpretation; Performance is numbers. That makes it the easiest to ship improvements against — but also means competitors who ship Performance well have objective advantage that's hard to dispute.
Related resources
- Method: Performance factor deep-dive — the framework definition, rubric, and CWV thresholds
- Linear audit (composite 42, Performance 10) — engineering polish as brand
- Plausible audit (Performance 10) — privacy-first analytics with 1KB script
- Vercel audit (composite 31, Performance 9) — edge-first deployment platform
- Notion audit (composite 27, Performance 6) — diagnostic case for performance regression
- How to improve SaaS engagement — Engagement compounds with Performance via reduced bounce
- The full AUG framework — 7-factor composite formula
Frequently asked questions
What are Core Web Vitals and why do they matter for SaaS growth?
Core Web Vitals (CWV) are Google's three primary user-experience metrics: LCP (Largest Contentful Paint, main content visible), INP (Interaction to Next Paint, input responsiveness), CLS (Cumulative Layout Shift, visual stability). Plus TTFB (Time to First Byte, server response) and page weight as supporting. They matter because Google ranks pages partially on CWV, and every CWV improvement compounds across every AAERA stage — better LCP lifts Activation, better INP lifts Engagement, better CLS lifts both ad-viewability and trust. A LCP improvement from 4s to 1.5s typically drops bounce rate 20%+ AND lifts pages-per-session 0.4.
Why is performance a growth multiplier rather than just a hygiene factor?
Because each CWV improvement compounds across every AAERA stage simultaneously. LCP 4s → 2s: bounce -20%, Activation +15%, pages-per-session +0.4 (Engagement +25%), ad-viewable +15% (Monetization +8%). One Performance ship lifts five other factors. The AUG composite is multiplicative, so a Performance 7 → 9 lift with 25% improvements on every other factor translates to a 50-80% composite increase. No other single factor has this cross-stage multiplier effect.
What is the right LCP target for SaaS in 2026?
LCP under 1.5 seconds at p75 (75th percentile of real users on real devices on real networks). Google considers 2.5s the "good" threshold, but the leaderboards have moved — Linear, Vercel, Stripe all measure p75 LCP under 1.2s. The compound: every 1 second improvement below 4s reduces bounce rate ~5-8%. The marginal value increases at lower targets — getting from 2s to 1s lifts Activation more than getting from 4s to 3s, because users start to perceive the product as native.
How does performance affect SaaS revenue specifically?
Three compound paths: (1) Acquisition — Google rewards CWV in rankings, higher CWV → more organic traffic. (2) Activation + Engagement — faster loads + responsive interactions reduce bounce, lift pages-per-session, which directly raises AdSense pRPM (more pages × ads + better viewable rate × iRPM). (3) Conversion — every additional second of LCP costs 7-12% of conversion rate on commerce/SaaS sign-up flows. The math: 4s → 1.5s LCP improvement on a $50K MRR SaaS often translates to $5-10K MRR lift within 60 days from improved conversion alone.
Should I use Next.js static export for performance?
Yes, for most SaaS marketing surfaces. Static export (Next.js output: 'export' or Astro or Eleventy) produces HTML-and-CSS-only pages that load in 200-400ms vs 1-3s for SSR. The trade: dynamic content requires JS or edge-functions. For 80%+ of SaaS sites (marketing pages, content, documentation, audit catalogs), static-export is the right default. Use SSR/SPA only for authenticated app surfaces where dynamic personalization is required. GrowthFriction itself runs static-export Next.js on Cloudflare Pages.
Cite this playbook: GrowthFriction. (2026). How to improve SaaS performance in 2026. https://growthfriction.com/how-to/improve-performance/. License CC-BY 4.0. Published 2026-05-18 · Methodology AUG v3.