Cloud

Why edge-first is now our default architecture for new client sites

CLD

Edge deployment used to be something we reached for on a handful of latency-sensitive features, a checkout flow here, a personalization widget there. This year it quietly became the default starting architecture for nearly every new client project we kick off, not because edge got dramatically better in isolation, but because the friction that used to make it a special case finally disappeared across the board.

Better tooling for edge-compatible databases and the broader availability of edge runtimes across our usual hosting providers removed most of what used to make edge-first a special case rather than a default. A couple of years ago, choosing edge meant accepting real constraints: a smaller subset of familiar database drivers, cold-start behavior that varied unpredictably between providers, and a debugging experience that lagged well behind a conventional server setup. Those constraints haven't fully disappeared, but each one shrank enough this year that edge stopped being a tradeoff we had to sell clients on and became simply where projects start by default.

The clearest case for the shift showed up on a client site serving visitors spread across three continents. Under the old regional-server approach, users on the far side of the world saw meaningfully worse time-to-first-byte no matter how much we optimized the application layer, the physics of the round trip dominated everything else we could control. Moving the rendering layer to the edge closed that gap to the point where geography stopped being the primary factor in perceived speed.

Not every project benefits equally, and we still make the call project by project rather than defaulting blindly. An internal dashboard used almost exclusively by one team sitting in a single office gets little from edge distribution and can pick up unnecessary complexity instead, connection pooling to a single regional database from dozens of edge locations can actually work against you rather than for you.

Adopting edge as a default did force some real changes to how we build. State that used to live comfortably in server memory between requests needs to be either pushed to an edge-compatible store or reconsidered entirely, since a given user's requests aren't guaranteed to land on the same edge node twice in a row. Session handling, rate limiting, and anything relying on in-process caching all needed a second look before we felt comfortable calling edge-first a genuine default rather than an aspiration we hadn't fully tested.

The database side turned out to be the bigger unlock than the runtime side. Query latency from an edge function back to a single-region database can quietly erase most of the benefit of running the function at the edge in the first place, so the real enabler this year was the maturity of edge-compatible database options, connection pooling designed for high-concurrency, short-lived edge connections, and read replicas that follow request geography instead of sitting fixed in one region.

We're not claiming edge-first is the right call for every team. It's the right call for us because our client mix skews toward public-facing sites with genuinely global audiences, where latency is a real, measurable part of the user experience rather than a theoretical concern. For a team building primarily internal tools or serving a geographically concentrated user base, a conventional regional server remains the simpler, cheaper, and entirely defensible default, and we say so plainly when a client's actual needs point that direction instead.

← Back to the journal

Have a project in mind?
Let’s talk.

Tell us where you are and where you want to go. We'll map the fastest route between the two.

Currently accepting new clients