<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Simplicity · XB Field Notes</title><link>https://hk.xbcatm.com/tags/simplicity/</link><description>Illustrated field notes on HTTP, DNS, TLS, Caddy, SSH, releases, and recovery.</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://hk.xbcatm.com/tags/simplicity/index.xml" rel="self" type="application/rss+xml"/><item><title>The advantage of small systems</title><link>https://hk.xbcatm.com/notes/the-advantage-of-small-systems/</link><pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate><guid>https://hk.xbcatm.com/notes/the-advantage-of-small-systems/</guid><description>A system is easier to trust when its important behavior fits inside a single mental model.</description><content:encoded>&lt;p&gt;Small does not mean unfinished. It means each component has a clear job, dependencies are deliberate, and the path from request to result remains visible.&lt;/p&gt;
&lt;figure class="technical-diagram"&gt;&lt;img loading="lazy" src="https://hk.xbcatm.com/visuals/small-system.detail.en.svg" alt="DNS lookup returns an address to the client without carrying HTTP. The request reaches the intended TLS edge and one known output directory. A file decision leads to intended content or a site-handled 404. Responsibility fields name DNS, edge and release owners; file provenance and recovery requirements remain explicit. Independent backup and recovery drills address single points of failure." width="720" height="3030"&gt;&lt;figcaption&gt;Name each request boundary, its evidence and its owner. Fewer components reduce the paths to understand; backups and recovery practice still carry the recovery promise.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id="visibility-is-a-feature"&gt;Visibility is a feature&lt;/h2&gt;
&lt;p&gt;When operators can name every boundary, they can also identify which evidence is missing. Logs become more useful, alerts become more specific, and routine maintenance becomes less risky.&lt;/p&gt;
&lt;p&gt;For a static website the important boundaries are usually easy to list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DNS points the hostname to the intended edge.&lt;/li&gt;
&lt;li&gt;TLS terminates at the intended proxy.&lt;/li&gt;
&lt;li&gt;The proxy serves one known output directory.&lt;/li&gt;
&lt;li&gt;The output contains only the files the site needs.&lt;/li&gt;
&lt;li&gt;A 404 response is handled by the site, not by an accidental upstream.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Writing this list down is more valuable than adding a dashboard that does not answer any of those questions.&lt;/p&gt;
&lt;h2 id="complexity-should-earn-its-place"&gt;Complexity should earn its place&lt;/h2&gt;
&lt;p&gt;A new layer is worthwhile when it removes more uncertainty than it creates. A build step that fingerprints assets can be useful when caching is important. A database is useful when content needs transactions. Neither is automatically an improvement for a small, mostly static site.&lt;/p&gt;
&lt;p&gt;The same rule applies to client-side JavaScript. If a page genuinely requires client-side scripting, choose the smallest implementation that meets the requirement and review its content security policy deliberately. For this site, that would first require revisiting the accepted zero-script architecture and its verification contract; it is not an exception to the current policy. If the page is a document, plain HTML is often easier to inspect and more resilient.&lt;/p&gt;
&lt;h2 id="make-ownership-explicit"&gt;Make ownership explicit&lt;/h2&gt;
&lt;p&gt;Every file should have a reason to exist and a clear way to update it. A vendored theme should record its upstream version and license. A generated directory should be marked as generated. A resource download should say what it contains, when it was updated, and how its checksum was produced.&lt;/p&gt;
&lt;p&gt;These small statements prevent future operators from treating an accidental artifact as a supported interface.&lt;/p&gt;
&lt;h2 id="leave-room-for-the-next-change"&gt;Leave room for the next change&lt;/h2&gt;
&lt;p&gt;The best small system is not the one with the fewest lines. It is the one where the next change has a visible place to go. A notes site can start with Markdown, a static generator, and a web server; if it later needs search or comments, the new requirement can be evaluated on its own rather than assumed from the beginning.&lt;/p&gt;
&lt;p&gt;Small is not automatically fault-tolerant. A single edge, disk, or operator can still be a single point of failure. Choose acceptable recovery time and data loss, keep an independent backup, and rehearse recovery. The benefit of fewer components is a smaller set of failure paths to understand, not immunity to outages.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gohugo.io/getting-started/directory-structure/"&gt;Hugo directory structure&lt;/a&gt;, directory conventions for content and assets, checked 2026-07-27.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caddyserver.com/docs/caddyfile/directives/file_server"&gt;Caddy &lt;code&gt;file_server&lt;/code&gt; directive&lt;/a&gt;, static file serving defaults referenced by the design, checked 2026-07-27.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>