<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Integrations on Brian Faust</title><link>https://wimdy.works/tags/integrations/</link><description>Recent content in Integrations 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://wimdy.works/tags/integrations/rss.xml" rel="self" type="application/rss+xml"/><item><title>A Third-Party API Is an Unreliable Collaborator</title><link>https://wimdy.works/thoughts/a-third-party-api-is-an-unreliable-collaborator/</link><pubDate>Thu, 01 Feb 2018 00:00:00 +0000</pubDate><guid>https://wimdy.works/thoughts/a-third-party-api-is-an-unreliable-collaborator/</guid><description>&lt;p&gt;A scheduled import begins by listing remote orders. The list request returns a
502 HTML page, so there are no trustworthy item identifiers to process.&lt;/p&gt;
&lt;p&gt;On another run the list succeeds. One order then returns a 504 while its
details are being loaded. The remaining orders are still independent and can
continue.&lt;/p&gt;
&lt;p&gt;These failures share a provider, but not a recovery boundary. Calling both “the
API is down” is convenient and useless: it either discards work which could
continue or pretends the response established more than it did.&lt;/p&gt;</description></item><item><title>Silencing an Error Does Not Protect the Customer</title><link>https://wimdy.works/thoughts/silencing-an-error-does-not-protect-the-customer/</link><pubDate>Wed, 01 Jun 2016 00:00:00 +0000</pubDate><guid>https://wimdy.works/thoughts/silencing-an-error-does-not-protect-the-customer/</guid><description>&lt;p&gt;One of our shipment-booking paths returned success after it had already failed.
The remote booking existed and so did a local shipment, but the shipment had no
label and no tracking number. From the customer&amp;rsquo;s point of view, the one thing
we had promised to do was not done.&lt;/p&gt;
&lt;p&gt;The failure happened while persisting the carrier response. A broad catch
swallowed the exception, reported nothing, and let the request continue. This
was meant to serve a reasonable operational goal: do not bother customers with
errors if we can avoid it. Instead, we gave them a broken shipment and called
it a success.&lt;/p&gt;</description></item><item><title>A Failure Timeline Can Eliminate the Best-Looking Suspect</title><link>https://wimdy.works/thoughts/a-failure-timeline-can-eliminate-the-best-looking-suspect/</link><pubDate>Fri, 01 Apr 2016 00:00:00 +0000</pubDate><guid>https://wimdy.works/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;Payment was guilty by reputation, not by the state in front of us. Ordering the
effects made that mismatch visible before another log line was added.&lt;/p&gt;</description></item></channel></rss>