Blog

You can find my latest AI engineering articles on Substack, leadership on LeadDev, or browse my topic guides and personal blog posts below.

Personal Blog

The PageSpeed Insights API

The PageSpeed Insights API provides free access to performance monitoring for web pages and returns data with suggestions for how to improve. The V5 API includes lab data from L...

We shipped font-display to Google Fonts!

We shipped font-display to Google Fonts!

At Google I/0 2019, we announced that we would finally be bringing support for font-display to Google Fonts. I’m happy to share this is now available in production for all Googl...

Native image lazy-loading for the web!

Native image lazy-loading for the web!

In this post, we’ll look at the new loading attribute which brings native <img> and <iframe> lazy-loading to the web!. For the curious, here’s a sneak preview of it ...

Rendering large lists with react-window

Rendering large lists with react-window

If you use React and need to display large lists of data efficiently, you may be familiar with react-virtualized. It’s a windowing library by Brian Vaughn that renders only the ...

Disallow large imports from JavaScript projects

Disallow large imports from JavaScript projects

Are there known large JavaScript dependencies your team wish they could disallow from a project? Good news! ESLint supports disallowing specific imports from projects using the ...

JavaScript Loading Priorities in Chrome

JavaScript Loading Priorities in Chrome

How browsers schedule and execute scripts can impact the performance of web pages. While techniques like <script defer>, <link rel=preload> (and others) influence sc...

Personal software

Personal software

Exploring how AI and modern tools are democratizing personal software development, making it accessible to everyone.

Offline installation of npm packages

Occasionally, you may need to install npm packages while offline. This could be due to a flaky network connection, being on a flight or during a workshop. Getting this working h...

Getting started with Progressive Web Apps

There’s been much welcome discussion about Progressive Web Apps lately. They’re still a relatively new model, but their principles can equally enhance apps built with vanilla JS...

Substack

LeadDev

Managing the chaos of context switching

It's time to examine the good, the bad, and the very ugly elements of context switching. Even better, we'll take a look at some strategies for managing it.

What makes an effective software engineer?

Being a good software engineer is not necessarily the same as being an effective one. Here, Google's Addy Osmani identifies the ten key traits of effective software engineers.