Hey, I'm Matt Bessey, a full stack software engineer based in Bristol, UK.

Recent Posts

  • Github Releases are no match for CHANGELOG.md

    I have noticed a trend recently of library authors abandoning their CHANGELOG.md files, in favour of Github Releases.

    Example of Github repository changelog.md stating that "Release notes are now stored in Github Releases"

    For a library author, the choice is understandable. A Github Release message contains much the same information as a changelog, so why duplicate effort and risk having no source of truth by maintaining both? But there’s a pretty big problem with this: Github Releases today sucks UX wise for your library’s users.

    TLDR? Get the best of both worlds by generating your changelog from your Releases with rhysd/changelog-from-release!

  • Why, after 6 years, I’m over GraphQL

    GraphQL is an incredible piece of technology that has captured a lot of mindshare since I first started slinging it in production in 2018. You won’t have to look far back on this (rather inactive) blog to see I have previously championed this technology. After building many a React SPA on top of a hodge podge of untyped JSON REST APIs, I found GraphQL a breath of fresh air. I was truly a GraphQL hype train member.

    However, as the years have gone on and I have had the opportunity to deploy to environments where non functional requirements like security, performance, and maintainability were more of a concern, my perspective has changed. In this article I would like to take you through why today, I would not recommend GraphQL to most people, and what I think are better alternatives.

  • Server Side Rendering for React + Apollo GraphQL Client

    In a previous post I talked about how I set up server side rendering of React components in Rails with Hypernova. I went on to build a complex Ruby based GraphQL data pre-fetcher because I could not work out how to do asynchronous pre-fetching of data in Hypernova alone. Well, it turns out though unclearly documented, its actually quite easy to do async pre-render work in Hypernova. That means we don’t need to do the crazy things I was doing in my previous post, and can instead pull off my dream: server side rendered React, served by the back-end language / framework of your choosing.

    I’m going to assume you’ve already set up Hypernova with Rails (or the back-end of your choosing). In this post, I will cover:

    1. Understanding how Hypernova’s renderer works
    2. Extending it to support pre-fetching GraphQL data with Apollo Client
    3. Extracting this GraphQL data for rehydration on the client’s Apollo Client
    4. Server side rendering your component with this pre-fetched data included