<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>The Haystack</title>
  <link href="https://www.the-haystack.com/feed/" rel="self"/>
  <link href="https://www.the-haystack.com/"/>
  <id>https://www.the-haystack.com/</id>
  <updated>2026-10-02T00:00:00Z</updated>
  <author>
    <name>Stephen Hay</name>
  </author>
  <entry>
    <title>Designing in public, iteration 3</title>
    <link href="https://www.the-haystack.com/public03/" rel="alternate"/>
    <id>https://www.the-haystack.com/public03/</id>
    <updated>2026-10-02T00:00:00Z</updated>
    <content type="html">&lt;p&gt;
This iteration: updating the &lt;a href=&quot;/now/&quot;&gt;Now&lt;/a&gt; page, moving the &lt;i&gt;Designing in public&lt;/i&gt; message to a temporary new home, and adding a &lt;i&gt;recent posts&lt;/i&gt; block to the &lt;a href=&quot;/&quot;&gt;home page&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
In &lt;a href=&quot;/public02/&quot;&gt;iteration 2&lt;/a&gt;, I made a small set of design tweaks that had a big impact on readability. These changes aren&apos;t final. I&apos;m &quot;sculpting&quot; a bit. Again, I&apos;m not maintaining a todo list; things stand out to me while looking at the website as a whole, and I just decide on what I&apos;d like to do next, and I&apos;m jotting down some of my thinking and methods as I go.
&lt;/p&gt;

&lt;p&gt;
Compared to &lt;a href=&quot;/public/&quot;&gt;iteration 1&lt;/a&gt;, iteration 2&apos;s improvements to text column width and line-height make a big difference.
&lt;/p&gt;


&lt;figure id=&quot;orgca300d4&quot;&gt;
&lt;img src=&quot;/assets/images/public02a.png&quot; alt=&quot;Web page with readable column width and line-height&quot;&gt;

&lt;/figure&gt;

&lt;p&gt;
And since showing code is a normal part of the website, using the Emacs package &lt;code&gt;htmlize&lt;/code&gt; and a little bit of CSS yields passable syntax highlighting.
&lt;/p&gt;


&lt;figure id=&quot;org1a4d249&quot;&gt;
&lt;img src=&quot;/assets/images/public02b.png&quot; alt=&quot;Page snippet containing a syntax-highlighted code block&quot;&gt;

&lt;/figure&gt;

&lt;p&gt;
The colors generated by &lt;code&gt;htmlize&lt;/code&gt; came directly from the color theme I&apos;m currently using in my text editor: &lt;code&gt;ef-dream&lt;/code&gt;, one of &lt;a href=&quot;https://protesilaos.com&quot;&gt;Protesilaos Stavrou&lt;/a&gt;&apos;s wonderful &lt;a href=&quot;https://protesilaos.com/emacs/ef-themes&quot;&gt;ef-themes&lt;/a&gt;.
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgf5d0b4a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf5d0b4a&quot;&gt;Updating the &lt;i&gt;Now&lt;/i&gt; page&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgf5d0b4a&quot;&gt;
&lt;p&gt;
My &lt;a href=&quot;/now/&quot;&gt;Now&lt;/a&gt; page wasn&apos;t really &quot;now&quot;, as I wrote it five years ago. (That unsettles me in more ways than one. Also, &lt;a href=&quot;/2021/03/05/dates-provide-context/&quot;&gt;dates are important&lt;/a&gt;.) &lt;a href=&quot;https://sive.rs&quot;&gt;Derek&lt;/a&gt; sent me multiple emails (likely automated) asking if I was ready to update it. Apparently, I was not. But now I am.
&lt;/p&gt;

&lt;p&gt;
What I started debating, is whether I should keep old Nows. It appears that Derek &lt;a href=&quot;https://sive.rs/now&quot;&gt;doesn&apos;t do it&lt;/a&gt;, but I saw that &lt;a href=&quot;https://maggieappleton.com/now&quot;&gt;Maggie Appleton does&lt;/a&gt;, which made me pause. Her approach creates a timeline.
&lt;/p&gt;

&lt;p&gt;
After a brief internal debate, I settled on &lt;i&gt;Now&lt;/i&gt; having a single purpose: to talk about what I&apos;m doing right now, and replacing the content with each update. While I enjoy Maggie&apos;s timeline approach, I prefer the pointed purpose.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org4ad8324&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4ad8324&quot;&gt;Putting the &lt;i&gt;designing in public&lt;/i&gt; message in its place&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org4ad8324&quot;&gt;
&lt;p&gt;
I won&apos;t be writing this series forever. (Or will I? &lt;a href=&quot;/2009/07/16/designing-this-site-prologue/&quot;&gt;Last time&lt;/a&gt; I only did two parts 🙈.) And while I&apos;m doing it, the message telling everyone why the site&apos;s content and design is wonky needs to be somewhat prominent, but also out of the way. A cheap way to get that hierarchically &quot;correct&quot; is to put it in a banner of sorts up against the top of the page. Putting it there would be pretty standard, I&apos;d say, but there&apos;s good reason for it. Putting a banner slightly lower puts space all around it. That space would create a form of emphasis, and likely more than it deserves. Against the top of the page, there&apos;s a slight blending with the browser chrome, which hugs it on three sides. This gives the balance I want between attention and a sense of being part of the periphery. As for the color, I haven&apos;t chosen a palette yet. A color from the code syntax highlighting should work well.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-css&quot;&gt;&lt;span class=&quot;org-css-selector&quot;&gt;.banner&lt;/span&gt; {
    &lt;span class=&quot;org-css-property&quot;&gt;margin&lt;/span&gt;: 0;
    &lt;span class=&quot;org-css-property&quot;&gt;background&lt;/span&gt;: &lt;span class=&quot;custom&quot;&gt;#8fcfd0&lt;/span&gt;;
    &lt;span class=&quot;org-css-property&quot;&gt;color&lt;/span&gt;: contrast-color(&lt;span class=&quot;custom&quot;&gt;#8fcfd0&lt;/span&gt;);
    &lt;span class=&quot;org-css-property&quot;&gt;text-align&lt;/span&gt;: center;
    &lt;span class=&quot;org-css-property&quot;&gt;padding&lt;/span&gt;: 0.5em;
}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
The CSS &lt;code&gt;contrast-color&lt;/code&gt; function returns either white or black, whichever contrasts enough with the background. Here, it returns black. The text is centered, and we give it a bit of padding.
&lt;/p&gt;

&lt;p&gt;
I moved the banner up in the HTML, and I decided to give it its own &lt;code&gt;grid-area&lt;/code&gt;.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-css&quot;&gt;  &lt;span class=&quot;org-css-selector&quot;&gt;body&lt;/span&gt; {
      [...]
      &lt;span class=&quot;org-css-property&quot;&gt;grid-template&lt;/span&gt;:
          &lt;span class=&quot;org-string&quot;&gt;&quot;b b b&quot;&lt;/span&gt; auto
          &lt;span class=&quot;org-string&quot;&gt;&quot;h h h&quot;&lt;/span&gt; auto
          &lt;span class=&quot;org-string&quot;&gt;&quot;. c .&quot;&lt;/span&gt; auto
          &lt;span class=&quot;org-string&quot;&gt;&quot;f f f&quot;&lt;/span&gt; auto / 1fr min(70ch, 100% - 4rem) 1fr;
      [...]
  }

&lt;span class=&quot;org-css-selector&quot;&gt;.banner&lt;/span&gt; { &lt;span class=&quot;org-css-property&quot;&gt;grid-area&lt;/span&gt;: b; }
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Manipulating a grid with the template syntax is designer-intuitive and quick. What I like most about it is that it feel more natural to me than the row and column syntax. That feels too much like a carryover from tables (though it is useful at times).
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orge4cdc5c&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orge4cdc5c&quot;&gt;The hard part: recent posts&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orge4cdc5c&quot;&gt;
&lt;p&gt;
As I mentioned in iteration 1, one of my goals with this project is to learn Emacs lisp for the fun of it. I have a long way to go. A simple function might have me searching docs and the web for way too long, only to have me forget exactly what something does or why I chose to do it that way.
&lt;/p&gt;

&lt;p&gt;
As I write this, there are two places for which I collect a list of posts: the &lt;a href=&quot;/archive/&quot;&gt;archive&lt;/a&gt; and the &lt;a href=&quot;/feed/&quot;&gt;feed&lt;/a&gt;. So I write a function that does almost the same thing, but takes only the last &lt;i&gt;n&lt;/i&gt; number of posts. Here&apos;s the bit from the archive layout function:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;haystack-layout-archive&lt;/span&gt; (posts)
  &lt;span class=&quot;org-doc&quot;&gt;&quot;A layout that loops through POSTS to create a full archive page.&quot;&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;let*&lt;/span&gt; ((only-posts (cl-remove-if-not #&apos;haystack--post-p posts))
         (sorted-posts (sort only-posts (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; (a b)
                                          (string&amp;gt; (plist-get a &lt;span class=&quot;org-builtin&quot;&gt;:date&lt;/span&gt;)
                                                   (plist-get b &lt;span class=&quot;org-builtin&quot;&gt;:date&lt;/span&gt;)))))
         (items-html (mapconcat #&apos;haystack--format-archive-item sorted-posts &lt;span class=&quot;org-string&quot;&gt;&quot;\n&quot;&lt;/span&gt;)))

    [...]
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
This takes a list of content (which I now see that I&apos;ve annoyingly already called &quot;posts&quot;; I&apos;ll fix it later), applies the predicate &lt;code&gt;haystack--post-p&lt;/code&gt; to make sure it&apos;s only a list of posts, and then sorts the list by descending date. Then the list is formatted into the HTML I want.
&lt;/p&gt;

&lt;p&gt;
Any programmers out there will think what I just realized: I&apos;m repeating the creation of a list of posts two times, once in each function that needs it (archive and feed). Doing it for recent posts makes that three times. This is not &lt;a href=&quot;https://en.wikipedia.org/wiki/Don%27t_repeat_yourself&quot;&gt;DRY&lt;/a&gt;. It&apos;s also why I don&apos;t call myself a programmer. The problem is, now that I know this, I&apos;m doomed to eventually make a make-a-post-list function and have the other functions make use of that. Should I do it now? Nope, don&apos;t want to. Oh, but wait&amp;#x2026; if I don&apos;t do it now, that means generating the website creates three lists and sorts all three. Dammit!
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;haystack--sorted-posts&lt;/span&gt; (db)
  &lt;span class=&quot;org-doc&quot;&gt;&quot;Return a newest-first list of posts.&quot;&lt;/span&gt;
  (sort (copy-sequence (cl-remove-if-not #&apos;haystack--post-p db))
        (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; (a b)
          (string&amp;gt; (plist-get a &lt;span class=&quot;org-builtin&quot;&gt;:date&lt;/span&gt;) (plist-get b &lt;span class=&quot;org-builtin&quot;&gt;:date&lt;/span&gt;)))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
This is essentially the repeated code, but put into a function, and using a copy of the list instead of changing the original list. This allowed me to remove the code from the functions that build the archive and feed. &lt;code&gt;db&lt;/code&gt; is basically a list of all the site content.
&lt;/p&gt;

&lt;p&gt;
Now that this function is separate, I created a global variable for &lt;code&gt;db&lt;/code&gt; and then a function for recent posts, so I can use those from the template.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;haystack--recent-posts-block&lt;/span&gt; (posts n)
  &lt;span class=&quot;org-doc&quot;&gt;&quot;Return an HTML list of N most recent POSTS.&quot;&lt;/span&gt;
  (concat &lt;span class=&quot;org-string&quot;&gt;&quot;&amp;lt;ul class=\&quot;recent-posts\&quot;&amp;gt;\n&quot;&lt;/span&gt;
          (mapconcat #&apos;haystack--format-archive-item
                     (take n (haystack--sorted-posts posts))
                     &lt;span class=&quot;org-string&quot;&gt;&quot;\n&quot;&lt;/span&gt;)
          &lt;span class=&quot;org-string&quot;&gt;&quot;\n&amp;lt;/ul&amp;gt;\n&quot;&lt;/span&gt;))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
I read that there&apos;s an Emacs lisp convention for function names. I&apos;m still getting used to it. But the convention seems to be that the first part is a namespace (here, that&apos;s &lt;code&gt;haystack&lt;/code&gt;, so the function is related to this website), and if you use one dash after that, the function is public and can be used outside of the package. (For example, I can call it from within my editor while I&apos;m working.) Two dashes means it&apos;s an internal helper, and only used within the context of the package.
&lt;/p&gt;

&lt;p&gt;
So now, the home page template can call the function:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(haystack--recent-posts-block haystack--db 3)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Oh, by the way, to compress the images I&apos;m including here, I just run optipng on them from within the images directory:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;optipng -o2 public02*
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Also added a missing space between the date and the post link in post lists.
&lt;/p&gt;

&lt;p&gt;
Until iteration 4!
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Designing in public, iteration 2</title>
    <link href="https://www.the-haystack.com/public02/" rel="alternate"/>
    <id>https://www.the-haystack.com/public02/</id>
    <updated>2026-09-29T00:00:00Z</updated>
    <content type="html">&lt;p&gt;
Today: A few design principles and some temporary readability interventions.
&lt;/p&gt;

&lt;div id=&quot;outline-container-org1634ae2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org1634ae2&quot;&gt;Some design principles to get started&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org1634ae2&quot;&gt;
&lt;p&gt;
There are a couple of design principles that I almost always apply, and I&apos;ll do my best to apply them to this project:
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;b&gt;Add only what&apos;s needed.&lt;/b&gt; This was the principle behind my former consultancy Zero Interface. The ideal UI is no UI: you think something and it&apos;s done. Stay as close to that ideal as possible. Designers talk about removing the unnecessary. I think it&apos;s better not to add it in the first place. Think in terms of additive sculpture.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Design from the content out.&lt;/b&gt; What your content and functionality &lt;i&gt;need&lt;/i&gt;, in addition to any other constraints you have, inform your design decisions. In a sense, they &quot;tell&quot; you what they need. But in order to hear them, you need to start with the content.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
And I&apos;m applying one more specifically for this project:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;No roadmap and no backlog:&lt;/b&gt; I have no plan. I have enough roadmaps and backlogs at work. With a personal project, there&apos;s no need. I&apos;ll be &quot;listening&quot; to the content as I mentioned above, but I also might be inspired by different sources along the way. We&apos;ll see. &lt;b&gt;Refactoring is a part of the work.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org5f99b7f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org5f99b7f&quot;&gt;What the content says: readability&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org5f99b7f&quot;&gt;
&lt;p&gt;
Here&apos;s how the end result of &lt;a href=&quot;/public/&quot;&gt;iteration 1&lt;/a&gt; looked:
&lt;/p&gt;


&lt;figure id=&quot;org2824bb0&quot;&gt;
&lt;img src=&quot;/assets/images/public01.png&quot; alt=&quot;A plain, unstyled HTML page&quot;&gt;

&lt;/figure&gt;

&lt;p&gt;
I&apos;m writing about this process, so it must be readable now, even if I might make different decisions later. First thing is to change the font to a generic sans-serif (I don&apos;t like the default serifs much), and give ourselves a reasonable text column.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-css&quot;&gt;&lt;span class=&quot;org-css-selector&quot;&gt;body&lt;/span&gt; {
    &lt;span class=&quot;org-css-property&quot;&gt;font-family&lt;/span&gt;: sans-serif;
    &lt;span class=&quot;org-css-property&quot;&gt;display&lt;/span&gt;: grid;
    &lt;span class=&quot;org-css-property&quot;&gt;grid-template&lt;/span&gt;:
        &lt;span class=&quot;org-string&quot;&gt;&quot;h h h&quot;&lt;/span&gt; auto
        &lt;span class=&quot;org-string&quot;&gt;&quot;. c .&quot;&lt;/span&gt; auto
        &lt;span class=&quot;org-string&quot;&gt;&quot;f f f&quot;&lt;/span&gt; auto / 1fr min(70ch, 100% - 4rem) 1fr;
    &lt;span class=&quot;org-css-property&quot;&gt;background&lt;/span&gt;: &lt;span class=&quot;custom&quot;&gt;#faf7f3&lt;/span&gt;;
}

&lt;span class=&quot;org-css-selector&quot;&gt;p&lt;/span&gt; { &lt;span class=&quot;org-css-property&quot;&gt;line-height&lt;/span&gt;: 1.4; }

&lt;span class=&quot;org-css-selector&quot;&gt;body&amp;gt;div&lt;/span&gt; { &lt;span class=&quot;org-css-property&quot;&gt;grid-area&lt;/span&gt;: h; }
&lt;span class=&quot;org-css-selector&quot;&gt;main&lt;/span&gt; { &lt;span class=&quot;org-css-property&quot;&gt;grid-area&lt;/span&gt;: c; }
&lt;span class=&quot;org-css-selector&quot;&gt;footer&lt;/span&gt; { &lt;span class=&quot;org-css-property&quot;&gt;grid-area&lt;/span&gt;: f; }
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
I&apos;m using CSS Grid here even on this simple layout intervention, because I know I&apos;m going to use it later. I&apos;ve set the main text column to 70 characters or the full width minus 4rem, whichever is smaller (for e.g. phones). I&apos;m not worried about anything outside of the main content area yet. I also set the background to be not-quite-white. And finally, paragraphs are much easier to read with more spacious line-height.
&lt;/p&gt;

&lt;p&gt;
Not pictured here: a couple of lines to remove the default margins on &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt;, and to give images a &lt;code&gt;max-width&lt;/code&gt; of 100%;
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org89a97fd&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org89a97fd&quot;&gt;Code blocks&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org89a97fd&quot;&gt;
&lt;p&gt;
Since I&apos;ll be showing code often, it will be easier to read with some syntax highlighting. A package for Emacs called &lt;a href=&quot;https://elpa.nongnu.org/nongnu/htmlize.html&quot;&gt;htmlize&lt;/a&gt; takes care of adding classes to the HTML that correspond with the text decorations in my editor. As a bonus, it makes it possible for me to export the exact colors my editor&apos;s theme is using, so I get a decent result without having to think about it. I can change these colors later when I choose a more robust color palette. Running &lt;code&gt;(org-html-htmlize-generate-css)&lt;/code&gt; from within Emacs provides me with all the CSS I need with the right colors. I can adjust these at any time. Here are a few, as an example:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-css&quot;&gt;&lt;span class=&quot;org-css-selector&quot;&gt;.org-comment,
.org-comment-delimiter&lt;/span&gt; {
    &lt;span class=&quot;org-css-property&quot;&gt;color&lt;/span&gt;: &lt;span class=&quot;custom-2&quot;&gt;#a0a0cf&lt;/span&gt;;
    &lt;span class=&quot;org-css-property&quot;&gt;font-style&lt;/span&gt;: italic;
}
&lt;span class=&quot;org-css-selector&quot;&gt;.org-string&lt;/span&gt; {
    &lt;span class=&quot;org-css-property&quot;&gt;color&lt;/span&gt;: &lt;span class=&quot;custom-1&quot;&gt;#f3a0a0&lt;/span&gt;;
}
&lt;span class=&quot;org-css-selector&quot;&gt;.org-keyword,
.org-css-property&lt;/span&gt; {
    &lt;span class=&quot;org-css-property&quot;&gt;color&lt;/span&gt;: &lt;span class=&quot;custom&quot;&gt;#deb07a&lt;/span&gt;;
    &lt;span class=&quot;org-css-property&quot;&gt;font-weight&lt;/span&gt;: bold;
}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
This should make code more readable than it was. Just a handful of little interventions yield big improvements. I love finding and applying those; they add up over time.
&lt;/p&gt;

&lt;p&gt;
Until iteration 3!
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Designing in public, iteration 1</title>
    <link href="https://www.the-haystack.com/public/" rel="alternate"/>
    <id>https://www.the-haystack.com/public/</id>
    <updated>2026-09-28T00:00:00Z</updated>
    <content type="html">&lt;p&gt;
Work is done for the day. Cooking&apos;s done. Dinner devoured, kitchen clean. and I&apos;m seated here, laptop on lap and tall glass of water at hand. And I am &lt;i&gt;excited&lt;/i&gt;.
&lt;/p&gt;

&lt;p&gt;
It&apos;s been four years since my last blog post. There are reasons why, and they&apos;re hard to express. I&apos;ll do that in time. Well, I can tell you about one of them right now: a bit of software called WordPress.
&lt;/p&gt;

&lt;div id=&quot;outline-container-org9aa9035&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9aa9035&quot;&gt;Writing my own static site generator&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org9aa9035&quot;&gt;
&lt;p&gt;
This website, which at the time of this writing has only the default browser styling, used to be published via WordPress. I would log in and type out a post in a rich text editor that I didn&apos;t like. Said post would be displayed in a slightly modified WordPress template that was made by someone else. Because I couldn&apos;t be bothered to wrestle with WordPress when what I wanted to do was write something. As a designer, I also like to design, but I&apos;m particular about the constraints I&apos;m willing to accommodate for personal projects.
&lt;/p&gt;

&lt;p&gt;
Now there&apos;s nothing wrong with WordPress. But for me personally, it created enough friction that I didn&apos;t want to design on it, and I disliked writing on it (or copy/pasting into it). It didn&apos;t feel like &lt;i&gt;self-expression&lt;/i&gt; to me.
&lt;/p&gt;

&lt;p&gt;
I wrote on my &lt;a href=&quot;/now/&quot;&gt;now&lt;/a&gt; page (which, yes, I need to update) that I would use &lt;a href=&quot;https://www.11ty.dev&quot;&gt;Eleventy&lt;/a&gt;. But I decided that writing my own generator would allow me to keep it as minimal as I like, program it to do exactly what I want it to do, and it would allow me to learn along the way.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org4d79488&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4d79488&quot;&gt;Self expression, learning, and writing about it&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org4d79488&quot;&gt;
&lt;p&gt;
Ethan recently &lt;a href=&quot;https://ethanmarcotte.com/wrote/the-house-is-valuable-because-it-is-the-house/&quot;&gt;redesigned his website&lt;/a&gt;. I think he did a wonderful job of it. It inspired me to finally pick this project idea up and dust it off.
&lt;/p&gt;

&lt;p&gt;
I&apos;ve been pondering what the most important part of creative work is to me. It&apos;s the &lt;i&gt;making&lt;/i&gt; that matters. The end result is great, but I&apos;m most happy making.
&lt;/p&gt;

&lt;p&gt;
In the mire of social media, even making seems performative. I don&apos;t really see that as making. It&apos;s curated. There are no doubts, no mistakes. The kind of making I want to do is the kind that makes me struggle and learn. The kind that feels good when I&apos;ve tackled something difficult. And I want to &lt;i&gt;log&lt;/i&gt; it. For myself, as a kind of journal, but also for anyone who&apos;s interested in following all the little considerations and decisions involved in making something for the web slowly, by hand. Why would one do that? For the fun of it. So, I&apos;ll be designing this in public, and putting my process into writing.
&lt;/p&gt;

&lt;p&gt;
Is writing performative? Eh, maybe a bit. But I&apos;m also a writer, so I get to do two things I like to do.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgbaa6fb7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgbaa6fb7&quot;&gt;First bites&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgbaa6fb7&quot;&gt;
&lt;p&gt;
This first post is already longer than what I&apos;ll usually be writing, but there are a couple of cool things I want to note before we get this party started. First, I&apos;ve always loved how Derek Sivers uses &lt;a href=&quot;https://sive.rs/su&quot;&gt;short URLs&lt;/a&gt; (though I&apos;m using a different method). So, while I&apos;ve kept the old WordPress URLS (because &lt;a href=&quot;https://www.w3.org/Provider/Style/URI&quot;&gt;cool URIs don&apos;t change&lt;/a&gt;), all my new ones will be short, including this one.
&lt;/p&gt;

&lt;p&gt;
Second, I&apos;ll write more about my static site generator in the future. But for now, just know that it&apos;s written in Emacs lisp, and this is the build function:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-elisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;haystack-build&lt;/span&gt; ()
  &lt;span class=&quot;org-doc&quot;&gt;&quot;Build The Haystack website.&quot;&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;interactive&lt;/span&gt;)
  (message &lt;span class=&quot;org-string&quot;&gt;&quot;Starting build...&quot;&lt;/span&gt;)
  (haystack-load-templates)
  (&lt;span class=&quot;org-keyword&quot;&gt;let&lt;/span&gt; ((db (haystack-build-db)))
    (mapc #&apos;haystack-render-post db)
    (haystack-build-archive db)
    (haystack-build-feed db))
  (haystack-copy-assets)
  (haystack-copy-static)
  (message &lt;span class=&quot;org-string&quot;&gt;&quot;Build complete!&quot;&lt;/span&gt;))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
The fun feeling that gives me is mildly disconcerting. But I&apos;m learning Emacs lisp as I go by building this website. 
&lt;/p&gt;

&lt;p&gt;
And finally, why Emacs lisp? Mostly because Emacs is the editor I&apos;ve been using for over 10 years. And I like writing in &lt;a href=&quot;https://orgmode.org&quot;&gt;org-mode&lt;/a&gt; more than in Markdown.
&lt;/p&gt;

&lt;p&gt;
I was going to put a screenshot here showing how this post looks in the editor, but I&apos;ll do that another time. I don&apos;t want to break anything 😉.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>The Text Method for determining visual hierarchy</title>
    <link href="https://www.the-haystack.com/2022/01/06/the-text-method-for-determining-visual-hierarchy/" rel="alternate"/>
    <id>https://www.the-haystack.com/?p=781</id>
    <updated>2022-01-06T00:00:00Z</updated>
    <content type="html">&lt;p&gt;
A colleague recently came to me with a question about an existing web
project that he had &quot;inherited&quot;. His question was about heading levels.
HTML only has six, and this project had way more than six. If you
removed the headings, there would be very little content left. Due to
various constraints, he had limited options to solve the problem, so we
had a chat about it. This is not an unusual situation. In apps and
websites, it&apos;s easy to mistake the &lt;i&gt;visual&lt;/i&gt; hierarchy as accurately
representing the appropriate &lt;i&gt;structural&lt;/i&gt; hierarchy. This particular
design&apos;s visual hierarchy made many things &lt;i&gt;appear&lt;/i&gt; to be headings. But
should they be? Ideally, visual hierarchy should reflect structural
hierarchy. But it can be hard to see the structure through the styling.
The advice I tend to give is a form of
&lt;a href=&quot;https://www.peachpit.com/articles/article.aspx?p=2040824&quot;&gt;designing in
text&lt;/a&gt;: take the entire text content of the design and paste it into a
word processor. Now your job is to make that content work within the
context of the text document. No layout, no colors. Just basic word
processing styles like headings, quotes, and the like. If the document
were your final deliverable, how would you structure it? What would be a
heading? What would be a subheading? What would just be body text? What
is the linear &lt;i&gt;order&lt;/i&gt;? Try to make it so that if you let the program
create a table of contents automatically, that table of contents would
reflect the content as accurately as possible. I use &quot;Word documents&quot; as
an example, but thinking in terms of something like Markdown works just
as well. Often, the resulting structure will be much simpler. Stripping
the content of its visual context allows you to see it for what it is,
examine it, and in turn make more appropriate visual design decisions.
&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Not all design opinions are created equal</title>
    <link href="https://www.the-haystack.com/2021/03/25/not-all-design-opinions-are-created-equal/" rel="alternate"/>
    <id>https://www.the-haystack.com/?p=764</id>
    <updated>2021-03-25T00:00:00Z</updated>
    <content type="html">&lt;p&gt;
People have opinions about everything. You&apos;d think that after almost 30
years in design, I would get used to that fact. But sometimes it&apos;s hard.
Many people either forget or don&apos;t realize that design is a legitimate
field of study. There are things you can learn and understand about
design that others don&apos;t, &lt;i&gt;just like with any other field of study&lt;/i&gt;. But
for some reason, the fact that one can have an opinion about design can
make them mistake that opinion for expertise.
But &lt;a href=&quot;https://library.gv.com/everyone-is-a-designer-get-over-it-501cc9a2f434&quot;&gt;everyone
is a designer&lt;/a&gt;, right? In a sense, I agree. Many people can write, too.
I&apos;m a writer. But I&apos;m Stephen Hay, not Stephen King. The fact that
people know things and do things &lt;i&gt;doesn&apos;t mean they know or do them
well&lt;/i&gt;. Milton Glaser famously said, “I move things around until they
look right.” Doesn&apos;t that feel like subjectivity? But there&apos;s nothing
subjective about the amount of knowledge and experience behind Glaser&apos;s
ability to know when things were right. I would have trusted Milton
Glaser with a design problem. I would not trust my dentist with the same
problem. Good design choices don&apos;t come from anyone with an opinion.
Some people will come to you with their opinion on your design
decisions. They&apos;ll package it as educated advice. They&apos;ll base it on
something they have seen before, or that well-known companies do.
They&apos;ll confront you with “best practices”. Their goal is to get you to
make the decision related to their personal preference. The discussions
will be frustrating and demotivating. If you did the same to them, &lt;i&gt;that
would be different&lt;/i&gt;. After all, they have lots of experience in their
chosen expertise, which is likely not design. These are the people who
think “it would look better in hot pink”. (Really, what doesn&apos;t?) Other
people will ask you questions. They&apos;ll try to understand the context of
your decisions. They&apos;ll kick the tires of your choices by challenging
you with what-ifs. They&apos;ll ask what you&apos;ve explored, what you&apos;ve
discarded, and why. They&apos;ll question how your design handles applicable
constraints. They&apos;ll seek consistency. Their goal is to &lt;i&gt;help you&lt;/i&gt; make
the most &lt;i&gt;appropriate&lt;/i&gt; choice for your problem. And they would welcome
you to challenge them in the same way. The discussions may be
challenging, but they leave you with either confirmation or more options
to consider. The opinions of people from the second group are &lt;i&gt;more
valuable&lt;/i&gt; to you than those from the first.
&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Dates provide context</title>
    <link href="https://www.the-haystack.com/2021/03/05/dates-provide-context/" rel="alternate"/>
    <id>https://www.the-haystack.com/?p=761</id>
    <updated>2021-03-05T00:00:00Z</updated>
    <content type="html">&lt;p&gt;
I was reading Joel Hooks&apos; article on
“&lt;a href=&quot;https://joelhooks.com/digital-garden&quot;&gt;digital gardens&lt;/a&gt;”. He argues:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
“Chronologically sorted pages of posts aren&apos;t how people actually use
the internet.”
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
This may be true (unless you spend most of your time reading mail, news,
blog posts, or social media). Even so, dates can provide context. Hooks&apos;
post (which is worth reading, by the way, as well as his others) is not
dated, underscoring his perspective that dates are not as important as
we might make them out to be. But there&apos;s a difference between
&lt;b&gt;presenting by date&lt;/b&gt; and &lt;b&gt;including a date&lt;/b&gt;. Hooks includes a date in
the footer of the website, but it&apos;s hard to tell what that date means.
I&apos;m not picking on Hooks here. His post got me thinking. Dates are
important metadata. When was written? Other articles and information
published around the same time might provide insight into an author&apos;s
line of thinking. People change their minds as they learn over time, so
it could be possible to discover how authors&apos; ideas change over time. In
articles of an instructional nature, dates can tell us a lot about the
relevance of the information provided. &lt;i&gt;Not all writing is evergreen.&lt;/i&gt;
Omitting dates might offer the illusion of perpetual relevance. Leaving
out this important bit of context might mask how current the content is
or how often it&apos;s updated. Authors are free to do this, of course.
That&apos;s part of the beauty of web publishing. I don&apos;t care if articles
are &lt;b&gt;presented&lt;/b&gt; by date. But in many cases, whether on “digital gardens”
or blogs, I feel I&apos;m missing something useful when I can&apos;t find a date
at all. (I wrote this at around 17:30 UTC+1 on March 5, 2021, in case
you&apos;re wondering.)
&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Design review means asking questions</title>
    <link href="https://www.the-haystack.com/2021/03/01/design-review-means-asking-questions/" rel="alternate"/>
    <id>https://www.the-haystack.com/?p=755</id>
    <updated>2021-03-01T00:00:00Z</updated>
    <content type="html">&lt;p&gt;
As design leaders/managers, our tendency during design reviews is to
express our opinion of the work. This seems logical enough, as our
opinion of the work can be&amp;#x2014;and for experienced design leaders, often
is&amp;#x2014;relevant, depending on the context and the reviewer&apos;s experience.
Even so, it can be helpful to be mindful of this tendency, and just hold
off on it for a bit. If we just &lt;b&gt;observe&lt;/b&gt; first, what do we see? What
can be observed and judged, but expressed without the judgement?
Expressing an observation and holding off one&apos;s view can allow the
designer to consider the observation. They&apos;ll either have a proper
explanation for it, and then we can talk about that, or they might have
not even seen what we noticed. Having seen it, they&apos;re still free to
explore what their revision might be, and the only &quot;critique&quot; that has
taken place is their own.
&lt;/p&gt;

&lt;div id=&quot;outline-container-a-template-for-questioning-design-choices&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;a-template-for-questioning-design-choices&quot;&gt;A template for questioning design choices&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-a-template-for-questioning-design-choices&quot;&gt;
&lt;p&gt;
&lt;i&gt;Expressing observations can be done by asking questions&lt;/i&gt;. I&apos;ve
distilled the types of questions I tend to ask down to a template. It
can be useful as a starting point to discussion (and follow-up
questions):
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
“I notice [observation]. Can you tell me more about that design choice?”
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
This seems simple, but there are some powerful things happening. First,
there&apos;s no direct judgement, but there&apos;s still an &lt;i&gt;implication of
judgement&lt;/i&gt;. This observation&amp;#x2014;without being explicit about the
judgement&amp;#x2014;encourages the designer to start thinking on their own about
what possible issues there might be related to the observation. This
might already be enough. Secondly, we&apos;re emphasising the fact that
what&apos;s been observed is the result of a &lt;i&gt;choice&lt;/i&gt;. We don&apos;t yet know if
it was the designer&apos;s own choice, but &lt;i&gt;they&lt;/i&gt; probably know if it was.
Calling out choice means:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;If it was their choice, they can either explain it or reconsider it&lt;/li&gt;
&lt;li&gt;If it was someone else&apos;s choice (e.g. a technical constraint), it can
be discussed or challenged.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Focus on choice encourages ownership and emphasises agency. You&apos;re not
telling the designer what to do, but you are asking about &lt;i&gt;the origin
of&lt;/i&gt; their choices. This also underscores the fact that there is a large
pool of possible choices, and they simply used one of them. This helps
create distance between the designer and the &lt;i&gt;result&lt;/i&gt; of their choices,
which can lead to a more fruitful review since they&apos;re less likely to
take things personally. It&apos;s just about the work.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-be-yourself&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;be-yourself&quot;&gt;Be yourself&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-be-yourself&quot;&gt;
&lt;p&gt;
Don&apos;t take the template too literally. The wording should be natural and
can be changed to avoid sounding like you&apos;re reading a script, but the
parts should be there. Here&apos;s slightly different wording with the same
effect:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
“I see that [observation]. What led you to choose to solve it that way?”
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
and in practice it might sound like:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
(Smiling) “I see you&apos;ve used a hot pink background. Now you &lt;i&gt;know&lt;/i&gt; I&apos;m
curious about that one! What led you to that choice?”
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Please note that generally, designs violating brand standards or design
systems are no-brainers. But you should still be curious about those
design choices! Maybe the system needs improvement. Maybe the designer
found a new edge case. Maybe they saw something you didn&apos;t, or know
something you don&apos;t. Often, you&apos;ll need to follow up with more
questions. “What happens if ?”, “Have you considered ?”, “What effect
would this have on ?” This will usually be enough to allow the designer
to start suggesting revisions to address the issue. Of course, when they
don&apos;t see it, or don&apos;t get it, that&apos;s when we can help out by providing
our own explicit view of the work. Just try to &lt;i&gt;guide&lt;/i&gt; toward the
solution. Don&apos;t dictate it. If you find yourself repeatedly having to
dictate design solutions to a particular designer, one of you needs to
improve in their work.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-questioning-beats-answering&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;questioning-beats-answering&quot;&gt;Questioning beats answering&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-questioning-beats-answering&quot;&gt;
&lt;p&gt;
The above approach is most useful when the purpose of the critique is as
much on learning as it is about improving the work (which should be
always, I think). In some rare cases, it can be useful to get straight
to the criticism. But in many cases, asking questions empowers designers
to grow and discover possible improvements on their own. You might be
responsible for the design direction, but allow them the fun part of
design: coming up with the specific answers &lt;i&gt;within&lt;/i&gt; the space that the
design direction affords them.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Use workflow experimentation to challenge design choices</title>
    <link href="https://www.the-haystack.com/2021/02/24/workflow-experimentation/" rel="alternate"/>
    <id>https://www.the-haystack.com/?p=745</id>
    <updated>2021-02-24T00:00:00Z</updated>
    <content type="html">&lt;p&gt;
or How Copying and Pasting Made Me Question My Use of Complex Blog
Software. I use WordPress for this website. But not for long. A few days
ago, I published the
first &lt;a href=&quot;https://www.the-haystack.com/2021/02/21/memento-mori/&quot;&gt;blog
post&lt;/a&gt; I&apos;ve written in two years. But that&apos;s not the only &lt;i&gt;writing&lt;/i&gt; I&apos;ve
done the past two years. Most of my writing has been notes. I write
these notes in a text editor. Each note is a separate file in
Markdown-ish plain text and I use some nice-but-nerdy software to
search, filter, concatenate, and otherwise manipulate these notes as I
see fit.
&lt;img src=&quot;/assets/images/20210223-editor_1d9bbc74.png&quot; alt=&quot;20210223-editor_1d9bbc74.png&quot;&gt;
This post in my nice-but-nerdy editor More on those things another time.
Let&apos;s talk about the WordPress thing. That blog post started as a note.
Some of my notes are journal-like; I&apos;ve dropped the idea of different
note systems for different types of notes. This was a personal note. And
while writing it, I decided I wanted to publish it. When I wrote more
frequently on the blog, I would do all of the writing in WordPress. I
felt that &quot;notes are written &lt;i&gt;here&lt;/i&gt;, blog posts are written &lt;i&gt;there&lt;/i&gt;&quot;
(meaning in WordPress).
&lt;/p&gt;
&lt;div id=&quot;outline-container-writing-as-process-not-product&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;writing-as-process-not-product&quot;&gt;Writing as process, not product&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-writing-as-process-not-product&quot;&gt;
&lt;p&gt;
It felt quite different to be writing and then decide to publish rather
than to decide from the start, &quot;And now I shall log in to WordPress and
create a blog post!&quot; I felt free and I could just focus on getting my
thoughts down. It was all about the content. This was a new process for
me, and I liked it. My nice-but-nerdy text editor allows me to export
this plain text markup into a ridiculous number of formats. I figured
the easiest would be HTML. So I entered a key combination, chose HTML as
my output format, and instructed the software to open the resulting HTML
file in my web browser. It popped up immediately. Plain, structured,
unstyled HTML. I copied the contents of the page and pasted it into
WordPress&apos; rich text editor. Quick check, and publish. This probably
doesn&apos;t differ much from how many people publish to the web: using the
CMS as a glorified input field instead of as an authoring environment.
But it did get me thinking about workflows and systems, the assumptions
of each in relation to one another, and how we can experiment with
workflows in order to test the assumptions built into the products we
make for others (or use ourselves). WordPress is a pretty impressive and
complex bit of software. It mailed me this morning that it had updated
itself. I get a kick out of that kind of thing. But from the perspective
of someone who had just used it as a glorified input field, what exactly
needed updating? The answer is: not a lot that needs to be done on a web
server.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-workflows-inform-solution-choices&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;workflows-inform-solution-choices&quot;&gt;Workflows inform solution choices&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-workflows-inform-solution-choices&quot;&gt;
&lt;p&gt;
I&apos;ve been a fan of static site generators for a while, but I&apos;ve never
had an actual &lt;i&gt;reason&lt;/i&gt; for moving my personal site to one. I already
have WordPress, so migrating is just a lot of work. But I had found a
reason. My one-time copy/paste workflow used almost none of what
WordPress has to offer that makes working in WordPress itself useful.
This workflow, which I like and find intuitive and frictionless,
basically nullified the usefulness of the software for me. The way I had
used it before was fine, but my workflow changed as I changed my
perspective on the writing process. I&apos;ll be redesigning this site, and
rebuilding it with &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt;. People will ask,
&quot;Why Eleventy?&quot; I will say
because &lt;a href=&quot;https://www.zachleat.com/&quot;&gt;Zach&lt;/a&gt; and the
Eleventy &lt;a href=&quot;https://www.11ty.dev/docs/how-to-support/&quot;&gt;community&lt;/a&gt; know
their stuff. I will say it&apos;s because my workflow has simplified so I
want the software to complement that workflow and Eleventy is elegant in
that regard. &lt;i&gt;I&apos;ll say it&apos;s like my copy/paste workflow but without even
having to do the copy and paste&lt;/i&gt;. And I&apos;ll say that it
has &lt;i&gt;&lt;a href=&quot;https://www.11ty.dev/news/logo-homage/&quot;&gt;the greatest logo&lt;/a&gt; of
any static site generator&lt;/i&gt;. I&apos;ll write about the process here, long
prose or not, not worrying about TLDR&apos;s and bite-sized takeaways for the
2x-speed YouTube watchers, but not afraid to put out a short note when I
feel like it. Because I&apos;m making this fun for myself again. I&apos;ll jot
down as much as I can about my design choices and what leads to them.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-uncovering-improvements-via-a-workflow-lens&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;uncovering-improvements-via-a-workflow-lens&quot;&gt;Uncovering improvements via a workflow lens&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-uncovering-improvements-via-a-workflow-lens&quot;&gt;
&lt;p&gt;
There is a takeaway here, though, at least for me. If you&apos;re designing
or building some kind of digital product (or anything really), there are
tons of ways to improve it and test the assumptions that have become
embedded over time. One of those ways is to do the mental exercise of
throwing away existing workflows and coming up with new ones. Ask users
to come up with new ones with you. Ask the question, &quot;If this [product/app/whatever] would
magically adapt to your own workflow, how would that workflow look? Walk
us through it.&quot; Like many thinking exercises, this is one to let loose
and have fun with. And then look for patterns in the resulting
workflows. What do they reveal to you?
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Memento Mori</title>
    <link href="https://www.the-haystack.com/2021/02/21/memento-mori/" rel="alternate"/>
    <id>https://www.the-haystack.com/?p=742</id>
    <updated>2021-02-21T00:00:00Z</updated>
    <content type="html">&lt;p&gt;
A topic pops up periodically in some of the books I&apos;ve been reading over
the past year, grabbing my attention and then disappearing under the
surface of my thoughts again, in cycles, like some kind of sea creature
of consciousness. &lt;a href=&quot;https://dailystoic.com/memento-mori/&quot;&gt;Memento
Mori&lt;/a&gt;. Remember you must die. This is something I would rather not
think about, having already spent a half-century not yet being dead. But
Epictetus, Marcus Aurelius, William Irvine, Ryan Holiday, Derren Brown,
and many others have spent time thinking about it, and so have I.
Especially over the past year in lockdown. And not just because of the
words of these writers. The sense of &quot;running out of time&quot; is pointed.
Sharp. It pricks me at unexpected moments. Not because I&apos;m afraid to
die, but because of some ambiguous dread about not having
accomplished&amp;#x2026; what, exactly? I&apos;m not sure. Having had a youth with
very little, I&apos;m thankful for what I have. I have a family, a home,
work. Nothing&apos;s missing. So what is that feeling? I &lt;i&gt;think&lt;/i&gt; I know what
it is. Derek Featherstone wrote a small piece
about &lt;a href=&quot;https://feather.ca/fobi/&quot;&gt;the fear of becoming irrelevant&lt;/a&gt;. I&apos;m
sure this is part of it for me. Five years ago, my career transitioned
from doing design leadership work from my own companies, to doing this
as an employee in other companies. During this time, I practically
stopped speaking at conferences. I made no time to keep up with web
development on a deeper level. This partially stripped away one of my
strong career expertises: the integration of development practices into
design processes. Any writing I did dwindled away. My blog had become a
ghost town of outdated perspectives. My book, itself appealing only to a
very specific audience, went out of print. Ideas I talked and wrote
about more than a decade ago were discovered again by others on their
own; no one knew about my previous work. It seemed lost. &lt;i&gt;I&lt;/i&gt; seemed
lost. Then the thoughts came. Ignore the 30 years of experience: how did
I get here? What footprint have I left in the field? What do I have to
offer? Am I even any good at all? I&apos;ve climbed to the top of a mountain,
only to see a sea of more peaks. All the things I don&apos;t know. This
focused awareness of being a perpetual beginner, this concern that my
work and I matter less as time goes on&amp;#x2026; these are parts of the
feelings I&apos;ve been having. But there&apos;s something else. Something my
friend &lt;a href=&quot;https://bradfrost.com/&quot;&gt;Brad&lt;/a&gt; unknowingly touched upon once
while poking some fun at me about one of my blog posts:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
“I don&apos;t always blog, but when I do, it&apos;s fucking brilliant.”
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
I love this because it&apos;s one of the best compliments I&apos;ve ever had. But
it has a flip side. Brad&apos;s quip reveals my problem: &lt;i&gt;I only put work out
there when I think it&apos;s good enough&lt;/i&gt;. And as a chronic
compare-my-work-to-the-greatest-hits-of-others-er, that&apos;s not
often. &lt;i&gt;This&lt;/i&gt; is the problem. Not legacy, impact, fame, whatever
(though &lt;a href=&quot;https://egoistheenemy.com/&quot;&gt;ego is part of it&lt;/a&gt;). It&apos;s that I&apos;m
happiest as a maker. I need to make things. Design, art, funneling my
perspectives into writing, teaching, learning. What stopped five years
ago was the making for the sake of making. But also sharing
it. &lt;i&gt;Learning is also making&lt;/i&gt;, so learning should also be shared, as it
inspires more making. It occurs to me that even since college, it never
mattered to me what other people thought while I was making things. That
only mattered when I &lt;i&gt;wasn&apos;t&lt;/i&gt; making, and was latched onto what I had
already made. That&apos;s a mistake. I wonder why I&apos;m writing this. If I
should write it. If I should publish it. But I will. And if you&apos;re
reading this, I have. Because I don&apos;t think I&apos;m the only one who has
felt like this. I&apos;m not the only one who can feel down on themselves at
times, unable to explain that feeling to others. So, if even one person
gets something out of this little article, it&apos;s worth it. Even
if&amp;#x2014;maybe &lt;i&gt;especially&lt;/i&gt; if&amp;#x2014;that person is me. In much art, process is
more important than the end result. The work becomes a snapshot of
experience, experimentation, thinking, and learning. This is what makes
the work interesting and fun. I want to do this, and I&apos;m starting now.
As I learn, I intend to share. If you&apos;re reading this and have similar
feelings, this might not help you, but I doubt it will make things
worse: Create. Share. Memento Mori.
&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Thinking vs Choosing</title>
    <link href="https://www.the-haystack.com/2019/09/20/thinking-vs-choosing/" rel="alternate"/>
    <id>https://www.the-haystack.com/?p=719</id>
    <updated>2019-09-20T00:00:00Z</updated>
    <content type="html">&lt;p&gt;
&lt;i&gt;This is the first of two articles about critical thinking in design. In part one, I discuss why I feel there&apos;s so much “design sameness” on the web, and the drawbacks of our tendency to focus on existing solutions. In the upcoming Part 2, I&apos;ll present a model that I&apos;ve found useful in making more context-appropriate design decisions. My thinking and research on this topic also resulted in a recent conference talk: “&lt;a href=&quot;https://beyondtellerrand.com/events/dusseldorf-2019/speakers/stephen-hay&quot;&gt;I Don&apos;t Care What Airbnb is Doing (and Neither Should You)&lt;/a&gt;”.&lt;/i&gt;
&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;
Those who have spent any significant amount of time working in design&amp;#x2014;or most other creative fields&amp;#x2014;become aware of an ocean of prior solutions to various creative problems. I don&apos;t mean frameworks for developing creativity, ideation exercises, or lessons on how to get out of one&apos;s own way and allow creative insight to appear. These are aids to thinking. I mean existing solutions executed by others at some point in time, for any particular type of project. The massive repository of existing work that&apos;s easily found by a keyword search in your web browser. Portfolios. Showcases. These are aids to doing. Or copying. There seems to be a tendency to repurpose existing solutions to other people&apos;s problems. I propose that this is the main cause of the design sameness that we encounter on the web (and in apps) today. In our (un)conscious attempts to reduce the effort needed to do our work, &lt;i&gt;we&apos;ve become experts in choosing rather than in thinking&lt;/i&gt;.
&lt;/p&gt;

&lt;div id=&quot;outline-container-but-conventions&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;but-conventions&quot;&gt;But, conventions&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-but-conventions&quot;&gt;
&lt;p&gt;
We rely on conventions because they often provide us with a working solution via a minimum of effort. This may be our natural tendency; Daniel Kahneman has written that the brain is “a machine for jumping to conclusions.” While this may be true, it&apos;s this very same thinking that we criticize in those outside of our designer role when they voice their opinion. When they ask, “hey, can we do something like our competitor does?”, we might cringe accordingly. Since when is imitating a competitor a solid differentiation strategy? Yet the moment that person goes away and we&apos;re in need of a solution, we&apos;re knee-deep in some UI pattern library or Google image search. But we don&apos;t always copy outright. We &lt;i&gt;remix&lt;/i&gt;. We think tailoring an existing solution to our own problem constitutes a creative solution. (It might, but not always.) Worse, we tell ourselves stories. We justify our choices by conflating ubiquity with appropriateness. The fact that many people do the same thing doesn&apos;t always mean what we think it does. It could just mean that lots of people copy what other people do. We seldom really know. Many designers talk about using “social proof” to influence customers, yet we allow that same principle to influence our design choices. The more we see something out there, the better it must be. We owe it to ourselves, our customers, and each other, to think critically. To carefully examine and be honest about why we make the “creative” choices we do. Behavioral economist David Hirshleifer describes this phenomenon in his 1997 paper &lt;i&gt;Informational Cascades and Social Conventions&lt;/i&gt;&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
With many individuals, with virtual certainty a point is reached where an individual rationally ignores his private information and bases his decision solely upon what he sees predecessors do. The accumulated evidence from predecessors outweighs his private information. The decision of this individual n is uninformative to later choosers. Thus, individual n+1 is no better informed than individual n, so she joins the cascade.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
When discussing this with designers, I often get a response like, “So what? What&apos;s wrong with using proven conventions?” Very recently, a designer told me that they&apos;d like to see &lt;i&gt;more&lt;/i&gt; designers looking at what other companies are doing, rather than coming up with their own unproven ideas. I tried to reassure them that they needn&apos;t worry: there&apos;s no shortage of designers looking at existing solutions. The entire web serves as sufficient evidence of this. And it&apos;s nothing new. Early in my career, when I worked in print design, most designers I knew would reach for their collection of design annuals&amp;#x2014;collections of design work done in a given year&amp;#x2014;to “get inspired” when starting a new project.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-the-basis-for-our-decisions&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;the-basis-for-our-decisions&quot;&gt;The basis for our decisions&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-the-basis-for-our-decisions&quot;&gt;
&lt;p&gt;
When we use existing solutions or patterns, we use a different kind of thinking. Our focus is on finding which pattern will work for us. Too quickly, we turn our attention away from closely examining the problem. Deeply understanding a problem, ignoring the solutions of others (or generic solutions) &lt;i&gt;at first&lt;/i&gt;, and ideating one&apos;s own solutions becomes a process of &lt;i&gt;learning&lt;/i&gt;. You learn &lt;i&gt;why&lt;/i&gt; something will or won&apos;t work. Simply applying a known pattern because “users know these conventions” involves no increase in your knowledge. You&apos;ve narrowed the landscape of possible solutions to those &lt;i&gt;others&lt;/i&gt; have devised. By extension, you will never be one of those “others”. Sure, you just need to get the job done. Being a forerunner is not required. Learning is not our goal. While this may be true, and while many existing solutions may work perfectly for your situation, there&apos;s a more insidious aspect to working this way. As Bent Flyvbjerg states&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
(An) exclusive use of analytical rationality tends to impede further improvement in human performance because of analytical rationality&apos;s slow reasoning and its emphasis on rules, principles, and universal solutions. Second, bodily involvement, speed, and an intimate knowledge of concrete cases in the form of good examples is a prerequisite for true expertise.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
I often use the example of A/B testing. When testing A against B, the results come from the specific comparison. B might be the best solution, but we only know anything at all about B &lt;i&gt;as it is compared to A&lt;/i&gt;. B then becomes the new A, and subsequent choices are derived from that. Perhaps a better visualization is that of a fork in the road. The roads available to you in the future depend on the choice you make now. How are you making that choice? Based on existing work on similar problems, or based on a deep understanding of your own?
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-design-is-hard&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;design-is-hard&quot;&gt;Design is hard&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-design-is-hard&quot;&gt;
&lt;p&gt;
The &lt;i&gt;hard&lt;/i&gt; part of design is the thinking. When we try to eliminate thinking through imitation, we rely on the thinking of others, and attempt to apply their thinking to our problem. Not only have you effectively outsourced the valuable part of design, but it might not be the best solution for your project. From Bent Flyvbjerg&apos;s collection of misunderstandings in case-study research&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot; role=&quot;doc-backlink&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Misunderstanding no. 1: General, theoretical (context independent) knowledge is more valuable than concrete, practical (context dependent) knowledge.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
The above quote yields a glimpse into my position on the entire matter: &lt;i&gt;stop focusing on the solution, and start focusing on the problem&lt;/i&gt;. You probably know more about your specific problem than the people behind your “found” solutions do. It&apos;s a reasonable approach to give this knowledge precedence over the unknown data that influenced the design decisions of others. We often consider something “creative” due to some unexpected juxtaposition of elements. The elements themselves are rarely new or otherwise special. A deep focus on our specific problem and our context-specific knowledge around it can lead to such “creative” solutions, and is a solid start toward creating appropriate design. It might not be what everyone else is doing.
&lt;/p&gt;

&lt;hr&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org286f53b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org286f53b&quot;&gt;Comments&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org286f53b&quot;&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org5693db3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org5693db3&quot;&gt;A Web Revolution&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org5693db3&quot;&gt;
&lt;p&gt;
Based on existing work on similar problems, or based on a deep
understanding of your own?
&lt;a href=&quot;https://awebrevolution.com/how-to-fix-outdated-visual-%20design/&quot;&gt;Design &lt;/a&gt;is hard
The hard part of design is the thinking.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Hirshleifer, David A. “Informational cascades and social conventions.” University of Michigan Business School Working Paper 9705-10 (1997): 9705-10. 
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Flyvbjerg, Bent. Making social science matter: Why social inquiry
fails and how it can succeed again. Cambridge university press, 2001.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot; role=&quot;doc-backlink&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Flyvbjerg, Bent. “Five misunderstandings about case-study research.” Qualitative inquiry 12.2 (2006): 219-245.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
  </entry>
</feed>