Blame your tooling first
The most expensive lesson in the whole system. When a check returns something strange, the check is the suspect.
10 min read
Curious
0 XPThis lesson exists because the same mistake happened five times in one system, in five different disguises, and each time it looked exactly like a real problem with the outside world.
Here is the pattern that connects all five.
The uniform-failure test
A real problem is selective. Your bug is uniform. If 100% of something fails, or every file reports the same defect count, stop and check your instrument before you touch a single file.
Five times this happened
The invisible extra character
A link check ran over 54 URLs and every one came back unreachable, including several confirmed working minutes earlier. The URL list had been written by a script on Windows, which uses two characters for a line ending instead of one. Every URL carried an invisible extra character on the end, so every request went to an address that does not exist.
Cost: An afternoon, and it nearly triggered a mass 'fix' of 54 healthy links.
The rule that came out of it. Strip line endings before looping over a list of URLs. And treat a 100% failure rate as evidence of your own bug.
Eleven curly quotes that were not there
A scan for curly quotes reported exactly 11 in every article in a batch. There were zero. The pattern was written as a character class, and it was matching the star characters used for ratings in the comparison tables, not quotes at all.
Cost: Nearly a bulk find-and-replace across clean copy, which would have mangled every rating in every table.
The rule that came out of it. Before fixing a typographic finding, print the actual matches and look at them. An identical count in every file is the tell.
The site that was throttling us
Late in a long session, requests to one domain started timing out. Those exact URLs had returned fine earlier in the same session. Nothing was broken. About 50 requests to one domain had triggered its rate limiting.
Cost: A batch of links was almost downgraded on the strength of a failure caused by our own request volume.
The rule that came out of it. Fetch the same URL through a different method. If method B works and method A does not, you are being throttled, not looking at dead links. Space out checks over a long session.
The user agent nobody thought about
Twenty-nine calls from a script returned 403 on every URL, including one that had worked minutes earlier through a different method. The service rejects the default user agent that the programming language sends. It had nothing to do with the URLs.
Cost: A whole research pass returned empty and looked like a dead API.
The rule that came out of it. Send a real browser user agent on every scripted HTTP call. Uniform 403s across unrelated domains are a client-side problem.
Ninety-five double spaces per file
A whitespace sweep reported between 83 and 95 double spaces in every one of four articles. There were zero. The pattern used the shorthand for 'any whitespace', which also matches line breaks, so every blank line between paragraphs scored as a defect.
Cost: A bulk fix would have deleted every paragraph break from four finished articles.
The rule that came out of it. Anchor whitespace checks to text on the same line. And again: a uniform per-file count is your bug.
The habit
You do not need to remember five stories. You need one reflex: when a result surprises you, ask could my instrument produce this exact result while nothing is wrong?
Then find out, before you change anything.
Debug the harness
110 XP+28 perfectFour real incidents. Each one looked like the world was broken. Pick the first move for each, and get all four right on the first try to unlock the Harness debugger badge.
Call 1 of 4
Finished reading?
Mark it done to bank the XP and keep your streak alive. Any challenges on this page score separately, so you can come back for a perfect run later.