THE MIGRATION LINE
INCIDENT // LYFT-2020 SHIPPED

Lyft's homegrown Express build system scaled to a hundred frontend microservices — and then upgrading it became a showstopper, so Lyft rebuilt the platform on Next.js.

LYFT · 2020 · FRONTEND / NEXTJS / EXPRESS / PLATFORM
System stress over time Breach at T+4
~100 Frontend microservices
~100, 6 offices Frontend developers
@lyft/service, 2020 New platform
BASELINE

A build system that worked beautifully

Lyft’s frontend ran on a shared, centralized build system package called Frontend Build. It spun up a new service from scratch on top of Express, with preconfigured Webpack defaults, already wired into the Lyft microservice mesh through Envoy, carrying the house recommendations for state management and testing.

It worked. Frontend Build is what took Lyft from dozens of frontend microservices to hundreds, and it kept evolving with the ecosystem — at one point Lyft stopped endorsing Redux as the default in favor of a React Context-heavy approach. Teams truly owned the services they created. By 2020 the org had grown from about 25 frontend engineers in 2016 to almost a hundred, spread across six offices on two continents.

SYMPTOM

Nobody could upgrade the thing everybody used

Then a strange thing started happening to the one piece of software every frontend service depended on. Upgrading Frontend Build — the shared package, the common foundation, the whole point — had become a complex task. In some cases, in Lyft’s own words, a real showstopper.

That is a peculiar failure mode. The build system had not broken. It still built. It was simply, increasingly, impossible to move forward. And standing still had a price: not upgrading could expose Lyft to a number of issues, including potential security risks.

CLUES

Following the divergence

The clue is in the org chart, not the code. Lyft’s frontend was deliberately distributed: teams worked independently on their own services, and they truly owned them. That autonomy is exactly what let the service count climb into the hundreds without a central team becoming a bottleneck.

But independence compounds. Because each team configured and evolved its own service on its own schedule, each service could diverge greatly from the others. A hundred services meant a hundred slightly different shapes of the same foundation.

REVEAL

The strength was the bug

The thing jamming the upgrade was not a bad dependency or an unlucky Webpack config. It was the distribution itself — the very property that made the platform a success.

2020

Hand the upgrades to a platform that ships them for you

The solution arrived in 2020 as @lyft/service, a new infrastructure platform built on Next.js.

When the thing you cannot upgrade is the thing everyone depends on, the fix isn’t to take autonomy back — it’s to move autonomy off the upgrade path.

Source — read the original

https://eng.lyft.com/frontend-at-lyft-an-overview-f934c1524370

A plain-language, AI-drafted and human-edited retelling of the article published on eng.lyft.com, reorganized and explained in our own structure and words, with original analysis in the editor's note above. The facts, numbers, and decisions belong to the original author and are not altered. For the full depth, read the source.

← All systems