Why we test every site on a mid-range Android phone, not our laptops
Every developer on our team has a fast laptop and a fast office connection, and if we only ever tested sites on that setup, we'd be systematically blind to how the site actually performs for a meaningful share of real visitors. So every project we ship gets tested, deliberately, on an aging mid-range Android phone over a throttled connection, specifically because that combination is closer to reality for a large portion of real users than our own development environment ever is.
This isn't a hypothetical concern. We've caught real, significant problems this way that never once showed up during normal development testing on our own fast machines, problems that would have shipped invisibly if we'd only ever tested under ideal conditions.
Why our own equipment is a bad proxy for real users
A modern developer laptop has vastly more processing power than a typical mid-range phone, and office internet is dramatically faster and more stable than a typical mobile connection outside a major city center or a well-covered urban area. Code that runs smoothly on our machines can genuinely stutter, lag, or time out entirely on the hardware and connections a meaningful share of actual visitors are using.
This gap is easy to forget precisely because it's invisible during normal development. Everything feels fast and responsive on our own equipment, which creates a false sense that the site is performing well for everyone, right up until real user data or a deliberate lower-end test reveals otherwise.
What this specific testing setup has caught
JavaScript-heavy interactions that felt instant on a laptop but had a noticeable, frustrating delay on a slower device's processor, where the same code took measurably longer to execute. Images that loaded acceptably on fast office internet but took several extra seconds over a throttled connection, well past the point where a real user would likely have already abandoned the page.
We've also caught layout issues specific to smaller, lower-resolution screens that never appeared on our larger development monitors, elements overlapping or text becoming illegible at sizes we simply weren't testing by default until we added this specific device to our standard checklist.
Why we chose this specific device tier, not the newest phone
Testing on the newest flagship phone would still leave us blind to the experience of a meaningful share of real visitors, since a large portion of any general audience is using older or more budget-oriented hardware, particularly outside affluent, tech-forward markets. A mid-range, slightly aging device gives us a more honest, representative picture of what a broad, realistic range of visitors are actually experiencing.
We update this reference device periodically as the overall market shifts, but we deliberately keep it a step or two behind the newest flagship release, specifically because that gap is where real performance problems for a meaningful chunk of any general audience actually tend to hide and go unnoticed.
How this fits into our actual testing workflow
This isn't a one-time check at the very end of a project. We test on this device profile throughout development, catching performance regressions as they're introduced rather than discovering a large accumulated problem only at the final review, when fixing an issue is generally more disruptive and more expensive to the overall timeline.
We've built this into our standard checklist for every project specifically because catching a performance regression early, while the specific change that caused it is still fresh and easy to identify, is dramatically cheaper than diagnosing the same problem later, once several changes have piled up on top of each other.
This isn't a one-time check at the very end of a project.
What we tell clients skeptical of this extra testing step
Some clients initially see this as unnecessary caution, since their own team, understandably, also tends to test primarily on fast modern devices and fast office connections. We show real before-and-after comparisons from past projects, the same page on a fast device versus the same page on our standard reference setup, and the gap is usually convincing enough on its own without much further explanation needed.
Once a client sees this comparison directly with their own site, the value of this testing step becomes obvious immediately, in a way that's hard to convey through explanation alone before they've actually seen the concrete difference for themselves.
The broader habit this represents
This specific testing practice reflects a broader principle we try to apply throughout our work: build and test for the actual range of real conditions users will experience, not for the comfortable, unrepresentative conditions we happen to be sitting in ourselves while doing the work. It's a small discipline that consistently produces meaningfully better real-world outcomes for the people actually using what we build.
We apply similar thinking elsewhere too, testing forms with users who aren't technical, testing copy with people outside the immediate industry, deliberately seeking out perspectives and conditions different from our own default, comfortable environment before calling anything finished.
What we'd tell a team that only tests on their own equipment
Buy one aging, mid-range device specifically for testing, keep it charged and accessible on the team's desk, and use it deliberately throughout development rather than only at the very end. It costs a small fraction of a single project's budget and pays for itself the first time it catches a real problem before a real user ever encounters it in production.
This is one of the cheapest, highest-leverage tools in our entire process, and it's genuinely surprising how few teams we've encountered actually do this deliberately, relying instead on whatever equipment happens to already be sitting on their own desks by default.
It's a small, unglamorous discipline, and it consistently catches real problems that would otherwise ship invisibly, hidden by the comfortable, unrepresentative conditions of our own development environment and our own fast equipment.
We'd rather catch a slow interaction on our own aging test phone before launch than have a real user discover it after we've already shipped and moved on to the next project entirely.
This is now a mandatory step in every project checklist we run, not an optional nice-to-have, because the gap between our own equipment and real user conditions is simply too large and too consequential to leave to chance or good intentions alone.
We've made this specific device a fixture on our team's shared desk for exactly this reason, close enough to reach for constantly, so testing on it becomes an ordinary habit rather than a special, easily skipped extra step at the end of a long project.