Blog

Know What Leaving Would Cost

Switching costs accumulate quietly from the day you integrate. The useful question isn't whether you're locked in — it's whether you know the number.

They Changed It and You Didn't Deploy

Your code is identical to yesterday's and the behavior is different, because the change happened on the other side of an integration you don't control.

You Inherited Their Failure Modes

Integrating a third-party service imports more than its features. It imports their latency, their outage windows, their rate limits, and their idea of what an error means.

Tell the User the Work Is Pending

When work moves to a queue, the interface usually keeps claiming it's done. Closing the loop means the product tells the truth about what has actually happened yet.

The Message That Can Never Succeed

Most queue failures are transient and retrying fixes them. The interesting case is the message that will fail identically forever, and what your system does when it meets one.

The Queue Is Where the Work Hides

Moving work to a background queue makes the request fast. It doesn't make the work smaller — it moves it somewhere with fewer people watching.

The ALTER Statement Is the Easy Part

Changing a table's definition takes one line. Getting millions of existing rows into the new shape, while the system keeps running, is the actual project.

The Schema Outlives the Code

Applications get rewritten, frameworks get replaced, services get split apart. The data usually survives all of it, which is why the schema is the most expensive decision in the system.

Write Down What the Data Means

A column name tells you what something is called. It rarely tells you what counts, what's excluded, or which of three plausible definitions the number actually uses.

Follow One Request All the Way Through

Well-written, well-rationed log lines still fail if you can't assemble them into one story. The capability that makes logs worth keeping is being able to trace a single request end to end.