Blog

All posts, sorted by most recent.

Take-Home Assignments That Don’t Waste People’s Time

I’ve been on both sides of the take-home. The good ones share scope, time boxes, and a clear rubric. Here’s what we changed and why.

The Day CSS Layout Stopped Feeling Like Magic

Flexbox for one dimension, Grid for two. The simple mental model that turned years of guessing into a real skill.

·

Why I’m Writing This Blog (And What You’ll Find Here)

A short manifesto: practical engineering notes, real mistakes, no hype. Here’s what to expect and how I write.

The Code Review Comments I Find Myself Writing Most

After thousands of PR reviews, the same handful of comments keep coming up. Here are the patterns and why each one matters.

Replacing a Folder of Cron Scripts With n8n: A Practical Walkthrough

How I migrated a pile of brittle Node and Bash scripts to n8n workflows, what I kept, what I threw away, and the gotchas nobody mentions.

I Banned Stack Overflow for a Week: What I Used Instead, and What I Learned

Five days without the internet’s biggest copy-paste reservoir. The replacements weren’t magic — but they changed how I diagnose problems.

Why I Still Route Some Alerts Through Email (Yes, Email)

Slack is loud. PagerDuty is serious. Email is the boring pipe that quietly outlives every chat app of the year. Here’s when I still reach for it.

Vim, VS Code, JetBrains — The Editor Wars I’ve Stopped Caring About

I’ve been paid to write code in all three. What actually made me faster wasn’t the editor — it was learning my debugger and stopping the chair-rearranging.

·

Three API Design Mistakes I’ve Shipped (So You Don’t Have To)

Versioning, pagination, and the overloaded boolean that meant three different things. Real mistakes, real fixes, and what I’d do differently.

How I Read an Unfamiliar Codebase Without Pretending to Be a Genius

A repeatable order of operations for navigating a new codebase: entrypoints first, data flow second, opinions last.

My Boring Vercel Deploy Checklist (Copy-Paste Friendly)

The exact things I verify before telling a client a site is live — env vars, redirects, OG images, and the canonical URL that wasn’t.

Structured Logs vs. Print Statements: A Weekend I’ll Never Get Back

One Saturday outage taught me why JSON logs, request IDs, and consistent field names aren’t resume fluff. The before/after, with examples.

I Removed a Popular Library and Nothing Broke (At First)

How I figured out a date-formatting dependency was bloat, not a best practice, and replaced it with 20 lines of code.

·

I Rewrote a 200-Line Python Script in Rust: An Honest Post-Mortem

Wall-clock speed, developer experience, packaging, and the moment I missed Python’s dicts more than I expected. Real numbers, not benchmarks.

·

Five Small Git Habits I Stole From Better Engineers

None of these are flashy. That’s exactly why they’ve survived two job changes and my own laziness.

The Migration That Was 'Just Adding a Column'

Spoiler: it wasn’t. A Postgres story about locks, bad timing, and the checklist I now run before every DDL change.