<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Dylan Smith @dylanatsmith</title>
    <author>
        <name>Dylan Smith</name>
        <email>dylan@dylanatsmith.com</email>
    </author>
    <description>Frontend-focused product designer in London, UK</description>
    <link>https://dylanatsmith.com/</link>
    <atom:link href="https://dylanatsmith.com/feed.xml" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Tue, 30 Sep 2025 13:55:50 +0000</lastBuildDate>
    <generator>Jekyll v4.2.1</generator>

    
    
      <item>
        <title>
            
            The perfect software team
            
        </title>
        <summary>Don’t @ me</summary>
        <pubDate>Wed, 10 Apr 2024 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/the-perfect-software-team" rel="alternate" type="text/html" title="The perfect software team">https://dylanatsmith.com/wrote/the-perfect-software-team</link>
        <id>https://dylanatsmith.com/wrote/the-perfect-software-team</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/the-perfect-software-team</guid>
        <content:encoded>
            <![CDATA[
                <p>The perfect software team is 2-4 people. Never more than five.</p>

<p>The perfect software team has one designer. The designer codes.</p>

<p>Like it or not, the perfect software team works together in the same room.</p>

<p>There is no product manager on the perfect software team.</p>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20The%20perfect%20software%20team">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            How should designers code?
            
        </title>
        <summary>Practical paths toward shipping to production</summary>
        <pubDate>Tue, 09 Jan 2024 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/how-should-designers-code" rel="alternate" type="text/html" title="How should designers code?">https://dylanatsmith.com/wrote/how-should-designers-code</link>
        <id>https://dylanatsmith.com/wrote/how-should-designers-code</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/how-should-designers-code</guid>
        <content:encoded>
            <![CDATA[
                <p>I’m going to skip the tired “should designers code?” discussion. You can be a successful designer either way, but I personally believe that software is never built with more attention to detail than when it’s coded by the person who designed it.</p>

<p>Let’s say you agree. Let’s also say you have at least some basic technical skills and want to use them to contribute in your day job. Now what? <em>How</em> should designers code? How can you actually get involved in the development process at work?</p>

<!-- End excerpt -->

<p>I can think of several possible entrypoints you might want to consider. These are all based on my own experience as a product designer on cross-functional teams of all sizes that viewed designers working in code as either tolerated, supported, or expected.</p>

<p>Some variables to keep in mind when reading these options and choosing where to start:</p>

<ul>
  <li>Your own skill and comfort levels — Are you ready to dive in and write production code or are you still learning the ropes?</li>
  <li>The <a href="boxed-in">shapes of your teammates</a> — Do you have a strength that can help patch an existing gap?</li>
  <li>The status quo of the team/organisation — Could there be any friction or gatekeeping that hinders your initiative?</li>
</ul>

<p>I’ve listed them roughly in ascending order of demand on both time and technical skills, though the last two are interchangeable depending on a number of factors.</p>

<h2 id="pair-program">Pair program</h2>

<p>This is by far the easiest way in, and even easier if if the team is already in the habit of pair programming. Just ask to join engineers while they build things.</p>

<p>Pairing is almost always productive and enlightening, but especially so when you’re new to a language or codebase. Ask questions, take notes, and offer what you can. That might be a good eye for detail, design system knowledge, CSS tips, accessibility considerations, or whatever else you’re good at. You can begin to establish your credibility as an asset to the engineering team without even having to touch your keyboard.</p>

<p>With pairing, you don’t have to wait until the work is “done” to find issues with it. Whether implementation doesn’t mean your expectations or your own design falls down when met with stress cases, you can adjust on the fly. It’s more efficient to have these conversations and fix shortcomings as problems are identified rather than let them block development.</p>

<h2 id="review-pull-requests">Review pull requests</h2>

<p>I like to kick off any new project or team by asking engineers to request my review on pull requests that make user-facing changes. It’s a good way to understand how code actually get shipped, and a great way to catch a lot of low-hanging fruit.</p>

<p>Depending on the stack your company uses, it might require a bit of knowledge to be able to read code for components or views and understand how it will look. It’s helpful if changes are deployed to staging environments so you can look at things and suggest changes to the code if you see issues.</p>

<p>If you have a design system where naming is aligned across design and code, you might be able to raise a lot of nits. Are the variables for colour, spacing, etc. the right ones? Did they use correct button variant? Is the copy capitalised properly? Did someone write new copy for an error case and it doesn’t make any sense? Don’t be afraid to get in there and make suggestions.</p>

<p>If you are or get really good in a certain area, you might be able to take more responsibility at this stage of the development process. At Litmus, I was a <a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners">codeowner</a> for all of our CSS files. Any changes to those files were flagged to me so I always had an eye on things and could jump in if needed. At GitHub, I’m on the codeowners team for Actions; I subscribe to Slack notifications for every new pull request assigned to that team and regularly stop minor mistakes from shipping.</p>

<h2 id="fix-bugs">Fix bugs</h2>

<p>You’ll never prevent all of them. There were visual bugs in production before you started and there will be visual bugs in production long after you leave. But sometimes they’re almost as quick to fix as they are to document and explain, so it can be effective to do it yourself when you spot them.</p>

<p>Again, common offenders are copy issues, incorrect colours, and spacing misalignments. Those are approachable problems if you understand a bit of frontend code and/or how your design system works. Getting some reps in for creating a branch, making a very easy change, opening a PR, and shipping to production will expand your understanding and build your confidence.</p>

<p>You’ll eventually run into complexity in the code. Maybe you can’t change something because it also affects another area (or you can’t be sure what it affects), or a line of copy is actually generated by some confusing logic, or sometimes you can’t even find the source code for what you’re looking at in the browser. Those are learning opportunities. Stretch yourself to try to make sense of these things, but know when to ask for help and also when to cut your losses.</p>

<h2 id="scaffold-ui">Scaffold UI</h2>

<p>This is one of my favourite ways to work with engineers. Before I even knew how to render a new view in Rails, I would ask someone to create one for me and push it to a branch. Then I’d populate it with actual HTML and UI components, using comments as pseudo code for all of the logic.</p>

<p>Here’s a super basic example.</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- If user is signed in --&gt;</span>
<span class="nt">&lt;div&gt;</span>
  <span class="nt">&lt;p&gt;</span>You’re signed in<span class="nt">&lt;/p&gt;</span>
  <span class="nt">&lt;button&gt;</span>Do something<span class="nt">&lt;/button&gt;</span>
  <span class="c">&lt;!-- If user is an admin --&gt;</span>
  <span class="nt">&lt;button&gt;</span>Do an admin thing<span class="nt">&lt;/button&gt;</span>
<span class="nt">&lt;/div&gt;</span>
<span class="c">&lt;!-- If user is not signed in --&gt;</span>
<span class="nt">&lt;p&gt;</span>You’re not signed in<span class="nt">&lt;/p&gt;</span>
</code></pre></div></div>

<p>You don’t have to know how to make anything work, just how to make it look like it should. This will render all of the elements, but as real logic is layered on, it falls into place. In my experience, engineers who are less interested or skilled in building UI loved this type of collaboration because I took those tasks off their plates <em>and</em> they never had to deal with me raising visual bugs.</p>

<p>As a bonus, the code you write in this way doubles as design documentation. There are communication and efficiency benefits to speaking the same language as engineers and not having to mock up or write out all of the various states and edge cases. Learning to think about implementing designs at this level also gets your brain working like a programmer’s. When you see that logic after it’s translated to actual language syntax (maybe in a PR you’re reviewing), you start to learn how to do it yourself.</p>

<p>That HTML above might ship like this. Doesn’t seem so unapproachable all of a sudden.</p>

<div class="language-erb highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">&lt;%</span> <span class="k">if</span> <span class="n">current_user</span><span class="p">.</span><span class="nf">signed_in?</span> <span class="cp">%&gt;</span>
  <span class="nt">&lt;div&gt;</span>
    <span class="nt">&lt;p&gt;</span>You’re signed in<span class="nt">&lt;/p&gt;</span>
    <span class="nt">&lt;button&gt;</span>Do something<span class="nt">&lt;/button&gt;</span>
    <span class="cp">&lt;%</span> <span class="k">if</span> <span class="n">current_user</span><span class="p">.</span><span class="nf">is_admin?</span> <span class="cp">%&gt;</span>
      <span class="nt">&lt;button&gt;</span>Do an admin thing<span class="nt">&lt;/button&gt;</span>
    <span class="cp">&lt;%</span> <span class="k">end</span> <span class="cp">%&gt;</span>
  <span class="nt">&lt;/div&gt;</span>
<span class="cp">&lt;%</span> <span class="k">else</span> <span class="cp">%&gt;</span>
  <span class="nt">&lt;p&gt;</span>You’re not signed in<span class="nt">&lt;/p&gt;</span>
<span class="cp">&lt;%</span> <span class="k">end</span> <span class="cp">%&gt;</span>
</code></pre></div></div>

<h2 id="build-prototypes">Build prototypes</h2>

<p>It’s not always the most productive design approach, but when it feels useful, I like to create proofs of concept as low fidelity prototypes in CodePen. This can be a fun way to <a href="https://codepen.io/dylanatsmith/full/zYwqxZQ">explore</a> <a href="https://codepen.io/dylanatsmith/full/ZEKWoym">options</a> for interactions.</p>

<p>In these examples, my code was written to be thrown away. (Check out that old jQuery.) The visual design isn’t polished and the content isn’t realistic. But it was the quickest way to have every stakeholder understand what the different experiences would feel like so we could discuss them from the same point of understanding.</p>

<p>Prototyping can be whatever you want it to be. I prefer a sandbox, others like a branch in the real codebase. At GitHub, some designers even have a React boilerplate for creating high fidelity prototypes using our design system that feel just like the real product. Because you’re just making a temporary artifact, you have the freedom to use whichever platform and tech stack you’re most comfortable with.</p>

<hr />

<p>There can be a few gotchas I should note. These will largely depend on the engineering team you work with.</p>

<p>The biggest hurdle you might face is that the organisation is simply not set up to support or allow you having access to code. There are many companies where non-engineers don’t have access to necessary systems and credentials, and requests are met with restrictive policies or at least warranted friction. There’s usually nobody to have your back, either — you might have to keep pressing the issue on your own or through your manager to make progress.</p>

<p>The other is that engineers might be sceptical that someone else wants to be involved. Some orgs are very segregated, and engineering teams can be insular. The best teammates will welcome the interest and help but some might feel like you’re stepping on their toes.</p>

<p>One way to approach both of these hurdles is not asking or telling but showing what you can bring to the team if you’re involved with code. Pair with engineers; build prototypes; use your browser’s inspector to debug issues and share solutions. Earn trust and doors will open.</p>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20How%20should%20designers%20code?">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>design</category>
        
            <category>work</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
                Linked: 
            
            In Defense of Shutting the Fuck Up - Reply Alt
            
                
            
        </title>
        <summary>My personal Internet highlight reel</summary>
        <pubDate>Sat, 06 Jan 2024 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/links/in-defense-of-shutting-the-fuck-up-reply-alt" rel="alternate" type="text/html" title="Linked: In Defense of Shutting the Fuck Up - Reply Alt">https://dylanatsmith.com/links/in-defense-of-shutting-the-fuck-up-reply-alt</link>
        <id>https://dylanatsmith.com/links/in-defense-of-shutting-the-fuck-up-reply-alt</id>
        <guid isPermaLink="true">https://dylanatsmith.com/links/in-defense-of-shutting-the-fuck-up-reply-alt</guid>
        <content:encoded>
            <![CDATA[
                <blockquote>
  <p>Lately I am more prone to shutting the fuck up. I don’t know if it’s me or the internet that’s changed since then. Probably a little of both. I definitely feel less of a desire to stay hyperconnected to culture as I age, but social media has also taken a palpable nosedive over the last few years that has rendered it nearly unusable.</p>

  <p>…</p>

  <p>These are people desperate to be heard but with nothing to say. Who would want such a fate? It reminds me of that line from the first scene of No Country for Old Men. “A man would have to put his soul at hazard. He’d have to say, ‘Okay. I’ll be part of this world.’”</p>

  <p>If you spend too much time getting lost in it, it all feels very important. But when you take even the smallest step back, out of this online prison of our own making, you realize none of it actually matters. </p>
</blockquote>

                <hr/>
                
                    <a href="https://danozzi.substack.com/p/in-defense-of-shutting-up">Visit original link</a> / 
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20In%20Defense%20of%20Shutting%20the%20Fuck%20Up%20-%20Reply%20Alt">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
        
            <category>links</category>
        
      </item>
    
      <item>
        <title>
            
            Life radar
            
        </title>
        <summary>How I used radar charts to become mindful of balance and progress across areas of focus</summary>
        <pubDate>Tue, 02 Jan 2024 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/life-radar" rel="alternate" type="text/html" title="Life radar">https://dylanatsmith.com/wrote/life-radar</link>
        <id>https://dylanatsmith.com/wrote/life-radar</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/life-radar</guid>
        <content:encoded>
            <![CDATA[
                <p><a href="2024">My last post</a> about my priorities going into 2024 reminded me of this radar chart template I made in 2019. Each spoke represents an area of focus and can be evaluated from 1–5, 5 being the highest and plotted on the outermost ring.</p>

<!-- End excerpt -->

<p><img src="/assets/img/articles/2024/life-radar-01.png" alt="An empty radar chart with six spokes: fitness, fiancée, family, friends, career, and creativity" /></p>

<p>The system was pretty lofi. I just saved the above image on my phone and set a recurring reminder to duplicate it and add data points every week or so with the iOS drawing tool. The better I felt I did in that category that week, the higher the rating. If I dropped the ball, low rating.</p>

<p>The result would look something like this.</p>

<p><img src="/assets/img/articles/2024/life-radar-02.png" alt="The same radar chart with data points for each category" /></p>

<p>I saved all of the images in the same folder which let me scrub through and see the changes over time. Perfect 5s was never the goal — that’s a path to burnout. It’s all about managing the balance. If a rating was low, I knew to pay it some mind and book a dinner date, text a friend, or call my mom. It helped visualise focus and make sure nothing I decided I cared about was slipping through the cracks.</p>

<p><img src="/assets/img/articles/2024/life-radar-03.png" alt="The same radar chart with different values plotted" /></p>

<p>At one point I wrote a web app for this, because of course I did. I could add or remove categories and add sets of values. I used <a href="https://www.chartjs.org/">Chart.js</a> to generate the chart. It’d probably make a better iOS app with push notification reminders.</p>

<p>Eventually I stopped doing it. It hit a sweet spot for me between goal setting and habit tracking, but after it trained me to be conscious of balance and progress, it became less useful.</p>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20Life%20radar">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            2024
            
        </title>
        <summary>This isn’t a checklist, it’s just directional.</summary>
        <pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/2024" rel="alternate" type="text/html" title="2024">https://dylanatsmith.com/wrote/2024</link>
        <id>https://dylanatsmith.com/wrote/2024</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/2024</guid>
        <content:encoded>
            <![CDATA[
                <p>I’m hesitant to write a list of new year’s resolutions. I’m generally happy with how everything is going and have no reason to believe that satisfaction won’t continue through the next 12 months. That said, there are a handful of priorities I’ve accumulated and highlighting those here for myself to reflect on and reevaluate is a nice exercise, even if I decide by March that some of them are no longer the right priorities. This isn’t a checklist, it’s just directional.</p>

<!-- End excerpt -->

<h2 id="writing">Writing</h2>

<p>I’m partially publishing this post as an anchor. I’d like to return to writing more thoughtful and substantial on my own website. I didn’t write a single “article” here in all of 2023, though in absence of Twitter I was fairly consistent (not prolific) with my <a href="/feed">feed</a>.</p>

<p>I subscribe to the RSS feeds of some people whose writing I really envy. My favourite bloggers are those who make it feel effortless. They post about seemingly random topics and I find it interesting because it’s in their voices. I also like the recurring themes certain people employ. Dave Rupert has a recurring <a href="https://daverupert.com/tag/vibecheck">vibe check</a> where he summarises a number of areas in his own life, and I think stealing that type of lightweight structure might work well for me, too.</p>

<p>My two aspirations: write regularly, and make the habit of publishing feel easy.</p>

<h2 id="running">Running</h2>

<p>Consistency is also key to this one. I picked running back up around June of 2023 and I really love it. I’m good at running and it’s always come naturally to me. In the past, though, I’ve always focussed narrowly on bettering my 5K time and I’ve realised this go around that I much prefer endurance over greater distances. I’ve swapped the racing flats for max cushioning and traded in the <a href="https://open.spotify.com/playlist/76RwTddjyVP0DmZOTgfdjV">Spotify playlist</a> for podcasts. My longest run in 2023 was a 31 kilometre (19 mile) round trip from my flat in East London to the Design Museum in Kensington. It’s especially great to be a runner in London because I can take a new route every day and there’s always something interesting to look at.</p>

<p>This year I’m not going to set goals for speed or mileage. I don’t care if I run a race. I just don’t want to hit a slump. If I run at least 2–3 hours every week I’ll be happy. If my self-discipline slips and I find my shoes collecting dust, I’ll be disappointed. If you run, too, <a href="https://www.strava.com/athletes/118947286">follow me on Strava</a> for accountability.</p>

<h2 id="new-house">New house</h2>

<p>Alana and I bought a house! Almost. We’re in the final stages now, just waiting on solicitors to finalise paperwork, and due to get the keys in a matter of weeks. It’s move-in ready, which was important to us for the first home we buy, so there aren’t any major projects on the horizon. I want to replace some carpet with wooden floors ASAP. We’ll paint, obviously. But mostly just superficial improvements, barring any nasty surprises.</p>

<p>We’re planning to work our way through the house and make it our own room-by-room. It’ll be a lot of work and take up a lot of my free time, but it’ll also be rewarding. We’ve saved for years to “get on the ladder.” My goal is to have the interior fully decorated and furnished to the point that we’re really happy with everything by the end of the year.</p>

<h2 id="career">Career</h2>

<p>The vibe at work was <a href="https://techcrunch.com/2023/02/09/github-lays-off-10-and-goes-fully-remote/">pretty gloomy</a> for most of 2023. That had a big impact on morale, even if I grew really close to my team through the uncertainty. Now that we’ve started hiring for a bunch of new roles for the first time in almost a year, it feels to me like we’re finally back to normal.</p>

<p>Frankly, between the layoffs and lack of career progression, I found myself mentally checked out for a good chunk of last year. Despite that, I’m unable to turn off and ended up with positive reviews. I’m also starting the year off by transitioning back into design engineering and moving to a different product area, which I’ll say more about soon.</p>

<p>Goals? Don’t fuck it up. Leave 2024 with a better title and bigger paycheque than I entered with.</p>

<h2 id="side-project">Side project</h2>

<p>I’ve had some app ideas bouncing around for years. One in particular is a working proof of concept with real users that continue to provide positive feedback and recommend it to others. The only problems are that I hate its current form too much to share it myself, and the codebase is not fit for purpose. I know everybody says these things, but this thing is built fully client-side, using jQuery to grab data from Firebase. It’s really hanging on by a thread.</p>

<p>This is the year I ship it for real. I still think it has legs if done right. And if it doesn’t, I think I have what it takes to learn and pivot. And if I don’t, well, I still think startups are fun. I owe it to myself to give a SaaS an honest try.</p>

<h2 id="email-geeks">Email Geeks</h2>

<p>This one’s bittersweet. Since 2016, I’ve helped grow and maintain the <a href="https://email.geeks.chat">Email Geeks</a> community for the email marketing industry. We’re at 21,184 members as I write this. That work has opened a lot of doors for me and introduced me to a lot of people. I’ve given a lot back, too — probably hours a day on average for eight straight years, even if most of those hours were passive. Between the admin, member vetting, content moderation, development of internal tooling, a near legal battle, and the <a href="https://email.geeks.chat/salary-survey/results">2020 salary survey</a>, there’s been no shortage of volunteer work. Not to mention all the ideas I didn’t get to.</p>

<p>But it’s been almost two years since I worked at an email-related company. I take the stewardship seriously but that’s not my world anymore. Facing a potentially demanding year with everything listed above, something needs to give. I want to launch the 2024 salary survey, automate what I can to replace myself, and then log out for at least a while.</p>

<h2 id="bonus-profile-photo">Bonus: Profile photo</h2>

<p>I’ve been using the same headshot everywhere for a little too long and it’s starting to get ridiculous. I’ve been growing my hair for a year and a half. I need to use a new photo.</p>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%202024">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>goals</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
                Linked: 
            
            590: Twisting Through Websites - ShopTalk
            
                
            
        </title>
        <summary>My personal Internet highlight reel</summary>
        <pubDate>Mon, 06 Nov 2023 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/links/590-twisting-through-websites-shoptalk" rel="alternate" type="text/html" title="Linked: 590: Twisting Through Websites - ShopTalk">https://dylanatsmith.com/links/590-twisting-through-websites-shoptalk</link>
        <id>https://dylanatsmith.com/links/590-twisting-through-websites-shoptalk</id>
        <guid isPermaLink="true">https://dylanatsmith.com/links/590-twisting-through-websites-shoptalk</guid>
        <content:encoded>
            <![CDATA[
                <p>There’s an interesting chat beginning at 3:05 into this episode where Chris Coyier mentions the post-Twitter clones and that <a href="https://en.wikipedia.org/wiki/Pebble_(social_network)">Pebble</a> is the first to tap out. He mentions that he thought Pebble’s design was better than that of Mastodon, Bluesky, etc.</p>

<p>It made me think of political elections. It’s not uncommon for an underdog candidate to run on a strong and principled platform. They gain a small, dedicated following and when it’s clear they won’t have the numbers needed to win, they endorse a more likely candidate in exchange for that candidate adopting their key policies.</p>

<p>Software isn’t a zero sum industry but there are plenty of cases of startups forcing the big dogs to up their games or adopt certain features that users come to expect.</p>

                <hr/>
                
                    <a href="https://shoptalkshow.com/590/#t=03:05">Visit original link</a> / 
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20590:%20Twisting%20Through%20Websites%20-%20ShopTalk">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>podcast</category>
        
        
            <category>links</category>
        
      </item>
    
      <item>
        <title>
            
            23 15 52
            
        </title>
        <summary>Posted :year-:month-:day</summary>
        <pubDate>Sat, 11 Feb 2023 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/notes/2023-02-11-23-15-52" rel="alternate" type="text/html" title="23 15 52">https://dylanatsmith.com/notes/2023-02-11-23-15-52</link>
        <id>https://dylanatsmith.com/notes/2023-02-11-23-15-52</id>
        <guid isPermaLink="true">https://dylanatsmith.com/notes/2023-02-11-23-15-52</guid>
        <content:encoded>
            <![CDATA[
                <p>I added a <a href="https://dylanatsmith.com/feed">Feed page</a> to my website tonight. It’s a firehose stream of all my writing, notes, and links. Hoping to extend it soon to add photo posts and RSS.</p>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%2023%2015%2052">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
        
            <category>notes</category>
        
      </item>
    
      <item>
        <title>
            
            Where to next?
            
        </title>
        <summary>A prediction for both Twitter and my future online</summary>
        <pubDate>Sat, 05 Nov 2022 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/where-to-next" rel="alternate" type="text/html" title="Where to next?">https://dylanatsmith.com/wrote/where-to-next</link>
        <id>https://dylanatsmith.com/wrote/where-to-next</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/where-to-next</guid>
        <content:encoded>
            <![CDATA[
                <p>To me, the writing is on the wall. Here’s my Twitter prediction:</p>

<p>In 1–2 years, it’ll feel like Facebook did after the moms showed up and young people shifted most of their posting to Instagram.</p>

<p>“You still use Twitter?”
“Yeah, it’s the only place I can keep in touch with certain people.”
“Oh, that sucks.”</p>

<!-- End excerpt -->

<p>In 2–3 years you’ll log in for the first time in a few months. It’ll be full of brands, a few people you never really knew that closely tweeting inane shit, ads, and the odd “haven’t tweeted in a while — anyone still on here?”</p>

<hr />

<p>The new owner immediately sacked the entire Human Rights, Accessibility, AI Ethics, Public Policy, and Curation teams. Possibly others. I don’t want to use a Twitter that doesn’t have those things. I’ve already had the guy blocked and his name muted for months.<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> I don’t want to drive his car, I don’t want to use his social media platform, and I don’t want to spend time with people who think he’s okay.</p>

<p>Even if the dust settles and my personal Twitter experience remains fine, it’s already exhausting. Constant stream-of-consciousness “announcements” and uncertainty around new features or policies that may or may not be implemented isn’t fun or interesting. I don’t have any desire to make mid- to long-term bets on someone else’s company or my daily online life. As someone said (in a tweet), it took only one week for him to entirely destroy the userbase’s trust. It seems like the only people having fun on Twitter right now are trolls with illustrated profile photos. I get the sense that’s going to continue to be the vibe.</p>

<p>So where to next?</p>

<p>Social media has always been a large part of my online life. As a kid I used guestbooks, chatrooms, and message boards. In my teens I was an early adopter of the some of the earliest profile sites with dumb names like like RateMyInfo and What The Dilly. They were mostly full of weirdos like me; when the normal people at high school finally found MySpace, we entered a different era. I went online to get away from everyone but eventually they found me. Still, I did Facebook, did Instagram, and I’ve been on Twitter for almost 15 years.</p>

<p>A few people have asked me if I’m going to use Mastodon next. It seems like that’s the go-to lifeboat, at least for my tech-inclined social and professional circle. I’m just not drawn to it. Mastodon is like Twitter but more complicated and worse in almost every way. It’s possible I might start syndicating posts there if it reaches critical mass and seems interesting enough, but I’m not rushing over.</p>

<p>I asked myself why I would join another social media platform right now and I simply had no good answer. “Everyone else is doing it” isn’t enough. Right now I’m just looking forward to having my time and attention back.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>Yes, all the muted tweets have made Twitter especially hard to read through over the past few weeks. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
  </ol>
</div>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20Where%20to%20next?">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>Twitter</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            Managing comment sprawl
            
        </title>
        <summary>How I solicit, collect, and process feedback during the lifecycle of a design project</summary>
        <pubDate>Thu, 06 Oct 2022 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/managing-comment-sprawl" rel="alternate" type="text/html" title="Managing comment sprawl">https://dylanatsmith.com/wrote/managing-comment-sprawl</link>
        <id>https://dylanatsmith.com/wrote/managing-comment-sprawl</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/managing-comment-sprawl</guid>
        <content:encoded>
            <![CDATA[
                <p>One underappreciated challenge with working online is collecting and managing feedback.</p>

<p>Designing at GitHub, I plan and track my work using <a href="https://github.com/features/issues">issues and projects</a>. I create mockups and prototypes in Figma. Maybe I record some Loom videos. I share those issues, files, and videos in Slack messages and channels. I also pluck out bits to share on <a href="https://www.campsite.design/">Campsite</a>. Each of these products has its own commenting system.</p>

<!-- more -->

<p>I receive each of their notifications in different ways:</p>
<ul>
  <li>Slack and Figma via Slack</li>
  <li>Loom and Campsite via email</li>
  <li>GitHub via our internal-only macOS app<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup></li>
</ul>

<p>This gets super messy. Any time I share work, I open myself up to comments from multiple sources through multiple channels. Commenters are blind to each other’s input, the feedback invariably gets repeated, and context and decisions are explained over and over. More time can be spent relaying the side conversations back and forth than moving work forward.</p>

<p>Additionally, some products implement comments in a way that aren’t as fit for actual discussion. If comments don’t have anchor links I can reference elsewhere, can’t support branched discussions (threads), and don’t put notifications into my critical path<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>, I treat those as input-only. People can look at my thing and tell me something that I’ll make note of, but I’m probably not going to reply there.</p>

<p>All of this usually leads me to explicitly tell people where I want them to provide feedback: “Here’s a Loom video and the Figma file, but please leave your thoughts in this Slack thread.”</p>

<p>I generally prefer Slack for feedback intake because it’s low-friction for everyone involved. I can easily broadcast bite-sized updates where people are already looking and it’s conducive to making quick decisions — especially small ones. It also allows everyone to see all the other feedback on that topic and quickly get <em>just enough context</em>.</p>

<p>The downside to using Slack is that my thread is just another unread channel indicator and just another message in the feed. It can be difficult to solicit sincere engagement. Easy come, easy go.</p>

<p>For each major piece of work, I also maintain a long-running GitHub issue to track my entire design process. All decisions, feedback, TODOs, and iterations are documented here as work progresses and the project evolves. If someone leaves a comment elsewhere, I even collect and quote their feedback on the relevant issue and link out to it as a reply to their original message. The issue is the source of truth.</p>

<p>It should be easy for anyone else — from a product manager collaborating with me now to another designer in 5 years — to read the description and comments from top to bottom and understand not only what I did, but why I did it, what else I tried, and the feedback that shaped it all. It feels like writing a case study in realtime.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>👀 🤫 <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p>By “critical path” I mean where I’ll actually see the notifications it in a timely manner. Slack is best for me; email is okay. Some products make you check them manually to see what’s new and that’s where feedback goes to die. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
  </ol>
</div>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20Managing%20comment%20sprawl">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>design</category>
        
            <category>tools</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            First they automated…
            
        </title>
        <summary>First they automated the cashiers, and I did not want universal basic income—because I was not a cashier.</summary>
        <pubDate>Wed, 05 Oct 2022 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/first-they-automated" rel="alternate" type="text/html" title="First they automated…">https://dylanatsmith.com/wrote/first-they-automated</link>
        <id>https://dylanatsmith.com/wrote/first-they-automated</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/first-they-automated</guid>
        <content:encoded>
            <![CDATA[
                <p>First they automated the cashiers, and I did not want universal basic income—because I was not a cashier.</p>

<p>Then they automated the warehouse workers, and I did not want universal basic income—because I was not a warehouse worker.</p>

<p>Then they automated the artists, and I did not want universal basic income—because I was not an artist.</p>

<p>Then they automated me—and there was no one left to provide universal basic income for me.</p>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20First%20they%20automated...">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            All the words tattooed on my body
            
        </title>
        <summary>Arranged alphabetically</summary>
        <pubDate>Sun, 24 Apr 2022 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/all-the-words-tattooed-on-my-body" rel="alternate" type="text/html" title="All the words tattooed on my body">https://dylanatsmith.com/wrote/all-the-words-tattooed-on-my-body</link>
        <id>https://dylanatsmith.com/wrote/all-the-words-tattooed-on-my-body</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/all-the-words-tattooed-on-my-body</guid>
        <content:encoded>
            <![CDATA[
                <p>a (twice)<br />
asshole<br />
bald<br />
dude<br />
Dyl<br />
for<br />
gold<br />
hate<br />
in<br />
is<br />
it<br />
kinda<br />
live<br />
me<br />
passionate<br />
rockers<br />
salute<br />
some<br />
stay<br />
still<br />
to (twice)<br />
viva<br />
waiting<br />
world<br />
worms<br />
us<br />
you</p>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20All%20the%20words%20tattooed%20on%20my%20body">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            Weeknotes 2022-W05
            
        </title>
        <summary>On leaving my job, my git blame legacy, and looking like hell in my passport photo.</summary>
        <pubDate>Sun, 06 Feb 2022 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/weeknotes-2022-w05" rel="alternate" type="text/html" title="Weeknotes 2022-W05">https://dylanatsmith.com/wrote/weeknotes-2022-w05</link>
        <id>https://dylanatsmith.com/wrote/weeknotes-2022-w05</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/weeknotes-2022-w05</guid>
        <content:encoded>
            <![CDATA[
                <p>Leaving a remote job feels so anticlimactic. On Thursday afternoon, I ordered my work laptop to wipe itself and then didn’t really know what to do. I sort of paced around the flat for a while, messaging now ex-coworkers<sup id="fnref:zoom" role="doc-noteref"><a href="#fn:zoom" class="footnote" rel="footnote">1</a></sup> on our alumni Slack workspace, before fading into my usual evening routine of walking the dog and cooking dinner.</p>

<p>I once read someone’s take that the way people remember you professionally is determined 50% by the time you worked there and 50% by how you leave. I think it’s probably more like 75/25 but I like the premise and took it to heart during my notice period over the past few weeks. I did my best to prompt everyone for questions, answer them all, and leave thorough handover notes. I even hosted a tutorial workshop for the entire product engineering team to create a design system component with <a href="https://viewcomponent.org/">ViewComponent</a>.</p>

<p>I’ve kept thinking the past few weeks about the <code class="language-plaintext highlighter-rouge">git blame</code> legacy I’d leave behind. Will some new hire be in there in 2024 wondering what the fuck Dylan Smith was thinking when he did it like that? I hope not, but that’s what <a href="https://retrospectivewiki.org/index.php?title=The_Prime_Directive">The Prime Directive</a> is for I guess. It’s a good thing I’ve coded with this in mind from day 1; the last however many days is far too few to late to do much about it.</p>

<p>The anticlimax of ending one job sat alone in my home office<sup id="fnref:pub" role="doc-noteref"><a href="#fn:pub" class="footnote" rel="footnote">2</a></sup> was offset some by receiving a laptop and calendar invitations for my new job. One of those calendar invitations caused a bit of a panic, though. I have to get on Zoom and hold my passport to prove that I am who I say I am… but I haven’t seen my passport since I last travelled abroad in November 2019. I’m convinced it’s in my flat someplace and that I’ll eventually find it in a pocket or bag or in the bottom of a drawer, though I’ve spent hours searching with no luck. A last-minute passport replacement was my only option.</p>

<p>Luckily I was able to nab an appointment just two hours from the time I checked the booking site on Monday afternoon. I rushed to the Post Office for an application form, filled it out back at home, and realised I needed a guarantor. Knocked on my neighbour’s door as he was leaving and he was nice enough to give me his passport so I could fill in the necessary details. I had two passport photos sitting in a drawer so I grabbed those and rushed off toward Victoria on the tube. I made it with minutes to spare.</p>

<p>When I handed the employee at the desk my photos she told me immediately they were too large. Canadian size, I realised, from renewing that passport a couple of years ago. My heart sunk but immediately jumped back up when she said there were photo booths down the hall I could use and then hurry back to her desk. Let’s just say I was not planning on having my photo taken that day, and definitely not for a document I’ll be showing border guards any time I want them to let me into their countries for the next decade. I’d been growing a “<a href="https://en.wikipedia.org/wiki/Playoff_beard">playoff beard</a>” during my notice period and also not slept the previous few nights…</p>

<p><img src="/assets/img/articles/2022/passport-photos.jpg" alt="Three nearly identical passport photos on a screen in which I have a long beard and bags under my eyes. Each photo offers the option to “Choose this photo.”" /></p>

<p>The passport was delivered on Saturday. I start my new job on Tuesday as planned.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:zoom" role="doc-endnote">
      <p>Earlier in the day I’d been seen off with the Litmus tradition of everyone crashing the leaver’s last Zoom meeting. <a href="#fnref:zoom" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
    <li id="fn:pub" role="doc-endnote">
      <p>This isn’t totally fair. A few of the Litmus employees in London joined me at Euston Tap on Friday night for a “proper” sendoff. <a href="#fnref:pub" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
  </ol>
</div>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20Weeknotes%202022-W05">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>weeknotes</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            Weeknotes 2022-W04
            
        </title>
        <summary>On bland food, jalebis, and feeling alive again.</summary>
        <pubDate>Sun, 30 Jan 2022 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/weeknotes-2022-w04" rel="alternate" type="text/html" title="Weeknotes 2022-W04">https://dylanatsmith.com/wrote/weeknotes-2022-w04</link>
        <id>https://dylanatsmith.com/wrote/weeknotes-2022-w04</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/weeknotes-2022-w04</guid>
        <content:encoded>
            <![CDATA[
                <p>We ran out of salt this week. For two days in a row, dinner was bland as fuck.<sup id="fnref:seasoning" role="doc-noteref"><a href="#fn:seasoning" class="footnote" rel="footnote">1</a></sup> The next meal I ate after going to the shop felt like my tastebuds had been resuscitated. That’s all a pretty apt metaphor for how the first half of the week felt in general.</p>

<p>The only good thing to come out of the boredom is that I found <a href="https://wikitrivia.tomjwatson.com/">this history trivia game</a>. You’re presented with a card displaying the title and main image of a Wikipedia article and you have to decide where it should be placed on a timeline relative to the previous cards. My best streak is 15.</p>

<figure>
  <img src="/assets/img/articles/2022/ring-in-lake.jpg" alt="Bird’s eye view of a corgi looking at a yellow throwing disc at the bottom of a clear, shallow lake" />
  <figcaption>More <a href="weeknotes-2022-w02">ring drama</a> on Wednesday. Louis brought it into the lake when he stopped for a drink but couldn’t (or didn’t want to) dunk his head in to retrieve it. I had to fish it out with a nearby fallen branch.</figcaption>
</figure>

<p>I met <a href="https://twitter.com/neildawson">Neil</a> for lunch on Friday. We’ve lived within walking distance for about five years and somehow never got around to seeing each other in our own area for some reason. I wanted to go to <a href="https://www.thewhitehart.london/">The White Hart</a> but they weren’t serving food so we settled for the Nando’s next door.</p>

<p>After lunch we walked down Whitechapel Market to <a href="http://www.ambala.co.uk">Ambala</a>. I got a box of my favourites: pistachio barfi, gulab jamon, and jalebis. Neil had never tried Indian sweets before so he played it safe and got the same. Then we walked back east and stopped in to <a href="https://www.rinkoffbakery.co.uk/">Rinkoff Bakery</a>, just because I never had, before parting ways. The afternoon stroll was a nice reminder to explore my own neighbourhood more often.</p>

<p>Friday evening I met <a href="http://mike-ragan.com/">Mike</a> in Exmouth Market. I drove a Zipcar because I try to avoid the tube whenever the COVID numbers are particularly high. In retrospect, this was silly because we spent the rest of the night in busy pubs. Driving through Farringdon and Clerkenwell at 5pm on a Friday highlighted just how big of an impact the pandemic has had on certain parts of the city that rely on office activity. There was little traffic and few people.</p>

<figure>
  <img src="/assets/img/articles/2022/zipcar.jpg" alt="Two black cars parked so close together that their front bumpers are kissing" />
  <figcaption>The Zipcar I hired had been left kissing another car in order to fit into a parking space.</figcaption>
</figure>

<p>I’ve been out for drinks a handful of times since March 2020 (but could probably count how many on both hands). This felt like the first proper night out though. Usually we’d opt to go somewhere less busy, sit outside, and stay in one place all night. This time we moved around a lot and wandered through Clerkenwell on our whims. We went from <a href="https://exmoutharms.com/">The Exmouth Arms</a> to <a href="https://www.mikkellerbrewpublondon.com/">Mikkeller</a> to <a href="https://www.pivohub.co.uk/">Pivo</a> to <a href="https://theslaughteredlambpub.com/">The Slaughtered Lamb</a> <sup id="fnref:smell" role="doc-noteref"><a href="#fn:smell" class="footnote" rel="footnote">2</a></sup> to <a href="https://19-20.co.uk/">1920</a>, where we finished off the night with some pool.</p>

<p><img src="/assets/img/articles/2022/pint.jpg" alt="Two beers in pint glasses with Mikkeller branded illustrations with a plant and people at a table in the background" /></p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:seasoning" role="doc-endnote">
      <p>Important to note here that there were plenty of other flavours and seasonings. You just don‘t realise how much work salt is doing to bring them out until it‘s gone. <a href="#fnref:seasoning" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
    <li id="fn:smell" role="doc-endnote">
      <p>Very, very briefly. We walked in, noticed a horrible smell, and Grandpa Simpsoned our way out of there. Great pub having an off night. <a href="#fnref:smell" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
  </ol>
</div>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20Weeknotes%202022-W04">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>weeknotes</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            Thoughts on Parcel
            
        </title>
        <summary>Exploring the opportunities and challenges for a developer-focused startup in the email industry.</summary>
        <pubDate>Wed, 26 Jan 2022 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/thoughts-on-parcel" rel="alternate" type="text/html" title="Thoughts on Parcel">https://dylanatsmith.com/wrote/thoughts-on-parcel</link>
        <id>https://dylanatsmith.com/wrote/thoughts-on-parcel</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/thoughts-on-parcel</guid>
        <content:encoded>
            <![CDATA[
                <p><a href="https://parcel.io/">Parcel</a> is a code editor designed specifically for email development, and does a great job of marketing itself as such. The app’s landing page highlights a number of thoughtful features that appeal directly to its fairly niche target audience. I’ve been watching founder <a href="https://twitter.com/theavigoldman">Avi Goldman</a>’s progress on Parcel for a while now. He ended its beta yesterday for a general release so I thought I’d jot down my thoughts as someone who’s spent the last several years working on email development and marketing products and immersed in that community.</p>

<p>The first thing I notice is the general look and feel of the marketing site. It’s not super unique on today’s web — dark mode, Tailwind UI, <a href="https://linear.app/">Linear</a> sort of vibe — but it does stand out in the email industry where most sites and products look like shit, frankly.<sup id="fnref:adobe-campaign" role="doc-noteref"><a href="#fn:adobe-campaign" class="footnote" rel="footnote">1</a></sup> They’re apps you have to use, not apps you <em>want</em> to use. Parcel feels different right out of the gate.</p>

<p>Parcel’s biggest strength, though, is that Avi seems to be employing good product practices. He’s super close to his users and embedded into communities where they hang out. As a result, he’s giving them not only features they want but also things they didn’t even realise they need. Listen, learn, ship, repeat.</p>

<p>Another thing working in Parcel’s favour is that they’re a small team (two people building it?) in a fresh, clean codebase. They can move fast. I’ve seen someone make a feature suggestion and it shipped within hours. I can’t think of another product or tool serving email development in this way right now and it’s a huge competitive advantage.</p>

<p>One double-edged sword to consider is that there’s little to no competition in this area right now. Most email tools specifically for developers that I can think of are free and/or open source, and way smaller in their ambitions. Many of the paid products have taken investment and moved upmarket to focus on enterprise and, necessarily, more valuable marketing personas.</p>

<blockquote>
  <p>Solid startup pattern:</p>
  <p>- Find any company "moving up into the enterprise"</p>
  <p>- Build a similar product for the startups that will be frustrated by the mayhem that causes</p>
  <cite><a href="https://twitter.com/johncutlefish/status/1484461755749179393">John Cutler</a></cite>
</blockquote>

<p>The space is underserved, but what matters is why. I do wonder if the potential market for something like this is too small. Parcel’s Pro plan, the cheapest paid tier, is $24 per user per month. That’s 417 users to hit $10K MRR, a common milestone for bootstrapped indie SaaS companies. 417 doesn’t sound like a lot but…</p>

<p>Email developers and designers are notoriously late adopters.<sup id="fnref:late-adopters" role="doc-noteref"><a href="#fn:late-adopters" class="footnote" rel="footnote">2</a></sup> Many designers still Photoshop or even InDesign instead of modern, purpose-built UI software. Developers still use Dreamweaver and haven’t adopted best practices like version control.<sup id="fnref:two-stereotypes" role="doc-noteref"><a href="#fn:two-stereotypes" class="footnote" rel="footnote">3</a></sup> If we haven’t hit a point where most email practitioners are using industry standard tools, I worry about Parcel being able to attract a critical mass of paying users.</p>

<p>Even if people do learn about it and love it, there’s another challenge: email developers are at the bottom of the marketing department ladder. They’re seen as a cost centre, not a profit centre, serving email design which serves email marketing which serves marketing in general. Email marketing departments do often get budget for software, but that doesn’t necessarily trickle down the same way developers reporting into an engineering department get spoiled. Can potential Parcel users make a compelling case for why they need a $24/mo subscription when their managers think whatever free code editor they’ve been using is good enough?</p>

<p>I can’t help but think that, on another timeline, Parcel’s biggest threat would be a decent set of email-focused extensions for VS Code and developers’ willingness to try them. Instead, because no one else is building that reality, it’s a huge monetisation opportunity if they can just sell to enough customers.</p>

<p>I don’t know what Avi’s ambitions are but I can imagine companies waving cheques at him this year, depending on those companies’ strategies and how keeping email developers engaged might play in. A sticky, lovable product for that persona has an undervalued impact on word of mouth and bottom-up product adoption in marketing departments. And, as above, once email devs get comfortable with a tool they often stick with it.</p>

<p>If I was a larger email company right now, I’d start thinking about inviting Avi to a Zoom call or two. But if I was Avi, I’d probably decline serious talks for the time being to explore a path to profitability. There’s a solid bootstrapped SaaS company to be had here, in a space with a great community that takes care of their own.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:adobe-campaign" role="doc-endnote">
      <p>If this seems harsh, go search for screenshots of Adobe Campaign. And if you think it’s not that bad, add “Classic” to the end of your query. <a href="#fnref:adobe-campaign" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
    <li id="fn:late-adopters" role="doc-endnote">
      <p>I’m not sure why this is. <a href="https://twitter.com/dylanatsmith/status/1463863021684547584">I asked about Dreamweaver on Twitter recently.</a> There are some specific features useful for email developers but that seems like a byproduct of email coding standards and practices being so far behind. Another contributing factor to this phenomena might be the distance between email design and development (reporting into marketing) from its tech product counterparts (with design and engineering established as independent and mature departments). <a href="#fnref:late-adopters" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
    <li id="fn:two-stereotypes" role="doc-endnote">
      <p>These are stereotypes but generally representative of what I see in the community. I actually think there are two cohorts of people working in email: email-first designers and developers, and web- or product-first designers and developers. The former tend to be much more knowledgeable about the quirks of the medium but the latter are miles ahead in terms of how they work, applying industry standards from other disciplines back to email. <a href="#fnref:two-stereotypes" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
  </ol>
</div>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20Thoughts%20on%20Parcel">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>email</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            Weeknotes 2022-W03
            
        </title>
        <summary>On learning music theory decades too late, squirrel euthanasia, and things that get tossed into the canal.</summary>
        <pubDate>Sun, 23 Jan 2022 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/weeknotes-w03" rel="alternate" type="text/html" title="Weeknotes 2022-W03">https://dylanatsmith.com/wrote/weeknotes-w03</link>
        <id>https://dylanatsmith.com/wrote/weeknotes-w03</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/weeknotes-w03</guid>
        <content:encoded>
            <![CDATA[
                <p>I got really into YouTube over the past year or so. I have a bunch of subscriptions I catch up on regularly and I like checking out the recommended videos, too. <a href="https://www.youtube.com/c/EricHaugenGuitar">Eric Haugen</a> was put to me this week by The Algorithm. He’s a guitarist and music teacher with a series called Where to Start wih Music Theory. I’ve been playing guitar for 22 years<sup id="fnref:ultimatum" role="doc-noteref"><a href="#fn:ultimatum" class="footnote" rel="footnote">1</a></sup> and never even thought about learning theory, nor acknowledged how it might help — you don’t tend to when you come up through punk and its derivatives.</p>

<p>I’ve watched the first few videos and his style of teaching clicked for me immediately. The way he explains theory, keys, and scales in relation with the fretboard was eyeopening. For example, I now know these are the A Major and A Minor scales:</p>

<pre>
|-----------------|-----------------|
|-----------------|-----------------|
|-----------------|-----------------|
|-----------4-6-7-|-------------5-7-|
|-----4-5-7-------|-------5-7-8-----|
|-5-7-------------|-5-7-8-----------|
</pre>

<p>These scales can be moved anywhere on the fretboard to be played in different keys, always starting on the note the key is named for. I already knew or could tell which notes and chords work and sound good together — I have a good ear — but never could have named which key I was playing in. I’ve been a trial and error player. Knowing (or being able to deduce) the key and which notes are in the scale feels like a cheat code.</p>

<div class="video">
  <iframe src="https://www.youtube-nocookie.com/embed/videoseries?list=PLnWUjmH5ZikGy5zQzmovPGZNlg84ZO26u" title="YouTube video player" frameborder="0" allow="encrypted-media; picture-in-picture" allowfullscreen=""></iframe>
</div>

<hr />

<p>On Friday I walked Louis to the vet to get his annual vaccinations. While I was in the waiting room, a man walked in with an injured squirrel in one of those big Tupperware bins. The receptionist gave a bit of a non-answer when he asked how they would treat the squirrel. Then he asked how long they might take; if they wouldn’t be too long, he could bring the squirrel back to where he found it. At this point the receptionist gave a look and a head shake that made it obvious the squirrel wasn’t leaving the vet’s office alive.</p>

<hr />

<p>I spent a bit of time one morning to take care of some housekeeping on my website. I’m slowly but surely making my site feel like more of an online home for myself, with writing and features beyond just a professional presence. This week I sorted out a <code class="language-plaintext highlighter-rouge">box-sizing</code> bug with my <code class="language-plaintext highlighter-rouge">blockquote</code> elements, improved the styling of my <a href="/notes">notes</a> list, and fixed up the width of media in posts. I also added the ability to use a featured image on posts that will display as a larger Twitter card (<a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards"><code class="language-plaintext highlighter-rouge">summary_card_image</code></a>) which I’d not previously bothered with. That‘s especially useful because I’m going to add more pictures to these weeknotes posts moving forward.</p>

<p>Here are a couple of photos I took this week.</p>

<figure>
  <img src="/assets/img/articles/2022/security-cameras.jpg" alt="Two dome-style security cameras that have been tossed into a canal and exposed when the canal was drained." />
  <figcaption>They’ve drained the Hertford Union Canal again for more repairs to its walls. Every time it’s emptied, all sorts of discarded stuff is revealed. Last time, a magnet fisherman pulled up an old grenade and the towpath and Gunmakers Gate to Victoria Park had to be closed off so a bomb unit could come sort it out. Lots of it seems crime-related, like abandoned mopeds, but rarely as on-the-nose as these two security cameras.</figcaption>
</figure>

<figure>
  <img src="/assets/img/articles/2022/frosty-park.jpg" alt="A corgi standing in a frosty park at sunrise on a clear morning. A light flare cuts across the centre of the image and a line of trees flanked by two residential high-rise buildings sits on the horizon." />
  <figcaption>I’m not that into “good” photography — photos that are well-framed or arty or whatever. I prefer quick shots that capture the truth of a moment. But every once in a while something catches my eye and it’s worth shooting as best I can on my old iPhone.</figcaption>
</figure>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:ultimatum" role="doc-endnote">
      <p>I played ice hockey from around age 4 or 5, as you do as a young Canadian boy. When I neared my teens, I stared becoming interested in music and telling my mom I wanted a guitar. She said I could either keep playing hockey or start playing guitar, but I couldn’t do both. I chose the guitar and it changed my life. <a href="#fnref:ultimatum" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
  </ol>
</div>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20Weeknotes%202022-W03">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>weeknotes</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            Weeknotes 2022-W02
            
        </title>
        <summary>On getting my AirPod run over by a car, weird lyrics, and becoming a ring guy.</summary>
        <pubDate>Sun, 16 Jan 2022 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/weeknotes-2022-w02" rel="alternate" type="text/html" title="Weeknotes 2022-W02">https://dylanatsmith.com/wrote/weeknotes-2022-w02</link>
        <id>https://dylanatsmith.com/wrote/weeknotes-2022-w02</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/weeknotes-2022-w02</guid>
        <content:encoded>
            <![CDATA[
                <p>Amy Hupe’s <a href="https://twitter.com/Amy_Hupe/status/1480474372557180928">tweet about weeknotes</a> caught my eye on Monday.<sup id="fnref:dont-care" role="doc-noteref"><a href="#fn:dont-care" class="footnote" rel="footnote">1</a></sup> It reminded me of the three sporadic weeknotes I published sporadically in 2019; that I quite enjoyed writing those; and that it was a nice way to unwind on Sundays while working my publishing muscle without worrying too much about subject matter or perfectly crafted essays. So here we are again.</p>

<p>We got our first HelloFresh delivery this week. We’ve been in a bit of a rut dinner-wise, cycling through the same 6–8 meals. I wasn’t sure what to expect in terms of quality. I was especially worried the food would taste bland, as many British recipes I’ve cooked have, but we were pleased with everything. I’ve also found a bit of relaxation in the act of cooking, the same as I get from focussing on brewing coffee or handwashing dishes. (That’s probably just the break from screens.)</p>

<p>Another delivery was my new <a href="https://ouraring.com/">Oura ring</a>, a Christmas gift. Its sensors monitor vital signs and provide health insights through a companion app. I’ve gone back and forth for a few years about getting an Apple Watch for some of its fitness features like activity goals and heart rate monitoring but I’ve been put off by having a notification vector even more attached to my body than my phone. The ring is a nice alternative and I like the stats and reminders so far. I never would have fancied myself a ring-wearer, though, and it’s quite large so it’s taking some time to get used to (read: embrace a ring as part of my personal style). I might copy someone online who gave their shiny ring a dulled, brushed finish with some light filing.</p>

<p><img src="/assets/img/articles/2022/airpod.jpg" alt="Corrupted photo of a broken AirPod in my palm" /></p>

<p>I was going to include something about how I was listening to a podcast<sup id="fnref:podcast" role="doc-noteref"><a href="#fn:podcast" class="footnote" rel="footnote">2</a></sup> while cycling to the barbershop and my AirPod fell out of my ear on <a href="https://www.google.co.uk/maps/@51.5275633,-0.0767393,3a,75y,213.25h,84.72t/data=!3m6!1e1!3m4!1seX9OMMkvyKtzejcM51y4OQ!2e0!7i16384!8i8192">Hackney Road</a> and got run over by a car before I could pick it up. There’s really not much more to the story though. The aftermath photo got all corrupted and glitched out when I transferred it from my phone.</p>

<p>In other bad luck news, I threw my dog’s flying disc into a tree on Tuesday. Honestly, I’m surprised it took this long. The woman walking away in the bottom right corner of the photo laughed out loud when she saw it happen. I think that’s why I was so determined to get it down. After a few tries, I managed to sling Louis’s lead through the middle while jumping, then pull it off the branch. The woman was long gone.</p>

<p><img src="/assets/img/articles/2022/flying-disc.jpg" alt="Yellow disc hanging off a high tree branch in a park as walkers and cyclists pass. The weather is grey and wet." /></p>

<h2 id="some-media-consumption">Some media consumption</h2>

<p>I found this 1h42m on Disney’s FastPass system super interesting. It’s a massive deep dive on queue theory as it relates to Disney’s theme parks, which I’m now even more sure I never want to visit. Heads up that I had to watch the video in three sessions because it’s so dense.</p>

<div class="video">
  <iframe src="https://www.youtube-nocookie.com/embed/9yjZpBq1XBE" title="YouTube video player" frameborder="0" allow="encrypted-media; picture-in-picture" allowfullscreen=""></iframe>
</div>

<p>The Chat Pile song “Crawlspace” popped up on my Spotify recommendations this week and caught my ear for its lyrics and vocal delivery. The song is written from the perspective of an Oklahoma City police officer painting a picture of his life: “I’m in the garage working on my abs. Swanson in the microwave. Single dad.” The last third… gets dark. Turns out all their lyrics are like this, often inspired by real people and events. Reminds me of a macabre Pissed Jeans.<sup id="fnref:pissed-jeans" role="doc-noteref"><a href="#fn:pissed-jeans" class="footnote" rel="footnote">3</a></sup></p>

<iframe src="https://open.spotify.com/embed/track/1HsdxCFq6A3nv8xHe6HI0V" width="300" height="380" frameborder="0" allowtransparency="true" allow="encrypted-media"></iframe>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:dont-care" role="doc-endnote">
      <p>I don’t really care if anyone is reading my weeknotes. Personally I‘m unlikely to go out of my way to read others’ unless they’re already in my RSS reader. But these are more for me than for you. <a href="#fnref:dont-care" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
    <li id="fn:podcast" role="doc-endnote">
      <p>It was the latest episode of <a href="https://www.patreon.com/jesushchris">Chris Hannah’s podcast</a> where he dissects songs from his band <a href="https://propagandhi.com/">Propagandhi</a>. It gets really in the weeds but if you’re already a fan you’d probably enjoy it. <a href="#fnref:podcast" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
    <li id="fn:pissed-jeans" role="doc-endnote">
      <p><a href="https://en.wikipedia.org/wiki/Pissed_Jeans">Pissed Jeans</a> are a hardcore band with songs about — among other mundane topics — losing your hair, getting a massage, and watching R-rated movies. One of my favourites. <a href="#fnref:pissed-jeans" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
  </ol>
</div>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20Weeknotes%202022-W02">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>weeknotes</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            Styling the kbd element
            
        </title>
        <summary>Explaining the CSS I used to make this underrated element look like a physical keycap</summary>
        <pubDate>Sun, 24 Oct 2021 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/styling-the-kbd-element" rel="alternate" type="text/html" title="Styling the kbd element">https://dylanatsmith.com/wrote/styling-the-kbd-element</link>
        <id>https://dylanatsmith.com/wrote/styling-the-kbd-element</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/styling-the-kbd-element</guid>
        <content:encoded>
            <![CDATA[
                <p>To oversimplify, the <code class="language-plaintext highlighter-rouge">&lt;kbd&gt;</code> HTML element represent keypresses. <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd">MDN</a> explains it more thoroughly than I can.</p>

<blockquote>
  <p>The <code class="language-plaintext highlighter-rouge">&lt;kbd&gt;</code> HTML element represents a span of inline text denoting textual user input from a keyboard, voice input, or any other text entry device.</p>
</blockquote>

<p>As a very basic example, you might write some code like this:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>To copy text, highlight it and press <span class="nt">&lt;kbd&gt;</span>⌘<span class="nt">&lt;/kbd&gt;</span> + <span class="nt">&lt;kbd&gt;</span>C<span class="nt">&lt;/kbd&gt;</span>.
</code></pre></div></div>

<p>I like any HTML element that is semantically specific and unambiguous in its usage; <code class="language-plaintext highlighter-rouge">&lt;kbd&gt;</code> fits the bill perfectly. It’s such a meta HTML thing that it probably won’t surprise you to learn it was <a href="https://datatracker.ietf.org/doc/html/rfc1866#section-5.7.1.4">standardised in HTML 2.0</a> in 1995.</p>

<p>What I like most about <code class="language-plaintext highlighter-rouge">&lt;kbd&gt;</code>, though, is how well it lends itself to interesting visual styles. It usually represents a single key on a keyboard. Physical and virtual keys are little squares and rectangles. If all you do is add a border to it, you’re most of the way there. Even though I very rarely actually get to use this element on my site, I wanted to dress it up as a bit of an Easter egg.</p>

<p>To steal the code below, highlight it and press <kbd>⌘</kbd> + <kbd>C</kbd> on Mac or <kbd>Ctrl</kbd> + <kbd>C</kbd> on Windows.</p>

<p>(Note this code uses some CSS custom properties specific to my codebase that might look a bit odd but are hopefully named in an understandable way.)</p>

<div class="language-scss highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">kbd</span> <span class="p">{</span>
  <span class="c1">// Set up custom properties for colours so we can switch them in dark mode</span>
  <span class="na">--kbd-color-background</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">color-background-primary</span><span class="p">);</span>
  <span class="c1">// These interpolated variables reference a SCSS map of HSL-based greys</span>
  <span class="na">--kbd-color-border</span><span class="p">:</span>     <span class="si">#{</span><span class="nf">color</span><span class="p">(</span><span class="n">grey</span><span class="o">,</span> <span class="m">80</span><span class="p">)</span><span class="si">}</span><span class="p">;</span>
  <span class="na">--kbd-color-text</span><span class="p">:</span>       <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">color-text-primary</span><span class="p">);</span>

  <span class="c1">// In dark mode, a straight-up inversion doesn’t work for</span>
  <span class="c1">// the “physical” key look so they need to be adjusted</span>
  <span class="k">@media</span> <span class="p">(</span><span class="n">prefers-color-scheme</span><span class="o">:</span> <span class="n">dark</span><span class="p">)</span> <span class="p">{</span>
    <span class="na">--kbd-color-background</span><span class="p">:</span> <span class="si">#{</span><span class="nf">color</span><span class="p">(</span><span class="n">grey</span><span class="o">,</span> <span class="m">55</span><span class="p">)</span><span class="si">}</span><span class="p">;</span>
    <span class="na">--kbd-color-border</span><span class="p">:</span>     <span class="si">#{</span><span class="nf">color</span><span class="p">(</span><span class="n">grey</span><span class="o">,</span> <span class="m">25</span><span class="p">)</span><span class="si">}</span><span class="p">;</span>
    <span class="na">--kbd-color-text</span><span class="p">:</span>       <span class="si">#{</span><span class="nf">color</span><span class="p">(</span><span class="n">grey</span><span class="o">,</span> <span class="m">14</span><span class="p">)</span><span class="si">}</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="c1">// Match the page defaults in light mode but</span>
  <span class="c1">// switch to a light-ish grey in dark mode</span>
  <span class="nl">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">kbd-color-background</span><span class="p">);</span>
  <span class="nl">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">kbd-color-text</span><span class="p">);</span>

  <span class="c1">// Round off the corners like physical keys have</span>
  <span class="nl">border-radius</span><span class="p">:</span> <span class="m">0</span><span class="mi">.25rem</span><span class="p">;</span>

  <span class="c1">// Add a simple border</span>
  <span class="nl">border</span><span class="p">:</span> <span class="m">1px</span> <span class="nb">solid</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">kbd-color-border</span><span class="p">);</span>

  <span class="c1">// A sharp shadow (with no blur) really gives</span>
  <span class="c1">// the old school keyboard look</span>
  <span class="nl">box-shadow</span><span class="p">:</span> <span class="m">0</span> <span class="m">2px</span> <span class="m">0</span> <span class="m">1px</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">kbd-color-border</span><span class="p">);</span>

  <span class="c1">// Remove the text cursor — totally optional</span>
  <span class="c1">// but I wanted it for my hover effect</span>
  <span class="nl">cursor</span><span class="p">:</span> <span class="nb">default</span><span class="p">;</span>

  <span class="c1">// By default, browsers style &lt;kbd&gt; with a monospace typeface</span>
  <span class="nl">font-family</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">font-family-sans-serif</span><span class="p">);</span>

  <span class="c1">// If we do all this with the default font size</span>
  <span class="c1">// (mine is 18px on desktop) it’ll look massive</span>
  <span class="c1">// and bump into lines above and below</span>
  <span class="nl">font-size</span><span class="p">:</span> <span class="m">0</span><span class="mi">.75em</span><span class="p">;</span>

  <span class="c1">// Remove any extra space so I can accurately tweak the padding</span>
  <span class="nl">line-height</span><span class="p">:</span> <span class="m">1</span><span class="p">;</span>

  <span class="c1">// Make narrow numbers and letters look less odd</span>
  <span class="nl">min-width</span><span class="p">:</span> <span class="m">0</span><span class="mi">.75rem</span><span class="p">;</span>
  <span class="c1">// `min-width` doesn’t work on inline elements</span>
  <span class="nl">display</span><span class="p">:</span> <span class="nb">block</span><span class="p">;</span>
  <span class="c1">// Keep the characters centred when narrower than the `max-width`</span>
  <span class="nl">text-align</span><span class="p">:</span> <span class="nb">center</span><span class="p">;</span>

  <span class="c1">// Seemed to look more key-like with more horizontal padding 🤷</span>
  <span class="nl">padding</span><span class="p">:</span> <span class="m">2px</span> <span class="m">5px</span><span class="p">;</span>

  <span class="c1">// These two lines pull the whole element up now that they’re</span>
  <span class="c1">// bottom-heavy due to the `box-shadow`. This looks better</span>
  <span class="c1">// against the cap height of regular paragraph text.</span>
  <span class="nl">position</span><span class="p">:</span> <span class="nb">relative</span><span class="p">;</span>
  <span class="nl">top</span><span class="p">:</span> <span class="m">-1px</span><span class="p">;</span>

  <span class="c1">// This is my favourite part of the whole thing. The key gets</span>
  <span class="c1">// “pushed” down and the shadow gets reduced so it looks like</span>
  <span class="c1">// it might when typing on a physical keyboard.</span>
  <span class="k">&amp;</span><span class="nd">:hover</span> <span class="p">{</span>
    <span class="nl">box-shadow</span><span class="p">:</span> <span class="m">0</span> <span class="m">1px</span> <span class="m">0</span> <span class="m">0</span><span class="mi">.5px</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">kbd-color-border</span><span class="p">);</span>
    <span class="nl">top</span><span class="p">:</span> <span class="m">1px</span><span class="p">;</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20Styling%20the%20kbd%20element">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>CSS</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            The UX of dark mode toggles
            
        </title>
        <summary>Does anybody even click these things?</summary>
        <pubDate>Fri, 22 Oct 2021 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/the-ux-of-dark-mode-toggles" rel="alternate" type="text/html" title="The UX of dark mode toggles">https://dylanatsmith.com/wrote/the-ux-of-dark-mode-toggles</link>
        <id>https://dylanatsmith.com/wrote/the-ux-of-dark-mode-toggles</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/the-ux-of-dark-mode-toggles</guid>
        <content:encoded>
            <![CDATA[
                <p>It’s a sunny Friday morning in London and I have the day off work. I walked the dog early, made myself a nice breakfast, and now I’m sat on the sofa with a mug of hot, black coffee, listening to jazz. I’ve decided to work on my website.</p>

<p>I want to add a colour theme toggle. My site already has light and dark modes, and automatically switches based on the visitor’s operating system settings using <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme"><code class="language-plaintext highlighter-rouge">prefers-color-scheme</code></a>. But some people — for reasons related to visual impairment, readability, or just aesthetic preference — want to change the theme on a case-by-case basis.</p>

<p>The typical way of handling this is to offer a toggle. For example, clicking a 🌙 icon will switch from light to dark and a ☀️ icon will do the opposite. Pretty straightforward. Articles that describe how to implement these toggles will tell you it’s also good practice to keep the visitor’s preference in <code class="language-plaintext highlighter-rouge">localStorage</code> once they’ve clicked a button. This is usually implemented to always take precedence over the OS-level setting, and that’s where it starts to unravel for me.</p>

<p>In theory, yes, learning what people want and giving it to them is good. But I think this persistent approach puts too many assumptions into what that button press actually means. Was the visitor telling you “always give me dark mode no matter what” or were they telling you “give me dark mode for now”?</p>

<p>Let’s say it’s the evening. Your operating system’s auto dark mode hasn’t kicked in yet. You visit a website and find the light background is a little too much. You hit the toggle and get a more readable dark mode. You come back to the same site the next morning and you’re still stuck in dark mode. That stinks.</p>

<p>So now I’m wondering what the best UX is for these things. Here are the options as I see them.</p>

<ol>
  <li><strong>Don’t give the visitor a choice.</strong> Serve a theme based on their operating system setting every time. This will sometimes not be what they want and they will be unhappy.</li>
  <li><strong>Never remember the visitor’s choice.</strong> Serve a theme based on their operating system setting and allow them to override it, but only for that page or visit. They will have to change the theme manually on each subsequent visit if the auto theme is again not what they want.</li>
  <li><strong>Always remember the visitor’s choice.</strong> Serve a theme based on their operating system setting, allow them to override it, then always default to that theme no matter what. They may be served the “wrong” theme for their context on subsequent visits and have to switch back.</li>
  <li><strong>Remember the visitor’s choice for a period of time.</strong> Serve a theme based on their operating system setting, allow them to override it, and default to that theme for the next <em>n</em> hours, days, or weeks. This may have a better chance of getting it “right” next time.</li>
  <li><strong>Allow the visitor to unset their choice.</strong> Serve a theme based on their operating system setting, allow them to override it, default to that choice, but let them switch back to “auto.” <a href="https://adrianroselli.com/">Adrian Roselli’s website</a> does this and it seems to account for the downsides and stress cases quite well.</li>
  <li><strong>Just ask the visitor.</strong> Serve a theme based on their operating system setting, allow them to override it, and ask whether they want that theme all the time or just right now. This introduces a tiny bit of friction — perhaps at the wrong moment — but would have the most accurate results.</li>
</ol>

<p>I’m going to think about this for a while before I decide what to build.</p>

<hr />

<p>Am I missing a better approach? What’s the best theme switching experience you’ve seen on the web? <a href="mailto:dylan@dylanatsmith.com">Email</a> or <a href="https://twitter.com/dylanatsmith/status/1451530563572191236">tweet at</a> me.</p>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20The%20UX%20of%20dark%20mode%20toggles">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>UX</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            They grow up so fast
            
        </title>
        <summary>Some thoughts as our design system hits it tweens.</summary>
        <pubDate>Fri, 13 Aug 2021 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/they-grow-up-so-fast" rel="alternate" type="text/html" title="They grow up so fast">https://dylanatsmith.com/wrote/they-grow-up-so-fast</link>
        <id>https://dylanatsmith.com/wrote/they-grow-up-so-fast</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/they-grow-up-so-fast</guid>
        <content:encoded>
            <![CDATA[
                <p>Our team has been discussing changing some existing design system components this week. The increasing complexity involved got me thinking.</p>

<p>I think our design system is hitting its “tweens.” It’s still immature in a lot of ways — this has been a concerted effort less than 12 months — but we’re now experiencing both growth spurts and growing pains. Finding out some decisions we made aren’t quite fit for purpose or didn’t account for unforeseen scenarios is natural but that doesn’t make dealing with it any easier.</p>

<p>This adds a new factor to prioritisation. We were previously balancing three main areas of work:</p>

<ol>
  <li>Foundational work to enable us (like the solidifying our colour system, etc.)</li>
  <li>Designing and building new components</li>
  <li>Refactoring production code to use components</li>
</ol>

<p>Now there’s a fourth competing concern, or a 3B: Addressing shortcomings of our components.</p>

<p>By that I mean not only updating them to be more appropriate for new design work — while considering the constraints of existing implementations — but also updating them in production.</p>

<p>We’ll need to decide when it’s the right time or important enough to make something better, and when to make do with what we have. And that’s too complex for one person to decide alone; those decisions and tradeoffs need to account for design priorities, engineering priorities, and capacity across both sides.</p>

<p>Design systems are <a href="https://amyhupe.co.uk/articles/the-myth-that-design-systems-solve-easy-problems/">not easy</a>.</p>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20They%20grow%20up%20so%20fast">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>design systems</category>
        
        
            <category>articles</category>
        
      </item>
    
      <item>
        <title>
            
            Minimum meeting length is an antipattern
            
        </title>
        <summary>Could calendar software design away unproductive meetings by removing end times?</summary>
        <pubDate>Tue, 27 Jul 2021 00:00:00 +0000</pubDate>
        <link href="https://dylanatsmith.com/wrote/minimum-meeting-length-is-an-antipattern" rel="alternate" type="text/html" title="Minimum meeting length is an antipattern">https://dylanatsmith.com/wrote/minimum-meeting-length-is-an-antipattern</link>
        <id>https://dylanatsmith.com/wrote/minimum-meeting-length-is-an-antipattern</id>
        <guid isPermaLink="true">https://dylanatsmith.com/wrote/minimum-meeting-length-is-an-antipattern</guid>
        <content:encoded>
            <![CDATA[
                <p>I was in a meeting today that lasted 17 minutes. I know it was exactly 17 minutes because it was such a rare occurence that it surprised me. The meeting was scheduled for 30 minutes (because calendar software) but after the agenda was covered and next steps were clear, we just… ended it.<sup id="fnref:engineers" role="doc-noteref"><a href="#fn:engineers" class="footnote" rel="footnote">1</a></sup></p>

<p><a href="https://en.wikipedia.org/wiki/Parkinson%27s_law">Parkinson’s law</a> tells us that “work expands so as to fill the time available for its completion.” This certainly rings true with my own calendar. Most meetings scheduled for half hour take half an hour or longer.</p>

<p>What if calendar software didn’t require us to define meeting durations or end times? What if the only expectations attendees had were start times and agendas?</p>

<p><img src="/assets/img/articles/2021/endless-meeting.png" alt="View of Google Calendar where a meeting called &quot;Quick sync about that thing&quot; begins at 14:00 and has no end time. The meeting block is stylised by fading out instead of having a solid background colour." /></p>

<p>My hypothesis is that by removing meeting end times and thus minimum lengths, most meetings would end sooner than they otherwise would have been scheduled to.</p>

<p>Some meetings will run longer. Maybe those ones should have been longer in the first place. Maybe they highlight the need for increased communication between the attendees in general. Maybe they replace where there otherwise would have been multiple meetings or prevent the need for follow-up meetings.</p>

<p>My quick design above leaves at least a few unanswered questions.<sup id="fnref:what-product-designers-do-all-day" role="doc-noteref"><a href="#fn:what-product-designers-do-all-day" class="footnote" rel="footnote">2</a></sup> If I was in the design crit where this was presented, I’d be asking:</p>

<ul>
  <li>If someone else tries to schedule a meeting at the same time, does it cause a conflict?</li>
  <li>Should meeting attendees be shown as “busy” to other users trying to schedule conflicting meetings?</li>
  <li>How long should they be shown as busy for? A fixed block of time or some fuzzy time period?</li>
  <li>Is there a default “busy” length for meetings without fixed lengths? Can it be overridden?</li>
  <li>What does this look like on non-Google Calendar services users might have connected, like the iOS Calendar app?</li>
  <li>Can we accommodate situations when a meeting has a known <em>minimum</em> length but total time needed is flexible?</li>
</ul>

<p>Nothing in product is ever as simple as it seems.<sup id="fnref:twitter" role="doc-noteref"><a href="#fn:twitter" class="footnote" rel="footnote">3</a></sup> Still, considering the amount of minutes that could be saved every day across every company using calendar software, this feels like a worthy problem to consider solving. The solution could have significant impact on productivity and, following that line, perhaps even even GDP.</p>

<p>If you liked this, I have <a href="how-to-host-better-meetings">more thoughts on improving meetings</a>.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:engineers" role="doc-endnote">
      <p>It might be worth noting this was a meeting attended only by engineers. For some reason that distinction feels important. <a href="#fnref:engineers" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
    <li id="fn:what-product-designers-do-all-day" role="doc-endnote">
      <p>I’m sending this to my fiancée next time she says I doodle for a living. <a href="#fnref:what-product-designers-do-all-day" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
    <li id="fn:twitter" role="doc-endnote">
      <p>Questions like this are <a href="https://twitter.com/ShitUserStory/status/1419784191521304578">why Twitter is never getting an edit button</a>. <a href="#fnref:twitter" class="reversefootnote" role="doc-backlink">↩</a></p>
    </li>
  </ol>
</div>

                <hr/>
                
                <a href="mailto:dylan@dylanatsmith.com?subject=Re:%20Minimum%20meeting%20length%20is%20an%20antipattern">Reply to Dylan by email</a>
            ]]>
        </content:encoded>
        
            <category>meetings</category>
        
            <category>design</category>
        
        
            <category>articles</category>
        
      </item>
    
  </channel>
</rss>