<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Debugging on Brian Faust</title><link>https://vacua.dev/tags/debugging/</link><description>Recent content in Debugging on Brian Faust</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://vacua.dev/tags/debugging/rss.xml" rel="self" type="application/rss+xml"/><item><title>Debugging Ends with an Explanation, Not a Green Build</title><link>https://vacua.dev/thoughts/debugging-ends-with-an-explanation-not-a-green-build/</link><pubDate>Thu, 01 Dec 2016 00:00:00 +0000</pubDate><guid>https://vacua.dev/thoughts/debugging-ends-with-an-explanation-not-a-green-build/</guid><description>&lt;p&gt;A cryptography-heavy application held its CPUs near 100 percent. We found
several cryptographic paths worth improving, which made the diagnosis feel
obvious: expensive mathematics was consuming the machine.&lt;/p&gt;
&lt;p&gt;Then we measured the log stream. The application was writing roughly a thousand
lines per second to local disk.&lt;/p&gt;
&lt;p&gt;Reducing emitted logging while leaving the application work unchanged returned
CPU use to roughly 10–20 percent. The cryptographic findings were real. They
were not the dominant cause of the observed saturation.&lt;/p&gt;</description></item><item><title>Test Cannot Prove Production When It Runs Different Rules</title><link>https://vacua.dev/thoughts/test-cannot-prove-production-when-it-runs-different-rules/</link><pubDate>Sat, 01 Oct 2016 00:00:00 +0000</pubDate><guid>https://vacua.dev/thoughts/test-cannot-prove-production-when-it-runs-different-rules/</guid><description>&lt;p&gt;A label-layout change behaved correctly in test and disrupted document
distribution in production. Both environments ran the same revision. The input
looked equivalent. The test result was still incapable of predicting the
production result.&lt;/p&gt;
&lt;p&gt;The difference was deliberate. Test loaded one default and production loaded
another. Users already had a way to select the layout they needed, but some had
come to rely on the accidental production default. A new recommendation passed
against the test rule while production continued through a different branch.&lt;/p&gt;</description></item><item><title>A Correlation Identifier Is a Boundary Contract</title><link>https://vacua.dev/thoughts/a-correlation-identifier-is-a-boundary-contract/</link><pubDate>Thu, 01 Sep 2016 00:00:00 +0000</pubDate><guid>https://vacua.dev/thoughts/a-correlation-identifier-is-a-boundary-contract/</guid><description>&lt;p&gt;A shipment request failed somewhere after payment and before its documents were
ready. The application, queue worker, and remote adapter all had logs. None of
them shared an identifier.&lt;/p&gt;
&lt;p&gt;The search began with timestamps, account details, and values which looked
related. Payment was a plausible lead. So were several nearby remote calls.
Some trails ended only after hours of reading because they belonged to
different requests which happened at nearly the same time.&lt;/p&gt;</description></item><item><title>A Failure Timeline Can Eliminate the Best-Looking Suspect</title><link>https://vacua.dev/thoughts/a-failure-timeline-can-eliminate-the-best-looking-suspect/</link><pubDate>Fri, 01 Apr 2016 00:00:00 +0000</pubDate><guid>https://vacua.dev/thoughts/a-failure-timeline-can-eliminate-the-best-looking-suspect/</guid><description>&lt;p&gt;A shipment appeared in the local database without the tracking number or label
that made it useful. Payment was the first suspect because it was known to be
brittle, and the visible result looked like an operation which had stopped
halfway through.&lt;/p&gt;
&lt;p&gt;But payment had completed. The remote booking had completed too. The failure
happened while persisting the response, and a broad catch continued without
reporting it.&lt;/p&gt;
&lt;p&gt;The payment theory was attractive because of history, not because it explained
the state in front of us. Ordering the effects made that mismatch visible
before another log line was added.&lt;/p&gt;</description></item><item><title>Production Bugs Can Live in the Data, Not the Code</title><link>https://vacua.dev/thoughts/production-bugs-can-live-in-the-data-not-the-code/</link><pubDate>Mon, 01 Feb 2016 00:00:00 +0000</pubDate><guid>https://vacua.dev/thoughts/production-bugs-can-live-in-the-data-not-the-code/</guid><description>&lt;p&gt;A delivery integration returned a label, but the application could not save
it. The same persistence path had passed with the fixtures used elsewhere.&lt;/p&gt;
&lt;p&gt;The failed label was not malformed. It was simply larger than the database
column could hold after Base64 encoding.&lt;/p&gt;
&lt;p&gt;That distinction changes the investigation. Comparing deployed revisions
would find nothing because the revision was not the variable. Repeating a
familiar fixture would also find nothing because the fixture did not cross the
same storage boundary. The investigation had treated “same code” as “same
experiment” while leaving the input that decided the result uncontrolled.&lt;/p&gt;</description></item><item><title>Reproduce the Failure Before Repairing It</title><link>https://vacua.dev/thoughts/reproduce-the-failure-before-repairing-it/</link><pubDate>Fri, 01 Jan 2016 00:00:00 +0000</pubDate><guid>https://vacua.dev/thoughts/reproduce-the-failure-before-repairing-it/</guid><description>&lt;p&gt;Submit two different browser error reports. The application accepts both
requests, sends both reports, and records the same tracing identifier for each.&lt;/p&gt;
&lt;p&gt;Nothing crashed during submission. No assertion failed. The defect appears
later, when someone searches the logs and finds two executions presented as
one trace.&lt;/p&gt;
&lt;p&gt;The tempting response is to replace the identifier generator immediately. The
collision already points in that direction. But a plausible diagnosis is not
yet a useful reproduction. Before changing the generator, we need a check
which states what was observed, what should differ, and which surrounding
machinery does not matter.&lt;/p&gt;</description></item></channel></rss>