Skip to main content
Posts
Stop Talking About Blameless Postmortems
Why I Write When AI Already Knows the Answer
How to Migrate Data From One Postgres Instance to Another
Should I use a Managed Postgres Instance?
Why “willow.camp”
Introducing willow.camp
How Rack::Timeout Keeps Your App Alive
We Have Always Been Vibe Coding
How to Request Changes During Code Review
I Started a Podcast at Work
How I Developed a Muffin Recipe
How I Plan Software Projects
Feeling Stuck at Work
Weird LLM Apps
Ten Links from This Week
Ten Things I Read this Week
Show Up With Questions
Excellent Engineers
The New Old Skills
Using the Wrong Language Model
Ten Things I Read This Week
Problems that Matter
This Has Always Been the Job
Things I Read This Week
Misinformation and AI
Critical Thinking
A Day in the Life of a Programmer in 2026
AI Will Change My Job and Yours
My Distraction-free Work Setup
How Do LLM-Suggested Edits Work in Text Editors
Samuel Johnson, the Unexpected Grandfather of LLMs
But First, Why?
My Reading List
Strategy First
What is Composition in Object Oriented Programming?
What are you testing when you test performance?
Schema Stitching 101 with GraphQL Tools
The Toaster Didn't Trip the Breaker: or, Why the Container Died
Documenting Source Service in Stitched Schemas
Ouch! Killing PG Performance with Row-Level Security
Code Smell: this.object.knows.too.much
Cyclomatic Complexity
DROP TABLE oh_no CASCADE;
Help! My Code Gained Connascence!
Un-mess Up with Git reflog!
Migrating from Standalone Sidekiq to an ActiveJob Adapter
Weird Method Signatures in Ruby with Keyword Arguments