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.