Writing

Essays and technical posts about systems, tradeoffs, and software that has to hold up in practice.

Writing for senior engineers, engineering leaders, and anyone who cares about internal systems, production software, and the technical decisions behind them.

The Last 20% Is Still the Job

April 25, 2026#ai#engineering-judgment#technical-leadership

AI can one-shot a convincing first pass, but the work that makes software valuable still lives in judgment, boundaries, and tradeoffs.

The Problem-Solving Pace

April 28, 2024#engineering-judgment#technical-leadership#debugging

Slowing down, explaining your thinking, and focusing on process can make hard debugging work much easier.

Just Solve the Freaking Problem

April 23, 2024#engineering-judgment#technical-leadership

Before turning a small ticket into a rewrite, ask whether the business actually needs the bigger fix right now.

Accessible Nested Links

January 10, 2024#frontend#accessibility#architecture

How to make a whole card clickable without nesting links or relying on JavaScript.

Maybe You Don't Need This Library

December 17, 2023#engineering-judgment#internal-systems#architecture

Libraries are useful, but they are not free. Sometimes the right move is to write the code yourself first.

Should I Use a Form Library in Remix?

December 16, 2023#remix#frontend#engineering-judgment

Remix already gives forms a strong foundation, but complexity can still justify bringing in a library.

Translating Breadcrumbs in Remix

December 5, 2023#remix#frontend#architecture

Two clean ways to make Remix breadcrumb handles work with i18n without fighting where translation context lives.

Integrating Third-Party Services in Remix

November 23, 2023#remix#backend#architecture

A practical way to wire third-party services into Remix by treating runtime boundaries, environment variables, and SDK placement as separate problems.

Running Long-Running Tasks

November 1, 2023#production-engineering#backend#architecture

A practical guide to moving heavy work out of request handlers without overengineering it on day one.

Solving Equation Dependencies with Graphs

January 29, 2023#algorithms#problem-solving#architecture

When equations depend on each other, the real problem is dependency ordering. A graph plus topological sort makes that explicit.

Graph Traversals: BFS vs. DFS

January 26, 2023#algorithms#problem-solving

Breadth-first and depth-first search solve different problems. The useful part is knowing when the traversal order changes the answer.