Recent Articles

Discussion Guide: The Staff Engineer's Path

Nov 7, 2023 · 7 min read

A guide with discussion prompts for Tanya Reilly's The Staff Engineer's Path.

Discussion Guide: The Unicorn Project

Nov 6, 2023 · 8 min read

A guide with discussion prompts for Gene Kim's The Unicorn Project.

Use GitHub Actions Timeouts to Protect Your Budget

Nov 5, 2023 · 4 min read

The default job timeout of 6 hours is unreasonably long.

Keep Lerna Monorepos Updated with Renovate

Nov 4, 2023 · 9 min read

Keeping dependencies up to date is important for every codebase, and there are a few strategies for Lerna monorepos.

An Effective Incident Runbook Template

Nov 3, 2023 · 8 min read

A structured incident runbook that is tailored to your organization's needs is an essential tool in your SRE documentation.

Skippable GitHub Status Checks Aren't Really Required

Jul 25, 2023 · 5 min read

If your GitHub branch protection rule requires a status check, but that status check can be skipped, you aren't actually protected.

Linting Markdown files with markdownlint

Apr 5, 2023 · 2 min read

Markdown's syntax is easy to learn, and even though the syntax is forgiving, linting can help you avoid unexpected issues.

Bash Environment Variable Defaults

Apr 5, 2023 · 3 min read

Bash scripts can set defaults for environment variables that are optionally supplied at execution time.

Hash a String to a Number in Bash

Mar 5, 2023 · 2 min read

Sometimes you need to turn a stable string ID into a stable number ID, and it's relatively easy to do in Bash.

Installing npm Packages From GitHub

Feb 23, 2023 · 2 min read

Installing packages from GitHub is a great way to test them before publishing.

Reporting Lerna Monorepo Test Coverage to Codecov

Feb 20, 2023 · 3 min read

It's not straightforward, and you likely can't use preexisting CI tasks.

Migrating Existing Repos to a Lerna Monorepo

Feb 20, 2023 · 9 min read

As of writing, I maintain 15 Metalsmith plugins, and it has become a pain to manage all of them independently.