Writing about software engineering and developer experience

All of my blog posts, even the ones that I might not fully agree with anymore. Software engineering is a process of continuous learning, don’t ever think there isn’t more to learn.

Building Figma Multiplayer Cursors

How easy is it to build real-time multiplayer cursor tracking from apps like Figma? I had that very question, and this post dives deep into the world of WebSockets and real-time communication to show exactly how you can build this type of feature in your apps.

Why Celebrate Christmas?

Most people celebrate Christmas in one way or another, but do they truly understand the reason why we should celebrate Christmas? Is Christmas just a commercial holiday, or is there more to it than that?

Efficient Pagination With Prisma

When adding pagination to the Bytes section of my website, I didn't want to use traditional limit/offset pagination, instead I wanted to experiment with cursor based pagination which scales significantly better than limit/offset pagination. In this post, we explore how to do this with Prisma.

Introducing Bytes

I'm proud to unveil Bytes, my collection of short-form posts, tips, and things I learn as I build software! Bytes is a way to document my learnings and share that knowledge with you and in this post I share a bit more about my motivation for creating Bytes, and some of the fun tech stack that powers it.

Why I Use The Fish Shell

While Bash and Zsh are the leading shells used by developers, I find the Fish shell to be a great fit for my workflow as it provides a great experience with nice features and improvments to my daily workflow. Read on to learn about my favorite features as well as some things I wish were changed in Fish.

Stop Using Semicolons

The JavaScript community loves to debate about semicolons thanks to JavaScript's ability to use them or not. In this article, I give some thoughts on the two camps in this debate as well as what I believe to be a more reasonable approach to this debate.

Better Code Highlighting with Shiki

Maintaining a developer blog almost always includes code highlighting. I recently switched from Prism to Shiki for more accurate and familiar code highlighting.

Embracing Shell Scripts

In the world of modern editors and tools, shell scripting has become somewhat of a lost skill or a dark art. In this article, I'll show practical, real-world examples of shell scripts to encourage you to re-explore shell scripting to enhance your workflows and increase your productivity.

My Journey to Become a Staff Software Engineer

A common question I hear from junior-level software engineers is what it takes to advance in their career as software engineers. In this article, I discuss my journey to becoming a staff software engineer and what I learned along the way.

Demystifying TypeScript's Extract Type

TypeScript's Extract type can be confusing to understand and use. In this article, I'll show how this type works as well as some practical examples of when you might want to use it in your applications.

Automating Code Transformation With jscodeshift

Tired of manual refactoring? This article shows how to automate code transformations using jscodeshift to reduce manual work when performing refactors.

Using Yarn Constraints

Yarn 2 introduced a new feature referred to as "constraints" to help you manage packages in your monorepo. In this article, I explain how constraints work and show you how you can use them to enforce consistency in your monorepo.

Automating npm Package Releases

Releasing npm packages can be a challenge. There are often many steps in the process and forgetting a step can result in a package being released incorrectly. In this article, I will show how to implement semantic-release in your project to fully automate your npm package releases.

Auto Formatting Code Using Prettier and GitHub Actions

Enforcing consistent code formatting in your repositories with Prettier is great, but it can easily result in a less than ideal developer experience. In this article, I discuss how to leverage GitHub Actions to automate code formatting without requiring any additional steps from developers.

Conquering Derived State

Derived state in React is generally considered to be an anti-pattern that should be avoided. In this article, I show how to recognize derived state in your components and alternative ways to write your components to avoid using derived state.

The Dangers of Shallow Rendering

Shallow rendering is an approach to unit testing made popular by the Enzyme library. In this article, I discuss many of the problems that arise when using shallow rendering and why you should avoid it when writing unit tests for your React components.

Why I Don't Use Environment Variables

Environment variables are a great way to manage configuration in your applications, but they introduce a number of challenges. In this article, I explain an alternative approach to managing configuration in your applications using environment files rather than environment variables.

Customizing npmjs.com Styles

Viewing npm packages on npmjs.com is a common tasks when developing front-end applications. In this article, I show a few small CSS customizations to improve the npmjs.com styles.

Automated npm Publishing Using GitHub Actions

Releasing npm packages can be a challenge. There are often many steps in the process and forgetting a step can result in a package being released incorrectly. In this article, I will show how to use GitHub Actions to automate some of the manual steps required to simplify your npm publishing workflow.

A Tale of Two Ideas

Every day, we encounter ideas and viewpoints that affect our lives in one way or another. In this article, I discuss how to look at differing ideas more objectively to help you make better decisions at work and in your personal life.

My Experience Changing my GitHub Username

Are you considering changing your GitHub username? In this article, I discuss everything I learned when changing my GitHub username to help you understand the steps required in this process.