<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Design on Jesse Builds Software</title>
    <link>https://jessemcdowell.ca/tags/design/</link>
    <description>Recent content in Design on Jesse Builds Software</description>
    <generator>Hugo</generator>
    <language>en-CA</language>
    <lastBuildDate>Sat, 07 Mar 2026 11:03:30 -0800</lastBuildDate>
    <atom:link href="https://jessemcdowell.ca/tags/design/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>User Experience for Background Processes</title>
      <link>https://jessemcdowell.ca/2026/03/user-experience-for-background-processes/</link>
      <pubDate>Sat, 07 Mar 2026 10:59:00 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2026/03/user-experience-for-background-processes/</guid>
      <description>&lt;p&gt;Done well, background processes are a fantastic way to save time, and more importantly, save focus. Handing off monotonous chores so you can do something more challenging can be a true relief. Unfortunately, background processing isn&amp;rsquo;t always implemented well. When it&amp;rsquo;s done poorly, it can undermine trust in the system.&lt;/p&gt;&#xA;&lt;p&gt;A lack of trust can have negative effects beyond just making people miserable. It can discourage exploration and discovery. It can force painful and inefficient workarounds. It can also cause data to be duplicated, forgotten, corrupted, or lost entirely.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Disambiguating Scalability</title>
      <link>https://jessemcdowell.ca/2025/05/Disambiguating-Scalability/</link>
      <pubDate>Fri, 09 May 2025 19:33:22 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2025/05/Disambiguating-Scalability/</guid>
      <description>&lt;p&gt;Although it was years ago, I still remember the conversation vividly. I was having my regular check-in with the CTO. It was also sunny outside, and the view from his office was particularly nice that day.&lt;/p&gt;&#xA;&lt;p&gt;He asked me, &amp;ldquo;Is our app scalable?&amp;rdquo; After a moment of thought, I answered, &amp;ldquo;Yes.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;I spent the next few years remembering that conversation, wondering what would have happened if I had asked what he meant by scalable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Abandoning Household Organization</title>
      <link>https://jessemcdowell.ca/2024/11/Abandoning-Household-Organization/</link>
      <pubDate>Mon, 04 Nov 2024 07:02:12 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2024/11/Abandoning-Household-Organization/</guid>
      <description>&lt;p&gt;I have been trying to improve the organization of my household for years. My wife and I have been using shared Google calendars for over a decade, but there are plenty of issues we could still improve. It was only minor challenges when it was just the two of us, but once we had a child, the systems we had started to show their limits.&lt;/p&gt;&#xA;&lt;p&gt;I quit my job with the dream of building my own product, but I started without any particular ideas about what to build. It didn&amp;rsquo;t take long before I was considering working on this exact problem. Not only was it something I would benefit from, but it was also something I would find interesting, and could enjoy building and maintaining by myself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rocketbook vs Whiteboard</title>
      <link>https://jessemcdowell.ca/2024/08/Rocketbook-vs-Whiteboard/</link>
      <pubDate>Tue, 06 Aug 2024 22:24:33 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2024/08/Rocketbook-vs-Whiteboard/</guid>
      <description>&lt;p&gt;I have always liked using whiteboards. They are a great tool for communicating, but also great for exploring thoughts and stimulating creativity. There are computerized equivalents, and they have their advantages, but I&amp;rsquo;ve never found them as effective because I get distracted too easily. I can spend more time fiddling with the lines and colours than working on my actual problem.&lt;/p&gt;&#xA;&lt;p&gt;I like whiteboards so much that I bought a stack of them, and an artist&amp;rsquo;s portfolio bag to carry them around. I imagined popping out a few drawings at a meeting, or handing boards around for a creative session. I still love the idea, but in more than twenty years I&amp;rsquo;ve never even taken them out of the house.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Pragmatic Potato Tech Stack</title>
      <link>https://jessemcdowell.ca/2024/06/Pragmatic-Potato-Tech-Stack/</link>
      <pubDate>Mon, 24 Jun 2024 12:02:43 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2024/06/Pragmatic-Potato-Tech-Stack/</guid>
      <description>&lt;p&gt;I &lt;a href=&#34;https://jessemcdowell.ca/2023/11/Announcing-Pragmatic-Potato-Software/&#34;&gt;recently launched my new company&lt;/a&gt;, &lt;a href=&#34;https://pragmaticpotato.com/&#34;&gt;Pragmatic Potato Software Inc&lt;/a&gt;. The creation of a company itself is pretty easy, but setting up everything you need to do business can become overwhelming quickly. There are a lot of compelling options available, each promising the moon. It&amp;rsquo;s not that simple though.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m going to be writing about the technology stack I&amp;rsquo;m using to run my company, and why I made the choices I did. There is a lot more to a company than its technology, but I&amp;rsquo;m not an expert in setting those up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cross-Cutting Concerns - Ten Approaches</title>
      <link>https://jessemcdowell.ca/2024/05/Cross-Cutting-Concerns/</link>
      <pubDate>Mon, 27 May 2024 13:18:08 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2024/05/Cross-Cutting-Concerns/</guid>
      <description>&lt;p&gt;One often (and ironically) repeated rule in programming is: don&amp;rsquo;t repeat yourself. We repeat it so much we even have an abbreviation: DRY. There are good reasons for this advice. Duplicating and modifying code can be a quick and easy way to get a feature done, but it can also lead to problems over time. It&amp;rsquo;s harder to understand code when the valuable logic is mixed with reams of low-value boilerplate. Subtle differences can also sneak in, leading to inconsistent behaviour across the application. Things get even more difficult if you want to make a change.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The True Cost of Dependencies</title>
      <link>https://jessemcdowell.ca/2024/03/The-True-Cost-of-Dependencies/</link>
      <pubDate>Wed, 27 Mar 2024 15:35:10 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2024/03/The-True-Cost-of-Dependencies/</guid>
      <description>&lt;p&gt;I used to use Getform for a contact form on &lt;a href=&#34;https://pragmaticpotato.com&#34;&gt;my consulting company website&lt;/a&gt;. I recently received an email from them announcing that their free tier was dropping from 50 submissions per month to a lifetime limit of 25. This makes it useless for anything more than a trial, and their lowest tier is a more expensive than other similar options.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not here to complain about companies taking back free offerings. I don&amp;rsquo;t like the change, and I wish they&amp;rsquo;d given me more than three days of notice, but they are a businesses, and businesses need to make money. It is a good reminder though: even if something is free to use, it still takes time and effort to integrate, to maintain, and you may occasionally need to throw it out and find a replacement.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Architectural Decision Records</title>
      <link>https://jessemcdowell.ca/2023/11/Using-Architectural-Decision-Records/</link>
      <pubDate>Tue, 21 Nov 2023 17:51:51 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2023/11/Using-Architectural-Decision-Records/</guid>
      <description>&lt;p&gt;Architectural Decision Records are a simple technique that promotes good architectural thinking and better collaboration. They don&amp;rsquo;t need to be big or complicated to be effective, but they do take some time, and are yet another step between setting goals and delivering value. If you use them in the right circumstances they can be a big help.&lt;/p&gt;&#xA;&lt;div class=&#34;table-of-contents&#34;&gt;&#xA;    &lt;nav id=&#34;TableOfContents&#34;&gt;&#xA;  &lt;ul&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#what-is-an-architectural-decision-record&#34;&gt;What is an Architectural Decision Record?&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#why-use-architectural-decision-records&#34;&gt;Why use Architectural Decision Records?&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#when-should-i-use-an-architectural-decision-record-process&#34;&gt;When should I use an Architectural Decision Record process?&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#can-i-introduce-an-architectural-decision-record-process-to-an-existing-project&#34;&gt;Can I introduce an Architectural Decision Record process to an existing project?&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#what-architectural-decision-record-template-should-i-use&#34;&gt;What Architectural Decision Record template should I use?&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#where-should-i-store-architectural-decision-records&#34;&gt;Where should I store Architectural Decision Records?&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#maintaining-architectural-decision-records&#34;&gt;Maintaining Architectural Decision Records&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#summary&#34;&gt;Summary&lt;/a&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/nav&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;what-is-an-architectural-decision-record&#34;&gt;What is an Architectural Decision Record?&lt;/h2&gt;&#xA;&lt;p&gt;An Architectural Decision Record (often abbreviated ADR) is just as the name implies: a document that describes an architectural decision. It can include various details, but should at a minimum describe the problem being solved and the solution that was chosen. It can be a simple text document with a page or two of text, or it can be longer with specific sections that are important to the team.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting Unstuck Without a Rubber Duck</title>
      <link>https://jessemcdowell.ca/2023/10/Getting-Unstuck-Without-a-Rubber-Duck/</link>
      <pubDate>Tue, 03 Oct 2023 18:03:27 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/10/Getting-Unstuck-Without-a-Rubber-Duck/</guid>
      <description>&lt;p&gt;Building software is a mostly creative endeavour, and as such, it sometimes resists progress. No matter how hard you try to push forward, if you are truly stuck, continuing on the same path is unlikely to work. Fortunately, there are a few different tricks you can use to get going again.&lt;/p&gt;&#xA;&lt;h2 id=&#34;take-a-rest&#34;&gt;Take a rest&lt;/h2&gt;&#xA;&lt;p&gt;The easiest way I&amp;rsquo;ve found to get back on track is to take a break. When in the office this was often making a cup of tea or eating a snack in the break room. It could have been a ten-minute walk around the block, but if I&amp;rsquo;m honest, I have rarely tried this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Choosing Powerful Names</title>
      <link>https://jessemcdowell.ca/2023/09/Choosing-Powerful-Names/</link>
      <pubDate>Mon, 18 Sep 2023 12:44:36 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/09/Choosing-Powerful-Names/</guid>
      <description>&lt;p&gt;A junior developer needs to strengthen their technical skills to advance. An intermediate developer needs to strengthen their organizational skills to advance. Senior developers need to master these and also demonstrate that they can move multiple teams forward together. Influencing people (and especially developers) is no easy task, but a positive reputation can do a lot of the heavy lifting. One of the easiest ways to amplify your reputation is to put some extra effort in when choosing a name.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Architectural Report Template</title>
      <link>https://jessemcdowell.ca/2023/08/My-Architectural-Report-Template/</link>
      <pubDate>Tue, 08 Aug 2023 12:45:13 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/08/My-Architectural-Report-Template/</guid>
      <description>&lt;p&gt;As an architect I&amp;rsquo;ve been asked to answer a lot of hard questions. I used to waste time figuring out how to structure my answers, preventing me from getting into a good flow sooner. Now I have a simple template that is easy to use, easy to read, and saves me that wasted time up front.&lt;/p&gt;&#xA;&lt;p&gt;This template works for simple reports that are only a couple of pages, but can easily be adjusted or expanded for more complicated or much larger documents.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Design by Dogma Antipattern</title>
      <link>https://jessemcdowell.ca/2023/07/Design-by-Dogma-Antipattern/</link>
      <pubDate>Sun, 30 Jul 2023 13:41:17 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/07/Design-by-Dogma-Antipattern/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Always use a NoSQL database so your app can scale.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;NoSQL databases can be more scalable, but schema-on-read has other drawbacks. NoSQL databases are much less capable of transactional changes. Relationships are difficult or impossible. Designing schemas to be efficient is much harder, and requires more up-front knowledge about your problem. NoSQL databases are sometimes the right tool for the job, but they are not the right tool for every job.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sustainable Errors</title>
      <link>https://jessemcdowell.ca/2023/05/Sustainable-Errors/</link>
      <pubDate>Mon, 29 May 2023 09:57:05 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/05/Sustainable-Errors/</guid>
      <description>&lt;p&gt;Making a program work for the happy path is not always easy, but given enough time I believe pretty much anyone could do it. When a professional takes on the task however they will make it work for more than just the happy path, and do it with code that is easy to debug, and easy for others to understand and change. Since so much of what we end up dealing with are exceptional flows, we need a concise way to deal with them. Fortunately we have the aptly named exception pattern.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When to Add an ORM Tool</title>
      <link>https://jessemcdowell.ca/2011/01/when-to-add-an-orm-tool/</link>
      <pubDate>Mon, 03 Jan 2011 12:33:03 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2011/01/when-to-add-an-orm-tool/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m working on the code that parses VCalendar data so that it can be processed. I&amp;rsquo;m copying the data I care about into a simple data structure that can represent a calendar request in any format. Any logic that interacts with calendar requests would use this internal structure. I want it to be simple, only having the stuff that I need, but I don&amp;rsquo;t want to completely re-invent the wheel either, so I will use the VCalendar format as a guideline.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Invitations and the VCard Format</title>
      <link>https://jessemcdowell.ca/2010/12/invitations-and-the-vcard-format/</link>
      <pubDate>Thu, 16 Dec 2010 12:59:22 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2010/12/invitations-and-the-vcard-format/</guid>
      <description>&lt;p&gt;My next goal for the Themis project is to parse an invitation from an email. I am starting with invitations generated by MS Outlook because that&amp;rsquo;s my target audience, but a peak inside of a Google Calendar invitation gives me hope that I&amp;rsquo;ll be able to support multiple calendars without much trouble.&lt;/p&gt;&#xA;&lt;p&gt;Outlook invitations are sent in the VCalendar format, content type &amp;ldquo;text/calendar&amp;rdquo;. The standard was published as &lt;a href=&#34;https://www.w3.org/2002/12/cal/rfc2445.html&#34;&gt;RFC 2445&lt;/a&gt; in 1998. It describes a standard layout for calendar data in the VCard format, which is described in &lt;a href=&#34;https://www.w3.org/2002/12/cal/rfc2425.html&#34;&gt;RFC 2425&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Themis: System Design</title>
      <link>https://jessemcdowell.ca/2010/09/themis-system-design/</link>
      <pubDate>Tue, 14 Sep 2010 22:29:40 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2010/09/themis-system-design/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m charging forward on the Shared Resource Schedule Service. There are a lot of things I&amp;rsquo;m getting into place before I start writing code. Don&amp;rsquo;t try to tell me that I&amp;rsquo;m not being agile either, you always need to design a little to write good code. The key to being agile is designing only as much as you need, and being prepared to change your mind later.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-name&#34;&gt;The Name&lt;/h1&gt;&#xA;&lt;p&gt;The first order of business was to choose a name. It helps to know the name before you create a project. I&amp;rsquo;m also hoping to put the source in a public repository right away so that I can talk about the coding process while I build it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shared Resource Service Requirements</title>
      <link>https://jessemcdowell.ca/2010/08/shared-resource-service-requirements/</link>
      <pubDate>Sun, 08 Aug 2010 21:12:53 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2010/08/shared-resource-service-requirements/</guid>
      <description>&lt;p&gt;I want to start my project by dividing up the various things the system needs to do, then put them into the order I plan to approach them. I want to start with requirements that are the most risky and most important to success first, and work my way down the list until I finish with items that are neither risky nor important.&lt;/p&gt;&#xA;&lt;p&gt;This approach gives me several advantages. It&amp;rsquo;s not an issue in this case since I don&amp;rsquo;t have any deadlines to meet, but if this were a professional project and a deadline had to be pushed up, I am more likely to have a product that does the most essential things. If I had a fixed deadline and the project starts running long, I&amp;rsquo;m more likely to have a working product that&amp;rsquo;s just missing a few less important features. In an ideal world those don&amp;rsquo;t happen, but at the end of the project the parts that were risky and/or essential have had the most time to be tested and fine-tuned as the application matures.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
