90KB of JavaScript, or why we test on a 2015 Chromebook
A hard performance budget, enforced by testing on the worst device your users actually have. Meridian went from 14s to 2.1s time-to-interactive.
Priya Raman
Principal Engineer, Web

Meridian Edu's learning platform worked beautifully. On our laptops.
Half their ninety-two thousand students were on shared school machines from 2015, over congested Wi-Fi, in buildings with one uplink. On that hardware the platform took fourteen seconds to become interactive, and lesson completion among those students was dismal — which everyone had attributed to motivation.
The rule we adopted
Test on the worst device your users actually have, not the median one.
We bought three 2015 Chromebooks, put them on a throttled connection, and made them the reference. Every release was checked there before it shipped. Not in a lab, not in a synthetic Lighthouse run — on the actual machine, by a person, clicking.
This changes what you build in ways a synthetic budget does not. You stop shipping the animation library. You notice that your date picker is 340KB. You discover the analytics script blocks first paint for two full seconds on a slow CPU because it parses before it defers.
The budget
90KB of JavaScript on the critical path, gzipped. Everything else is negotiable; this is not.
What that forces:
Server render everything that can be. Next.js App Router server components ship zero JavaScript for anything that does not need interactivity. A lesson page is text and images. It needs almost none.
Client components are leaves, not trunks. The interactive bits — a quiz widget, a progress toggle — are small islands. They do not drag their parents into the bundle.
No component library. We wrote the twelve components the app needed. A general-purpose library is a hundred components of which you use twelve, and modern tree-shaking is less effective at removing the other eighty-eight than everyone assumes.
Fonts are subset and self-hosted. One variable font, subset to the characters actually used, preloaded. Not four weights from a third-party origin with an extra DNS lookup and TLS handshake in front of them.
The result
Time to interactive on the reference Chromebook: 14s to 2.1s. Lesson completion among students on school hardware rose 44%.
The motivation theory was wrong. They were not disengaged. They were waiting.
The part that transfers
You probably do not have a Chromebook problem. You almost certainly have a *someone* problem — a segment of your users on hardware or a network nobody on your team has used in years, whose experience of your product is nothing like the one you ship against.
Find out who they are. Buy the device. Put it on the desk.


