Blog

2026

The performance cost of your design system

Design systems are sold on consistency and developer experience, and they deliver both. What rarely makes it onto the slide is that a design system is also the most duplicated dependency in your company: every page of every product pays for its architectural choices. I've spent a lot of time profiling apps where the biggest performance problem wasn't the app at all - it was the system underneath it.

Getting started with Playwright test agents

Writing end-to-end tests has never been the hard part. Keeping them alive is. Playwright now ships three test agents, a planner, a generator and a healer, that take on a surprising amount of that work. I've been trying them out and this post covers how they fit together.

2022

2021

2020

Updated (originally published )

Getting started with Sapper and Svelte

A friend of mine introduced me to Svelte and the approach impressed me. Instead of doing a lot of work in the browser inside a virtual DOM (like a lot of frameworks), Svelte is a compiler step, meaning the code is compiled to efficient vanilla JavaScript when the project is built. It results in a considerably lighter load whilst also being able to leverage useful functionality such as reactivity which might be why you're choosing to use a framework in the first place. I combined this with Sapper - since retired in favour of SvelteKit - to get a lightweight, statically generated application out of the box.

2018

Updated (originally published )

Static and serverless with Vue.js, Nuxt.js, Vuex, Contentful, Netlify

I'm a big fan of Vue.js and Pinia for state management. Combine this with Nuxt and you can generate a static version of your Vue application and give your users a speedy site served from HTML files. I cover this and how you might approach making the content of your static site dynamic using Netlify build hooks and Contentful as a CMS.

Updated (originally published )

Working with the Payment Request API

One of things that irks me about the usability of shopping online is the inconsistent checkout experience between different merchants. Do I really need to enter the same delivery/billing address, card number, CVC code etc. into every websites specific form? Payment Request API to the rescue.

Updated (originally published )

Improving Accessibility On Your Web Application

Advancing my knowledge around the topic of accessibility has been something I've been doing a lot recently. With this knowledge came the realisation that previous web applications I'd worked on could do with some improvements in this field. There are a few quick wins which could fundamentally improve the accessibility of your web application post-build.