
A product tested exclusively on a fast laptop over office wifi is tested on the least representative device available. For most Indian consumer products the real user is on a mid-range Android phone, on a network that fluctuates, with several other apps competing for memory.
The gap is larger than you think
A page that becomes interactive in one second on a development machine can take six to eight seconds on a mid-range phone. The difference is not network — it is CPU time parsing and executing JavaScript. Throttle to 4x CPU slowdown in developer tools and the experience most of your users have becomes visible immediately.
Throttle the CPU 4x. That is not a pessimistic test — that is your median user.
JavaScript is the expensive part
Images are large but decode efficiently. JavaScript must be downloaded, parsed, compiled and executed, and on a constrained device each stage is slow. Reducing bundle size buys more perceived speed per kilobyte than any other optimisation, which is why server rendering matters commercially and not just architecturally.
Design for interruption
Connections drop mid-form on trains and in lifts. Save progress locally as the user types, so a lost connection costs nothing. Any multi-step flow that discards input on failure will be abandoned, and the user will blame the product rather than the network.
Touch targets and thumbs
Interfaces designed with a mouse produce targets too small and placed where thumbs do not reach. Primary actions belong in the lower half of the screen on mobile, targets need at least 44 pixels, and adjacent destructive actions need separation — a mis-tap on a small screen is far more likely than on a trackpad.
Test on real hardware
Emulators hide thermal throttling, memory pressure and the effect of a phone that already has thirty apps installed. Keep two or three inexpensive Android devices in the office and check releases on them. It costs very little and changes what the team considers acceptable.
Set a budget and enforce it
Performance decays one reasonable-seeming addition at a time. A budget — bundle size, largest contentful paint on a throttled profile — checked in CI turns that gradual decay into a visible failure at the moment it is introduced, when it is still cheap to fix.





