<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="/assets/feed.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>tech in the woods</title>
    <description>covering the chaos where people, tech, and nature meet.</description>
    <link>https://techinthewoods.ca/</link>
    <atom:link href="https://techinthewoods.ca/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate>
      <title>it&apos;s DNS, stupid!</title>
      <link>https://techinthewoods.ca/posts/its-dns.html</link>
      <guid>https://techinthewoods.ca/posts/its-dns.html</guid>
      <description>fight the urge to redesign DNS</description>
      <content:encoded><![CDATA[<p>you&#8217;ve done it. the project is complete. you&#8217;re ready to update those <a href="https://en.wikipedia.org/wiki/Domain_Name_System" title="domain name system">DNS</a> records to
show the world your work.</p>
<p>aside from the <a href="#recommendations">recommendations</a> at the end of this article, there is nothing you can do
to make the DNS changes happen faster. you&#8217;re at the mercy of <a href="https://en.wikipedia.org/wiki/Time_to_live#DNS_records" title="DNS time to live">DNS TTL</a> and <a href="https://en.wikipedia.org/wiki/Name_server#Caching_name_server" title="DNS caching">DNS caching</a>.</p>
<p>this delay is almost <em>always</em> unacceptable to someone connected to the project. so
much so that they embark on a crusade to <strong>fix</strong> DNS.</p>
<p>the <em>ONLY</em> solution is to wait for records to expire in caches around the globe.</p>
<hr>
<h2 id="fight">fight!</h2>
<p>before you attempt anything, realise what you&#8217;re designing against.</p>
<ul>
<li>resolvers lie about honouring TTLs.<ul>
<li><strong>public</strong> resolvers generally respect them, but enforce <em>minimums</em> and sometimes <em>maximums</em>.</li>
<li><strong>ISP</strong> resolvers are notorious for inflating short TTLs upward to cut their own traffic, so your
60s TTL becomes their 1800s.</li>
<li><strong>browsers</strong> keep their own internal DNS cache.</li>
<li><strong>OS stub</strong> resolvers and connection-pooling apps (the JVM famously caches resolved
addresses) all add layers that TTL doesn&#8217;t reach.</li>
</ul>
</li>
<li>TTL is a maximum-staleness promise, not a schedule. propagation delay after a change
is <em>somewhere between zero and the TTL</em>, <strong>per resolver</strong>, which you can&#8217;t observe or control.</li>
<li><a href="#negative-ghost-rider-the-pattern-is-full">negative</a> caching, querying a name <em>before</em> it exists gets the absence cached too.</li>
</ul>
<h2 id="friction">friction</h2>
<p>the friction is almost always about one thing: the <strong>duration</strong> between when you change a record
and when the world actually <strong>sees</strong> the change.</p>
<p>TTL exists to reduce query load and latency, but it does that by handing out a copy that
resolvers are entitled to keep until it expires and that&#8217;s the part people have a problem with.</p>
<h2 id="negative-ghost-rider-the-pattern-is-full">negative, ghost rider. the pattern is full.</h2>
<p><a href="https://en.wikipedia.org/wiki/Negative_cache">negative caching</a> catches most people.</p>
<p>an NXDOMAIN gets cached per the SOA minimum/negative-TTL,
so if you query a name <strong>before</strong> you create it, the &#8220;doesn&#8217;t exist&#8221; answer <strong>sticks</strong> around.</p>
<p>classic &#8220;i added the record but still not found&#8221;.</p>
<p>a record created shortly after the JVM (or OS) cached the negative result, your app might
ignore the new DNS records until the negative cache expires.</p>
<hr>
<h2 id="recommendations">recommendations</h2>
<p>so what can you do to make the changes propagate faster on the day? plan.</p>
<p>preemptively drop the TTL on the records you plan to change to <strong>60 seconds</strong> a
day or two before the migration, do the cutover, then raise it back. avoid using
<strong>sub-60s</strong> TTLs, it multiplies your query volume and latency for little gain.</p>
<p>these could be separate change windows.</p>
<p>and if the <strong>real goal</strong> is quick failover rather than a one-off migration, don&#8217;t use DNS
for it at all. that&#8217;s a job for a load balancer/anycast/health-check job.</p>
]]></content:encoded>
    </item>
    <item>
      <pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate>
      <title>welcome to tech in the woods</title>
      <link>https://techinthewoods.ca/posts/launch.html</link>
      <guid>https://techinthewoods.ca/posts/launch.html</guid>
      <description>3… 2… 1… launch!</description>
      <content:encoded><![CDATA[<p>the first post.</p>
<p>jacking in from the eastern shores of Canada into the <a href="https://en.wikipedia.org/wiki/World_Wide_Web" title="W3, WWW, or Web">World Wide Web</a>
much like the crew of the <em>Nebuchadnezzar</em> from <em>The Matrix</em>.</p>
<p>what we will encounter or learn is unknown. but it will be documented.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>