How to Be a Good Open Source Maintainer
Most open source runs on one unpaid maintainer, and the silent close is the default. How to build a project that answers contributors on your worst week.

Most open source runs on one unpaid maintainer, and the silent close is the default. How to build a project that answers contributors on your worst week.

Five git log commands that diagnose a new codebase before you open a single file: code churn hotspots, bus factor, bug clusters, and crisis patterns.

Ruby 3.2 hit end of life on March 31, 2026. What that actually means for your Rails app, your real risk, and why Ruby 3.4 is the target to upgrade to.
A two-minute interactive audit to score whether technical debt is dragging your engineering team. Five signals that separate people problems from code problems.
Everything that breaks upgrading Rails 7.2 to 8.1, and how to fix it: enum syntax, the Solid trifecta, Propshaft, params.expect, and every silent regression.

Rails 8 ships Propshaft by default, but migrating from Sprockets isn't always the right call. How to decide, and a step-by-step migration guide for when it is.

To close a tab in vim, use :tabclose

My Rails codebase audit process: stakeholder interviews before code, Gemfile and schema before any tools, and a single-page triage as the deliverable.

To open a new tab in vim, use :tabnew

`default_scope` quietly breaks `Model.all`, corrupts scope chaining, bleeds into associations, and can leak data in multi-tenant apps. Here's why it's dangerous and what to use instead.
