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.

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.

Semicolons: The Never Ending Debate

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.