Yashveer Singh
Connect
<- All posts
Performance Optimization12 min read

The Real Numbers Behind a Fast Web App in 2026

The real numbers behind a fast web app are not goals you pick from a blog post. They are the thresholds at which users stop noticing load time, at which search engines reward you, and at which churn starts to drop. I track six metrics per app: LCP, INP, CLS, API p95 latency, time to first byte, and bundle size. Every one has a concrete target and a measurement method.

Written by Yashveer Singh, founder of Yashveer Labs.

What you actually need to know

  • LCP under 2.5 seconds, INP under 200 milliseconds, CLS under 0.1. Miss any of these at the 75th percentile and Google's ranking algorithm notices.
  • API p95 under 300 milliseconds for interactive endpoints. Users feel everything above that.
  • Time to first byte under 200 milliseconds. It is the ceiling for everything else.
  • JavaScript bundle under 150 kilobytes gzipped for initial load. The rest loads lazily.
  • Field data from real users almost always looks worse than lab data. Both matter.
MetricGood thresholdNeeds improvementPoor
LCP (Largest Contentful Paint)Under 2.5 seconds2.5 to 4 secondsOver 4 seconds
INP (Interaction to Next Paint)Under 200 ms200 to 500 msOver 500 ms
CLS (Cumulative Layout Shift)Under 0.10.1 to 0.25Over 0.25
TTFB (Time to First Byte)Under 200 ms200 to 800 msOver 800 ms
API p95 (interactive endpoint)Under 300 ms300 to 800 msOver 800 ms
Initial JS bundle (gzipped)Under 150 KB150 to 300 KBOver 300 KB

The core argument

Most engineers think of performance as a qualitative thing. The app feels fast or it does not. That framing is what lets regressions accumulate. Qualitative judgments are hard to enforce, hard to alert on, and hard to argue about in a PR review. Numbers are not.

The six metrics above are the ones that actually move outcomes. LCP, INP, and CLS are the Core Web Vitals that Google uses as a ranking signal and that correlate with user satisfaction research. TTFB is the upstream dependency for all of them. API p95 is the metric that determines whether the product feels fast in daily use. Bundle size is the upstream dependency for everything that happens in the browser before the server responds.

The useful discipline is to track all six, set targets for each, and measure against field data rather than lab data. A Lighthouse score of 95 in a lab test can coexist with a p75 LCP of four seconds in the field because real users are on real networks with real devices, not a Chrome instance on a fast connection. The Chrome User Experience Report gives you the field reality. It is worth checking quarterly.

The teams that have consistently fast apps treat these numbers the same way they treat test coverage. They have targets, they measure against them, and they treat regressions as blocking rather than informational. The teams that have inconsistently fast apps do Lighthouse audits when someone complains and move on.

Where apps actually fall short

Time to first byte

TTFB is the most common hidden problem. An app can have a well optimized frontend and still feel slow because the server is taking 700 milliseconds to send the first byte. The fix is almost always edge caching, better database queries, or moving the rendering closer to the user. For apps on Vercel or Cloudflare, edge rendering is the primary lever. For custom infrastructure, CDN configuration and query optimization are the starting points.

JavaScript bundle size

The second most common problem. Teams add dependencies without auditing their weight. A date picker library that brings in 80 kilobytes. An analytics SDK that loads 60 kilobytes synchronously on every page. A component library that is imported in full instead of tree shaken. These accumulate. A bundle audit every quarter, run with a tool like bundlephobia or the Next.js bundle analyzer, catches the worst offenders before they compound.

Interaction latency

INP failures are usually caused by long tasks running on the main thread. Heavy client side state management, unthrottled event handlers, or synchronous operations on interaction events. The fix is to measure which interactions are slow with the INP debugger, then profile the main thread work that happens on those interactions.

What it costs to close the gap

GapFixEngineering effortImpact
TTFB over 800 msEdge caching, CDN config1 to 3 daysHigh
LCP over 2.5 secondsImage optimization, preloading2 to 5 daysHigh
Bundle over 300 KB gzippedCode splitting, dependency audit1 to 4 daysMedium
API p95 over 500 msIndex addition, query rewrite2 to 10 days per endpointHigh
INP over 200 msMain thread profiling, lazy execution2 to 5 daysMedium
CLS over 0.1Layout reservation, skeleton screens1 to 3 daysLow to medium

What to look for in the tooling

  • Real user monitoring that captures field data, not just synthetic results. Google Search Console for Core Web Vitals, Sentry or Datadog for API metrics.
  • A way to break down LCP by page type and by user segment. A fast homepage LCP and a slow dashboard LCP average to something misleading.
  • Bundle analysis built into the build pipeline. The Next.js bundle analyzer and Vite's rollup-plugin-visualizer are the standard options.
  • Alerts on regression, not just current state. A dashboard you check when someone complains is a lagging indicator. An alert that fires when LCP degrades over seven days is actionable.

Expert opinion

The number I look at first when auditing a web app is TTFB. Everything downstream depends on it. Teams spend weeks on frontend optimization and ignore the fact that the server takes 600 milliseconds before any of that optimization can matter. Fix the floor first. The ceiling follows.

>

Yashveer Singh, founder of Yashveer Labs

How this played out on a real project

A SaaS client came in with a specific problem: their marketing site converted well but their activation rate after signup was low. The hypothesis was feature related. The data told a different story. The first meaningful action in the app, which was creating a project, involved an API endpoint with a p95 of 1.1 seconds and a frontend that took 4.2 seconds to LCP because the dashboard bundle was not split.

The fix took three weeks. We split the dashboard bundle, moved two heavy synchronous imports to lazy loads, and rewrote the project creation query to use a single round trip instead of three. The p95 for project creation dropped to 280 milliseconds. LCP dropped to 1.9 seconds. Activation improved by 22 percent in the following month.

That outcome was not about a clever architectural change. It was about measuring the right numbers, finding the gaps, and closing them methodically. For the API measurement side, API response times: how to track what matters is the companion piece. For what happens when you have identified the slow operations, the hot path: finding and optimizing it covers the next step.

Common mistakes

  1. Measuring only Lighthouse scores and not field data. Lab and field can diverge significantly on real devices.
  2. Treating LCP as a homepage metric. The dashboard LCP and the checkout LCP matter more for user experience than the marketing page.
  3. Ignoring TTFB. It is the upstream dependency for everything and is often the easiest win.
  4. Not splitting the bundle. Shipping a monolithic bundle is the most common cause of slow perceived load in 2026.
  5. Setting no API latency targets. The backend and frontend are separate concerns with separate metrics. Most teams only audit one.
  6. Using only synthetic monitoring. Real user monitoring is required to know what real users are experiencing.
  7. Checking performance quarterly at best. Performance degrades continuously. Weekly review of the six key metrics catches regressions before they compound.

A 30 day plan to hit the targets

  1. Week one. Run a baseline measurement of all six metrics. Lighthouse for lab data, Google Search Console for Core Web Vitals field data, your observability tool for API p95. Write down every number.
  2. Week two. Identify the three metrics furthest from target. For most apps this is TTFB, bundle size, and API p95. Prioritize in that order.
  3. Week three. Fix TTFB first if it is over 400 milliseconds. CDN configuration, edge caching, or server side query optimization depending on the root cause. Run the bundle analyzer and cut the largest unnecessary dependencies.
  4. Week four. Address the API p95 for the primary user workflow. Add indexes, rewrite queries, add a cache layer if the data allows it. Set up weekly dashboard review so the numbers stay visible after the sprint ends.

For related depth on the backend side, backend performance budgets: how to set them covers how to formalize the targets you have now measured. On the frontend, bundle size: the quiet killer of mobile web performance goes deep on the dependency audit.

FAQ

Frequently asked

Author

My approach to this kind of work

I approach this kind of work the way I would want someone to approach a system I depended on. With care, with rigor, with a sense that the next person who touches it should be able to understand it without my help. Yashveer Singh, founder of Yashveer Labs. That is the standard. If it is the standard you are looking for, I am the engineer to hire.

Related reading