<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Ryan Fowler</title>
    <link>https://ryanfowler.com/</link>
    <description>Notes on software and systems.</description>
    <language>en</language>
    <lastBuildDate>Sat, 17 Jun 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://ryanfowler.com/feed.xml" rel="self" type="application/rss+xml"></atom:link>
    <item>
      <title>Hello, World</title>
      <link>https://ryanfowler.com/blog/hello-world/</link>
      <guid>https://ryanfowler.com/blog/hello-world/</guid>
      <description>A short note about keeping a personal site small, fast, and easy to own.</description>
      <dc:creator>Ryan Fowler</dc:creator>
      <content:encoded>&lt;p&gt;Every personal site begins with an empty page and a decision: what belongs here?&lt;/p&gt;&#xA;&lt;p&gt;For this one, the answer is &lt;strong&gt;writing&lt;/strong&gt;. It is a place for notes about software, systems, tools, and the lessons that emerge while making things. The site itself follows the same practical spirit. A small Go program turns Markdown into plain HTML and CSS. There is no database, client-side framework, or build service to understand.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-keep-it-simple&#34;&gt;Why keep it simple?&lt;/h2&gt;&#xA;&lt;p&gt;Simple systems are easier to change. The whole site can be built with one command, inspected with ordinary tools, and deployed almost anywhere. Every page continues to work without JavaScript.&lt;/p&gt;&#xA;&lt;p&gt;That does not mean the design must feel generic. Constraints can make the important choices clearer: type, space, rhythm, color, and the words themselves.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The goal is not to use the fewest possible tools. It is to keep the distance between an idea and a published page short.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There will be more here over time. For now: hello, world.&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>Sat, 17 Jun 2023 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title>The shape of a useful tool</title>
      <link>https://ryanfowler.com/blog/shape-of-a-useful-tool/</link>
      <guid>https://ryanfowler.com/blog/shape-of-a-useful-tool/</guid>
      <description>Good tools reduce the number of decisions required to do good work.</description>
      <dc:creator>Ryan Fowler</dc:creator>
      <content:encoded>&lt;p&gt;The best tools can be difficult to notice. They fit the work closely enough that the interface recedes and the result stays in view.&lt;/p&gt;&#xA;&lt;p&gt;Software often moves in the other direction. A small need accumulates settings, modes, and extension points. Each choice makes sense in isolation. Together, they ask the user to understand the tool before doing the work.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“The best modules are those that provide powerful functionality yet have simple interfaces.”&lt;/p&gt;&#xA;&lt;p&gt;&lt;small&gt;&lt;cite&gt;— John Ousterhout, A Philosophy of Software Design&lt;/cite&gt;&lt;/small&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;start-with-the-common-path&#34;&gt;Start with the common path&lt;/h2&gt;&#xA;&lt;p&gt;A useful tool should make its main task obvious. Good defaults are part of the interface, not an alternative to it. They encode a clear opinion while leaving an escape hatch for the cases that genuinely need one.&lt;/p&gt;&#xA;&lt;p&gt;This static site generator has one common path:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-sh&#34;&gt;go run ./cmd/site build&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That command validates the articles, renders the pages, minifies the assets, and writes a directory ready to deploy. The implementation can change without making the publishing workflow more complicated.&lt;/p&gt;&#xA;&lt;h2 id=&#34;keep-the-seams-visible&#34;&gt;Keep the seams visible&lt;/h2&gt;&#xA;&lt;p&gt;Simple does not mean opaque. Plain Markdown goes in. Plain HTML comes out. A writer can inspect either side with tools that will still exist years from now.&lt;/p&gt;&#xA;&lt;p&gt;A useful tool makes routine work quiet and unusual work possible. Finding that balance is less about adding features than deciding which ideas the tool can safely hide.&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>Fri, 16 Jun 2023 00:00:00 +0000</pubDate>
    </item>
  </channel>
</rss>