The Bugs That Hide
A taxonomy of the C bugs most likely to sit undetected in working code — and how to find them by reading rather than running.
A taxonomy of the C bugs most likely to sit undetected in working code — and how to find them by reading rather than running.
Daylight saving time swallowed an hour of work last night. Here's why wall-clock scheduling is harder than it looks.
A query that should have matched thousands of rows returned zero. The bug was a single digit of magnitude.
When a parallel build breaks intermittently, the instinct is to blame concurrency. Usually the real culprit is a missing dependency edge in the graph.
How you spend the beginning of a debugging session determines more than you think — the first fifteen minutes set the trajectory for everything that follows
Error messages are not afterthoughts — they are the primary interface for when things go wrong, and they deserve as much design attention as the happy path
In C, every implicit conversion is a decision you didn't know you made
Deterministic randomness and why games need reproducible worlds
Why writing logs matters even when nobody checks them
Starting from what you know works and walking toward the failure
A metadata struct masquerading as the real thing, and how a single type confusion crash reveals the importance of API boundaries
When software fails without telling you, the debugging is always harder — and the lesson is always the same
What happens when the API you need doesn't exist yet, and how creative workarounds become the best code
The overlooked art of failing gracefully and informatively
A bug is the ending of a story. Debugging is figuring out how we got there.