BT

Migrating Medium to React.js and GraphQL

| by Sergio De Simone Follow 13 Followers on May 16, 2018. Estimated reading time: 2 minutes |

Medium migrated their existing system to a new architecture based on React.js and GraphQL. Two major goals of their endeavour, as Medium engineer Sasha T. Solomon explained, were making the new system incrementally available to users while not hindering development of new features.

Migrating off of an existing code base that is using somewhat older tech is not an easy decision to take. Besides the costs, you have to take into account how long it will take before your users see the benefits of the new system in place, and possibly you do not want to have to wait for the whole migration before that happens. Additionally, you want to make sure your service remains stable across the journey and that it can evolve, either by fixing bugs or implementing new features.

Five years after the initial development of their platform, that was exactly the case for Medium, as Solomon explains,

Migrating an entire system to new tools and frameworks isn’t an easy task. And doing that while not impacting feature development? That’s even harder

The Medium engineering team devised a path forward to the migration of their service that aimed to let people start using the new system as soon as possible, and at the same time not hinder changes to the existing system.

The first step of the migration was rewriting Medium’s client app with React.js and relying on GraphQL as an interface layer to the existing API. As a GraphQL client-side framework, Medium is using Apollo Client.

In this phase, both the old and the new system coexisted, with each serving a different set of pages. This approach had the benefit of not requiring a full server-side rewrite and not affecting the development of new features for the old system. A key decision the Medium team took was using protocol buffers to describe the legacy API as a schema for interfacing with GraphQL.

In a second phase of the migration, which according to Solomon is starting soon, server-side code will be refactored into services to feed the GraphQL layer, which will use Sangria as its GraphQL server-side framework.

The use of GraphQL is expected to bring here a big advantage, since its more granular structure maps directly into more modular and simpler services, which in turns is expected to improve their performance as well. The new services, that will use gRPC to talk to the GraphQL service, can be built in a totally independent way from the old services, while the old services are kept in places to power the old API.

Rate this Article

Adoption Stage
Style

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Login to InfoQ to interact with what matters most to you.


Recover your password...

Follow

Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.

Like

More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.

Notifications

Stay up-to-date

Set up your notifications and don't miss out on content that matters to you

BT