<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jesse Builds Software</title>
    <link>https://jessemcdowell.ca/</link>
    <description>Recent content 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/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>Making a Health Tracker With GitHub Spark</title>
      <link>https://jessemcdowell.ca/2026/01/making-a-health-tracker-with-github-spark/</link>
      <pubDate>Sat, 31 Jan 2026 12:08:00 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2026/01/making-a-health-tracker-with-github-spark/</guid>
      <description>&lt;p&gt;Over the holiday break I decided to give &lt;a href=&#34;https://github.com/features/spark&#34;&gt;GitHub Spark&lt;/a&gt; a try.&lt;/p&gt;&#xA;&lt;p&gt;GitHub Spark is a new feature in GitHub Copilot that helps you build web applications quickly using AI. The Spark platform is based on React with Tailwind CSS. It also provides user authetication (via GitHub account), and user-specific data storage (via Azure).&lt;/p&gt;&#xA;&lt;p&gt;At the time of this writing it seems like it&amp;rsquo;s still an early version of the platform, so depending on when you&amp;rsquo;re reading this, you may need to do your own research.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Copying Files to AWS ECS Fargate Instance via Base64</title>
      <link>https://jessemcdowell.ca/2026/01/copying-files-to-aws-ecs-fargate-instance-via-base64/</link>
      <pubDate>Sun, 04 Jan 2026 19:57:57 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2026/01/copying-files-to-aws-ecs-fargate-instance-via-base64/</guid>
      <description>&lt;p&gt;I recently needed to copy a few small text files into a container running in AWS Fargate. I assumed it would be an easy matter of copying it through the terminal session, but that is, unfortunately, not the case.&lt;/p&gt;&#xA;&lt;p&gt;I was accessing the containers via the &lt;code&gt;aws ecs execute-command --interactive --comand &amp;quot;bash&amp;quot;&lt;/code&gt; mechanism. If you&amp;rsquo;re not familiar, this is a quick way to get a terminal inside an ECS container running in any cluster. It&amp;rsquo;s especially helpful when you have containers that do not receive incoming traffic from the internet. It is almost like SSH, but it is not exactly SSH. And one of the limitations is that there is no equivalent to &lt;code&gt;scp&lt;/code&gt;. There is also no ability to forward ports, so you can&amp;rsquo;t use it to access SSH either.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Buying Robux for Kids (Roblox)</title>
      <link>https://jessemcdowell.ca/2025/11/Buying-Robux-for-Kids/</link>
      <pubDate>Thu, 27 Nov 2025 09:06:48 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2025/11/Buying-Robux-for-Kids/</guid>
      <description>&lt;p&gt;I recently wrote about &lt;a href=&#34;https://jessemcdowell.ca/2025/09/Minecraft-Store-for-Kids-on-Playstation/&#34;&gt;the system I use to purchase Minecoins for my son&lt;/a&gt;. Not long after I got this figured out, my son informed me that all his friends were playing Roblox, and he would like to start using that now too. Fortunately, the process for Robux is a lot simpler than Minecoins and Minecraft Tokens.&lt;/p&gt;&#xA;&lt;p&gt;Robux are a type of token that you can use to buy stuff in the various Roblox worlds. There are links to buy things everywhere, in your face, all around you, always. This is because Robux are a way for creators in the game to earn money. It&amp;rsquo;s unfortunately difficult for younger children to understand exactly what the big numbers beside cool things mean, or what the impact of buying them is, so I suggest considering how you want to approach this as a parent before dumping your kids into it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Credits for Kids</title>
      <link>https://jessemcdowell.ca/resources/game-credits-for-kids/</link>
      <pubDate>Sun, 02 Nov 2025 14:08:09 -0800</pubDate>
      <guid>https://jessemcdowell.ca/resources/game-credits-for-kids/</guid>
      <description>&lt;p&gt;This is a listing of the various games and how I get credits into them for my kid. Of course these aren&amp;rsquo;t the only possible ways, just the ways that I&amp;rsquo;ve chosen that seem to work for me.&lt;/p&gt;&#xA;&lt;p&gt;I put this list here primarily so that I could use it. I have been getting the various methods mixed up, and futzing around trying to figure it out every time my kid asks is annoying.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Connect to Remote Desktop from Outside Your Home Securely with SSH</title>
      <link>https://jessemcdowell.ca/2025/11/Connect-to-Remote-Desktop-from-Outside-Your-Home-Securely-with-SSH/</link>
      <pubDate>Sun, 02 Nov 2025 09:52:15 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2025/11/Connect-to-Remote-Desktop-from-Outside-Your-Home-Securely-with-SSH/</guid>
      <description>&lt;p&gt;I have a Windows workstation sitting under my desk at home. This is where I do all of my professional development. I like this setup because it keeps my work completely separate from my personal stuff. If I&amp;rsquo;m honest, though, my main reason for buying it was because I poured a glass of water over my development laptop. But now that I have it, I highly recommend it.&lt;/p&gt;&#xA;&lt;p&gt;When I&amp;rsquo;m working at home, I connect to this workstation using Remote Desktop (RDP). It&amp;rsquo;s a fantastic protocol for accessing a Windows machine across a network. It&amp;rsquo;s built in to the operating system, and it&amp;rsquo;s generally pretty smooth. Most times I can&amp;rsquo;t even tell that I&amp;rsquo;m using it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Every Drink on the Phillips LatteGo 5500</title>
      <link>https://jessemcdowell.ca/2025/10/Every-Drink-on-the-Phillips-LatteGo-5500/</link>
      <pubDate>Sun, 05 Oct 2025 20:55:55 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2025/10/Every-Drink-on-the-Phillips-LatteGo-5500/</guid>
      <description>&lt;p&gt;At the end of last year we got ourselves a new coffee maker: the Philips LatteGo 5500. This is a lovely machine. It&amp;rsquo;s a super-automatic espresso maker that grinds beans, pulls espresso shots, and steams milk all on its own. If you fill it with good beans, it can make delicious coffee drinks at home with little effort.&lt;/p&gt;&#xA;&lt;p&gt;The 5500 can make a lot of drinks. I couldn&amp;rsquo;t find a description of what the differences are, so I made my own list. It took months for me to try every drink. This was partially because I prefer iced drinks in hot weather, but also because I didn&amp;rsquo;t want to waste good coffee.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minecraft Store for Kids on Playstation</title>
      <link>https://jessemcdowell.ca/2025/09/Minecraft-Store-for-Kids-on-Playstation/</link>
      <pubDate>Sat, 06 Sep 2025 13:54:26 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2025/09/Minecraft-Store-for-Kids-on-Playstation/</guid>
      <description>&lt;p&gt;My son is getting really into Minecraft right now. It&amp;rsquo;s a game that exercises design, creativity, exploration, and even teaches some basic programming skills. The stock game has quite a lot to do and explore, but at some point it&amp;rsquo;s natural to want more.&lt;/p&gt;&#xA;&lt;p&gt;Minecraft has a built-in store with a wide assortment of extension, skins, and even whole worlds. Some of them are free, but most require some form of credit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Household Organization: Home Assistant on Wall-Mounted Tablet</title>
      <link>https://jessemcdowell.ca/2025/07/Household-Organization-Home-Assistant-on-Wall-Mounted-Tablet/</link>
      <pubDate>Sat, 26 Jul 2025 19:38:41 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2025/07/Household-Organization-Home-Assistant-on-Wall-Mounted-Tablet/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve written before about &lt;a href=&#34;https://jessemcdowell.ca/2025/01/Household-Organization-Hallway-Whiteboard/&#34;&gt;our hallway whiteboard&lt;/a&gt;. It&amp;rsquo;s been helpful, and we still use it, but we are now transitioning to a digital display mounted on our refrigerator.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;kitchen-panel.png&#34; alt=&#34;A picture of a tablet mounted on a refrigerator showing the weather, a calendar, and some other information.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The digital display has two major advantages over the whiteboard. We can access it from anywhere, even outside the house. And it can include dynamic elements that are updated automatically, such as the weather, our calendars, and various bits of information from our home automation system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Favourite Japanese Word</title>
      <link>https://jessemcdowell.ca/2025/06/My-Favourite-Japanese-Word/</link>
      <pubDate>Sat, 28 Jun 2025 23:38:08 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2025/06/My-Favourite-Japanese-Word/</guid>
      <description>&lt;p&gt;I spent a few years studying Japanese with my wife. It was challenging, interesting, and fun. We met a lot of cool people in our classes, some of whom are still good friends. I found it so interesting, in fact, that I have also developed a love of talking about it. Fun for me, and a nuisance for anyone around me.&lt;/p&gt;&#xA;&lt;p&gt;There are a lot of things I could write about, but I&amp;rsquo;m just going to share one Japanese word. It is my favourite word. If I could wave a magic wand and import it into English, I would do so with little thought.&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>My Computer Setup</title>
      <link>https://jessemcdowell.ca/2025/04/My-Computer-Setup/</link>
      <pubDate>Sat, 05 Apr 2025 17:42:45 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2025/04/My-Computer-Setup/</guid>
      <description>&lt;p&gt;For various reasons, I&amp;rsquo;ve had to set up new computers a few times lately. This is still a time-consuming task that I try to avoid, but as I&amp;rsquo;ve been automating more and more of the process, it&amp;rsquo;s getting faster and more consistent. This post is essentially a note to my future self, or any colleagues that want to use this as their baseline for their own setups.&lt;/p&gt;&#xA;&lt;p&gt;Many of the tools I use are free and open source, but some of them are not. Make sure to review and purchase licences where you need to. I&amp;rsquo;ve used most of these things fairly heavily, and am comfortable recommending all of them. It&amp;rsquo;s also easy to remove anything you don&amp;rsquo;t want to use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Architectural Decision: Using Obsidian For Work Notes - 2025-01</title>
      <link>https://jessemcdowell.ca/2025/03/Architectural-Decision-Using-Obsidian-For-Work-Notes/</link>
      <pubDate>Sun, 02 Mar 2025 13:59:08 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2025/03/Architectural-Decision-Using-Obsidian-For-Work-Notes/</guid>
      <description>&lt;p&gt;I have been feeling frustrated with my personal organization of late. I had a bit of time before starting a new project, so I put some time into improving my process. The post below is a simplified version of the notes I took while I looked for alternatives. I&amp;rsquo;m sharing this as an example of how I do research, and as a more realistic example of &lt;a href=&#34;https://jessemcdowell.ca/resources/architectural-report-template/&#34;&gt;the architectural report structure I typically use&lt;/a&gt;, which &lt;a href=&#34;https://jessemcdowell.ca/2023/11/Using-Architectural-Decision-Records/&#34;&gt;I&amp;rsquo;ve written about before&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Case of the Premature Power Outage</title>
      <link>https://jessemcdowell.ca/2025/02/Case-of-the-Premature-Power-Outage/</link>
      <pubDate>Mon, 03 Feb 2025 19:40:52 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2025/02/Case-of-the-Premature-Power-Outage/</guid>
      <description>&lt;p&gt;Many years ago I worked on a large system with a number of interconnected services that had grown organically over the years. As new services were added, they became dependent on each other in ways that nobody on the team fully understood. When our hosting provider announced a planned outage, we had to figure out how to safely shut the system off, and more importantly, how to safely and quickly start it back up again afterward. We had never done either of these things before, so we put a lot of effort in to make sure it would go smoothly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Household Organization: Hallway Whiteboard</title>
      <link>https://jessemcdowell.ca/2025/01/Household-Organization-Hallway-Whiteboard/</link>
      <pubDate>Mon, 06 Jan 2025 21:35:01 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2025/01/Household-Organization-Hallway-Whiteboard/</guid>
      <description>&lt;p&gt;A couple of years ago I received my Makeway kit. It was a kickstarter project that included an assortment of tracks and tricks for marbles, all suspended on a vertical surface by magnets. For this reason, I mounted a large whiteboard (with a metal backing) in the hallway of our apartment.&lt;/p&gt;&#xA;&lt;p&gt;About a year ago, after conducting the &lt;a href=&#34;https://jessemcdowell.ca/2024/11/Abandoning-Household-Organization/&#34;&gt;household organization surveys&lt;/a&gt;, I started using the whiteboard as a physical weekly calendar for my family. I used some thin black masking tape to make a grid that would withstand the whiteboard eraser. I also got some small magnetic dry-erase rectangles to simplify rescheduling common recurring tasks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Encoding Time Series Data</title>
      <link>https://jessemcdowell.ca/2024/12/Encoding-Time-Series-Data/</link>
      <pubDate>Mon, 02 Dec 2024 10:29:50 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2024/12/Encoding-Time-Series-Data/</guid>
      <description>&lt;p&gt;I spent just shy of 9 years working on a suite of products that stored and processed environmental sensor data. This kind of data is naturally stored and processed as a time series. A time series is a set of data points, each with a time and value, and often more. They are common for sensor data, but can be used for pretty much anything that is measured over time such as prices, performance metrics, and analytical data.&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>Exporting to Google Sheets API from C#</title>
      <link>https://jessemcdowell.ca/2024/10/Exporting-to-Google-Sheets-API-from-CSharp/</link>
      <pubDate>Sun, 06 Oct 2024 14:35:38 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2024/10/Exporting-to-Google-Sheets-API-from-CSharp/</guid>
      <description>&lt;p&gt;I recently did a project for a client that needed a way to share a bit of live data with an external organization. He originally asked for a simple website with authentication and an API. I could have built this, but for the frequency and volumes of data they were using, I suggested a simpler approach: a Google Sheet and a recurring job that updates it.&lt;/p&gt;&#xA;&lt;p&gt;Any online spreadsheet is a great way to share a small amount of data. Users can filter, sort, make formulas, export the data, or even write their own integrations. It&amp;rsquo;s also possible (depending on how changes are handled) to manually annotate or override data that&amp;rsquo;s been exported. Implementing all of this in a custom web page is possible, but some of it is pretty tricky.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using WeeChat and weechat-android on Windows 11</title>
      <link>https://jessemcdowell.ca/2024/09/Using-WeeChat-on-Windows-11/</link>
      <pubDate>Thu, 05 Sep 2024 17:43:38 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2024/09/Using-WeeChat-on-Windows-11/</guid>
      <description>&lt;p&gt;Internet Relay Chat (IRC) is an old text-based chat system that, while seemingly in decline, still has many users around the world. It&amp;rsquo;s not as convenient as modern alternatives, but for those of us that are familiar with it, and especially those of us that have friends there, it&amp;rsquo;s still a very viable way to communicate.&lt;/p&gt;&#xA;&lt;p&gt;There are a number of IRC clients available. On windows, &lt;a href=&#34;https://www.mirc.com/&#34;&gt;mIRC&lt;/a&gt; is popular and easy to set up, but it shows its age. &lt;a href=&#34;https://www.irccloud.com/&#34;&gt;IRCCloud&lt;/a&gt; is very convenient, especially if you want to use a mobile device, but it lacks some common features, and you are limited to two servers on the free account. There are other options, of course, but they all have limitations.&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>Writing Code for Better Reviews</title>
      <link>https://jessemcdowell.ca/2024/04/Writing-Code-for-Better-Reviews/</link>
      <pubDate>Wed, 24 Apr 2024 14:37:05 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2024/04/Writing-Code-for-Better-Reviews/</guid>
      <description>&lt;p&gt;I believe code reviews are a high-value activity (which &lt;a href=&#34;https://jessemcdowell.ca/2024/01/Optimal-Code-Reviews/&#34;&gt;I&amp;rsquo;ve written about before&lt;/a&gt;), but they take time and slow down your development process. With a few simple tricks, you can make it easier for reviewers to understand your changes, allowing them to give you better feedback faster. Not only does this save everyone time, but it also improves the quality of your code.&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;#make-your-intentions-understood&#34;&gt;Make your intentions understood&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#group-changes-by-intention-one-intention-at-a-time&#34;&gt;Group changes by intention, one intention at a time&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#break-up-large-changes-into-multiple-reviews&#34;&gt;Break up large changes into multiple reviews&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#avoid-high-noise-low-value-changes&#34;&gt;Avoid high-noise, low-value changes&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#establish-shared-hygiene-to-reduce-noise&#34;&gt;Establish shared hygiene to reduce noise&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#rebase-with-care&#34;&gt;Rebase with care&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#review-your-work-before-asking-others&#34;&gt;Review your work before asking others&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#understand-your-review-tool&#34;&gt;Understand your review tool&lt;/a&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/nav&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;make-your-intentions-understood&#34;&gt;Make your intentions understood&lt;/h2&gt;&#xA;&lt;p&gt;Good commit messages and review titles are important. It may be (and in fact, should be) obvious from your code change what you&amp;rsquo;re trying to do, but a good message is still important. There are lots of cases where someone needs to scan the change list, and good messages make this a lot easier. It also helps your reviewer understand what you&amp;rsquo;re doing.&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>Being Honest and Positive at Work</title>
      <link>https://jessemcdowell.ca/2024/02/Being-Honest-and-Positive-at-Work/</link>
      <pubDate>Wed, 28 Feb 2024 11:37:11 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2024/02/Being-Honest-and-Positive-at-Work/</guid>
      <description>&lt;p&gt;Two things that are important to me are being honest and treating everyone with dignity. However, some situations make it difficult to do both at the same time. It is possible, though. It takes effort, creativity, and a bit of trust, but it gets easier with practice.&lt;/p&gt;&#xA;&lt;p&gt;When I talk about being honest, I actually mean being candid. Candor means both being honest and also communicating in good faith. Many fantasy authors have written about characters who never lie but are also fundamentally dishonest. Candor eliminates this loophole. I push myself to communicate everything that feels important, even if it&amp;rsquo;s uncomfortable or to my own disadvantage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Experience with the Dvorak Keyboard Layout</title>
      <link>https://jessemcdowell.ca/2024/01/My-Experience-with-the-Dvorak-Keyboard-Layout/</link>
      <pubDate>Wed, 31 Jan 2024 09:57:13 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2024/01/My-Experience-with-the-Dvorak-Keyboard-Layout/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been happily using the Dvorak keyboard layout for more than 25 years. I switched because I thought typing faster would be a benefit in my career. I can type faster, and it also reduces the strain on my wrists. It does have some drawbacks though. If you had asked me before writing this post I would have told you that I love it, but now I&amp;rsquo;m not so sure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Optimal Code Reviews</title>
      <link>https://jessemcdowell.ca/2024/01/Optimal-Code-Reviews/</link>
      <pubDate>Thu, 04 Jan 2024 14:11:32 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2024/01/Optimal-Code-Reviews/</guid>
      <description>&lt;p&gt;I am a strong advocate for code reviews. They have many advantages including improving code quality and team communication. On the other hand, they take a lot of time and add yet another delay to the development pipeline. With the wrong team culture, they can create hard feelings and discourage honest collaboration. This is a heavy price to pay, and yet, I&amp;rsquo;ve seen many teams that do them without ever talking about how or why.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Switching from Google Podcasts to Spotify</title>
      <link>https://jessemcdowell.ca/2023/12/Switching-from-Google-Podcasts-to-Spotify/</link>
      <pubDate>Thu, 14 Dec 2023 10:17:07 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2023/12/Switching-from-Google-Podcasts-to-Spotify/</guid>
      <description>&lt;p&gt;Back in September &lt;a href=&#34;https://blog.youtube/news-and-events/podcast-destination-on-youtube-music/&#34;&gt;Google announced that Google Podcasts will be shut down&lt;/a&gt;. It is supposed to remain available until April of 2024 and be available for exporting data until June. I chose not to wait.&lt;/p&gt;&#xA;&lt;p&gt;I have been using Spotify happily for music for years now, so I decided to give it a try. I didn&amp;rsquo;t do any research or look for other options. I had some confidence that it would be a reasonable option however because Spotify has been putting a lot of effort and money into its podcast offering.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing Pragmatic Potato Software</title>
      <link>https://jessemcdowell.ca/2023/11/Announcing-Pragmatic-Potato-Software/</link>
      <pubDate>Thu, 30 Nov 2023 14:07:52 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2023/11/Announcing-Pragmatic-Potato-Software/</guid>
      <description>&lt;p&gt;I am very pleased to announce the launch of my new company, &lt;a href=&#34;https://pragmaticpotato.com/&#34;&gt;Pragmatic Potato Software&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Pragmatic Potato is helping customers with software architecture and development. We can help with architectural investigations, software design, development process, interviewing, and even development. You can find out more about the kind of services we&amp;rsquo;re offering on our spiffy new website: &lt;a href=&#34;https://pragmaticpotato.com/services/&#34;&gt;pragmaticpotato.com/services/&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re interested, &lt;a href=&#34;https://pragmaticpotato.com/contact/&#34;&gt;contact me through my website&lt;/a&gt;. Let&amp;rsquo;s have a quick conversation and see if we can help you.&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>This Blog: Hexo-generated static site hosted on GitHub Pages</title>
      <link>https://jessemcdowell.ca/2023/11/This-Blog-Hexo-generated-static-site-hosted-on-GitHub-Pages/</link>
      <pubDate>Wed, 01 Nov 2023 10:34:32 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/11/This-Blog-Hexo-generated-static-site-hosted-on-GitHub-Pages/</guid>
      <description>&lt;p&gt;A couple of years ago I switched this blog from a WordPress site hosted on GoDaddy to a statically generated site. The new setup is faster, more secure, and cheaper to operate. And it was easy to do!&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;#static-vs-dynamic-websites&#34;&gt;Static vs Dynamic websites&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#comments-and-contact-pages-on-a-static-website&#34;&gt;Comments and contact pages on a static website&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#https-and-custom-domains&#34;&gt;HTTPS and custom domains&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#price-of-static-websites&#34;&gt;Price of static websites&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#creating-editing-and-publishing-posts&#34;&gt;Creating, editing, and publishing posts&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#converting-from-wordpress-to-hexo&#34;&gt;Converting from WordPress to Hexo&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;static-vs-dynamic-websites&#34;&gt;Static vs Dynamic websites&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://wordpress.org/&#34;&gt;WordPress&lt;/a&gt; is a very popular blogging platform. You can use it hosted on WordPress.com, or any number of other web providers that offer it. Because it&amp;rsquo;s open source, you can also host it yourself easily. In my case, I had a virtual server running in GoDaddy where I maintained the installation myself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Review: Grammarly Premium</title>
      <link>https://jessemcdowell.ca/2023/10/Review-Grammarly-Premium/</link>
      <pubDate>Thu, 19 Oct 2023 08:50:37 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/10/Review-Grammarly-Premium/</guid>
      <description>&lt;p&gt;I spend a fair bit of time working on this blog. More than I probably should given my unimpressive view metrics. It does help me to crystalize my thoughts and practice articulating points that are important to me, but I&amp;rsquo;m spending an awful lot of time doing it. Ultimately, I write because I enjoy writing. I just wish I could spend less time per post.&lt;/p&gt;&#xA;&lt;p&gt;For a while there I was getting hammered by ads from &lt;a href=&#34;https://www.grammarly.com/&#34;&gt;Grammarly&lt;/a&gt;, and in a fit of frustration, or maybe I was avoiding yet another hour of editing, I signed up. I didn&amp;rsquo;t start with the free trial, I went straight to Grammarly Premium expecting that it would be great.&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>Case of the Slow Matchmaking Routine</title>
      <link>https://jessemcdowell.ca/2023/09/Case-of-the-Slow-Matchmaking-Routine/</link>
      <pubDate>Tue, 05 Sep 2023 15:08:46 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/09/Case-of-the-Slow-Matchmaking-Routine/</guid>
      <description>&lt;p&gt;The most challenging bug I&amp;rsquo;ve ever fixed was a performance issue in a matchmaking routine. Matchmaking is the process of finding players to compete against each other in a video game. An excellent matchmaking algorithm doesn&amp;rsquo;t just stick players together randomly; it tries to make the game more fun by balancing power levels and preventing anyone from waiting too long for a match.&lt;/p&gt;&#xA;&lt;p&gt;About six weeks before a game I was working on was scheduled to be feature complete, we discovered our routine couldn&amp;rsquo;t handle our load targets. The rate at which players were being removed from the matchmaking queue started dropping during load tests. Things got bad quickly once it fell below the rate at which we inserted them. Not only would this cause a bad user experience if we didn&amp;rsquo;t fix it, but it made it impossible for us to drive enough traffic to our game servers to test that they could handle the projected load. The company wasn&amp;rsquo;t going to release a game that could crash if it was successful, so we had to fix this issue, and we had to fix it quickly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Regarding Test Coverage Targets</title>
      <link>https://jessemcdowell.ca/2023/08/Regarding-Test-Coverage-Targets/</link>
      <pubDate>Mon, 21 Aug 2023 11:28:52 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/08/Regarding-Test-Coverage-Targets/</guid>
      <description>&lt;p&gt;Unit tests are undeniably a good thing, but you only realize the full benefits of them when you have enough tests that you can make changes with confidence. If you can make a change, run your tests, and be comfortable enough to ship your changes, then you and your team can get work done much faster. More drastic changes to the shared code become feasible. Life gets better.&lt;/p&gt;&#xA;&lt;p&gt;It makes sense then that teams want to ensure that code is sufficiently covered with tests. Nobody wants to count tests every time they review a PR, so tools are added that check it automatically. It&amp;rsquo;s then a small step to set a coverage target, and suddenly you have a machine checking every PR for tests. This all makes sense to me, and it was my first instinct too. I don&amp;rsquo;t recommend this approach any more.&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>Architectural Report Template</title>
      <link>https://jessemcdowell.ca/resources/architectural-report-template/</link>
      <pubDate>Tue, 08 Aug 2023 00:00:00 -0700</pubDate>
      <guid>https://jessemcdowell.ca/resources/architectural-report-template/</guid>
      <description>&lt;h1 id=&#34;how-to-boil-the-ocean---2023-08&#34;&gt;How to Boil the Ocean - 2023-08&lt;/h1&gt;&#xA;&lt;h2 id=&#34;purpose&#34;&gt;Purpose&lt;/h2&gt;&#xA;&lt;p&gt;This document recommends an approach to boiling the ocean. It is intended to be used during discussions with potential partners for the project. It is written for the CTO and the PMO.&lt;/p&gt;&#xA;&lt;h2 id=&#34;context&#34;&gt;Context&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Over 80% of internationally traded goods travel by sea. Marine freight is exposed to many dangers including navigational challenges, extreme weather, and piracy.&lt;/li&gt;&#xA;&lt;li&gt;The sea level has been steadily rising due to human-caused climate change.  As the ocean continues to rise, estimates anticipate hundreds of millions to billions of people will be displaced unless additional measures are taken.&lt;/li&gt;&#xA;&lt;li&gt;The earth is simultaneously affected by an international housing shortage and the continual loss of essential farm land.&lt;/li&gt;&#xA;&lt;li&gt;Eliminating the world&amp;rsquo;s oceans can simplify or make new solutions available to all of the problems above, which could in turn create numerous opportunities for raising and generating capital.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;recommendation&#34;&gt;Recommendation&lt;/h2&gt;&#xA;&lt;p&gt;Use barges with nuclear fission reactors to boil the ocean water. As the sea level drops, the barges can be moved to ensure they stay submerged in water.&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>Horizontal One-on-Ones and Talking Practice</title>
      <link>https://jessemcdowell.ca/2023/07/Horizontal-One-on-Ones-and-Talking-Practice/</link>
      <pubDate>Tue, 18 Jul 2023 15:35:11 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/07/Horizontal-One-on-Ones-and-Talking-Practice/</guid>
      <description>&lt;p&gt;When I was promoted to the role of architect it was a new role in the organization. The stakeholders I had to work with were not used to talking to an architect, and weren&amp;rsquo;t sure what I did or when I should be involved in a conversation. I started using recurring one-on-one meetings with each stakeholder separately. It worked great. It&amp;rsquo;s also made me a much better communicator.&lt;/p&gt;&#xA;&lt;p&gt;One of the first and most important lessons I learned as an architect is that you can&amp;rsquo;t design a good architecture without a good understanding of its requirements. You can design a system in a vacuum, it&amp;rsquo;s also much easier to do it this way, but it&amp;rsquo;s far less likely to serve the organization. Gathering, validating, and documenting technical requirements is tough work, but an essential part of being an architect.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Case of the Appearing Users</title>
      <link>https://jessemcdowell.ca/2023/07/Case-of-the-Appearing-Users/</link>
      <pubDate>Mon, 10 Jul 2023 13:18:09 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/07/Case-of-the-Appearing-Users/</guid>
      <description>&lt;p&gt;A couple of years after solving &lt;a href=&#34;https://jessemcdowell.ca/2023/05/Case-of-the-Disappearing-Users&#34;&gt;The Case of The Disappearing Users&lt;/a&gt;, I was assigned another high profile bug where new users were being spontaneously created. They were being generated without a name or any profile information, but still filling up space in lists and appearing on schedules. A couple of other developers had tried fixing it but had no luck, so it was assigned to me.&lt;/p&gt;&#xA;&lt;p&gt;I went through my usual bag of tricks: searched recent changes, searched for insert statements, tried to create empty users manually (and couldn&amp;rsquo;t). Nothing worked, and it was looking pretty hopeless.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating Non-Non-Downtime Upgrades in Kubernetes with ArgoCD</title>
      <link>https://jessemcdowell.ca/2023/06/Automating-Non-Non-Downtime-Upgrades-in-Kubernetes-with-ArgoCD/</link>
      <pubDate>Mon, 26 Jun 2023 10:55:24 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/06/Automating-Non-Non-Downtime-Upgrades-in-Kubernetes-with-ArgoCD/</guid>
      <description>&lt;p&gt;I recently worked on a project to move a complicated legacy application onto Kubernetes. It was quite an undertaking, but in the end we were successful. One of the biggest challenges was figuring out how to automate our legacy deployment process, one where the whole application has to be stopped completely for schema upgrades to run.&lt;/p&gt;&#xA;&lt;p&gt;The normal &amp;ldquo;Kubernetes way&amp;rdquo; to upgrade an application is by changing the &lt;a href=&#34;https://kubernetes.io/docs/concepts/workloads/controllers/deployment/&#34;&gt;Deployment resource&lt;/a&gt;. With its default &lt;code&gt;RollingUpdate&lt;/code&gt; strategy it will delete a pod with the old definition, start a pod with the new definition, wait for it to be healthy, then repeat continuously until the change is fully applied.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Importance of Alignment</title>
      <link>https://jessemcdowell.ca/2023/06/Importance-of-Alignment/</link>
      <pubDate>Mon, 12 Jun 2023 13:56:44 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/06/Importance-of-Alignment/</guid>
      <description>&lt;p&gt;Unless you work entirely alone, alignment is a big deal. When you are well aligned with your company&amp;rsquo;s goals you are a more valuable employee. When you are well aligned with your manager they can keep you on the right track and be an ally against obstacles. When you are well aligned with your peers you can keep each other focused on the most important work.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, when you have poor alignment you can see all sorts of problems. When teams are misaligned they can undermine each other&amp;rsquo;s efforts. When you are misaligned with your manager you can find yourself being over managed or left out to dry when things get rough. When you are not aligned with the goals of your organization you miss opportunities to demonstrate your skills and advance your career.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Polyglot Unconference 2023</title>
      <link>https://jessemcdowell.ca/2023/05/Polyglot-Unconference-2023/</link>
      <pubDate>Wed, 31 May 2023 22:22:23 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/05/Polyglot-Unconference-2023/</guid>
      <description>&lt;p&gt;I recently had the pleasure of attending the 2023 Polyglot Unconference in Vancouver, put on by the &lt;a href=&#34;https://www.polyglotsoftware.com/&#34;&gt;Polyglot Software Association&lt;/a&gt;. I&amp;rsquo;ve been attending these for years. It is my favourite local conference.&lt;/p&gt;&#xA;&lt;p&gt;An &lt;a href=&#34;https://en.wikipedia.org/wiki/Unconference&#34;&gt;unconference&lt;/a&gt;, sometimes called an open spaces conference, is a participant-driven event where attendees choose the topics of discussion and provide the content themselves. They are meant to be open and inviting, and build interpersonal relationships. This year was no exception.&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>Is the Bug Fun?</title>
      <link>https://jessemcdowell.ca/2023/05/Is-the-Bug-Fun/</link>
      <pubDate>Mon, 15 May 2023 10:47:52 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/05/Is-the-Bug-Fun/</guid>
      <description>&lt;p&gt;There are many things about producing video games that are surprising, but one of the weirdest has to be the approach to bugs. Like any piece of software, bugs are found through testing or user reports, triaged, then assigned to developers. Unlike normal business software they also ask the question, &amp;ldquo;is the bug fun?&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;There are plenty of unintended features (bugs) in games that became beloved. Attack combos were an accident in Street Fighter II, but they became so popular that they are a part of basically every fighting game now. Rocket jumps are another example. The internet is full of examples.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Case of the Disappearing Users</title>
      <link>https://jessemcdowell.ca/2023/05/Case-of-the-Disappearing-Users/</link>
      <pubDate>Mon, 01 May 2023 08:26:25 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/05/Case-of-the-Disappearing-Users/</guid>
      <description>&lt;p&gt;Many years ago I worked on a program that had a serious problem: the users in one customer&amp;rsquo;s system were getting deleted periodically. When a user was deleted, any data linked with them was also deleted. We could restore the data from backups, but it was a difficult process, and having a system that loses data wasn&amp;rsquo;t great for our reputation, so we wanted to resolve it quickly. Our VP of development tried to find the issue first, but after a day without any progress he assigned the issue to me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Fix a Bug</title>
      <link>https://jessemcdowell.ca/2023/04/How-to-Fix-a-Bug/</link>
      <pubDate>Mon, 24 Apr 2023 08:50:00 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2023/04/How-to-Fix-a-Bug/</guid>
      <description>&lt;p&gt;Building applications can be tricky, and it&amp;rsquo;s inevitable that mistakes will be made. As a result, we programmers spend a lot of time fixing bugs. Sometimes they are easy, but sometimes they can be pretty tough to figure out.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve fixed a lot of bugs in my career, and to be honest with you, I usually enjoy the process. These days I am typically assigned the super urgent bugs that nobody else can figure out, and I kind of like it that way. I don&amp;rsquo;t get me wrong, I don&amp;rsquo;t like the bugs being there, but I enjoy being helpful and figuring out tough problems. I also think my successes have helped improve my reputation which is always a good thing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Report a Bug</title>
      <link>https://jessemcdowell.ca/2023/03/How-to-Report-a-Bug/</link>
      <pubDate>Fri, 10 Mar 2023 21:40:00 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2023/03/How-to-Report-a-Bug/</guid>
      <description>&lt;p&gt;Nobody likes bugs, least of all programmers. No matter how hard we try to catch them early, some will always escape into circulation. Until computers are smart enough to do what we meant instead of what we said, users are going to keep finding bugs, and we&amp;rsquo;re going to keep fixing them.&lt;/p&gt;&#xA;&lt;p&gt;Before a bug is fixed, it needs to be reported. Unfortunately it&amp;rsquo;s not uncommon to receive incomplete reports. We can spend a lot of time hunting and making guesses, and sometimes that&amp;rsquo;s enough, but if we can&amp;rsquo;t figure out the problem it&amp;rsquo;s pretty hard to fix it. This can be especially unfortunate when the stakes are high, and oddly, this is when it also seems to be the most common.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Breaking Past Senior Developer</title>
      <link>https://jessemcdowell.ca/2021/01/breaking-past-senior-developer/</link>
      <pubDate>Fri, 29 Jan 2021 19:45:00 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2021/01/breaking-past-senior-developer/</guid>
      <description>&lt;p&gt;Developing software is an excellent career. Software has touched almost every aspect of our world, and its impact is always expanding. Many new things have become possible because of software, things that couldn&amp;rsquo;t have been dreamed of even ten years ago. The industry is continuing to expand. Tools are getting better. New opportunities are appearing everywhere&amp;hellip; So why haven&amp;rsquo;t you gotten a promotion in ten years?&lt;/p&gt;&#xA;&lt;p&gt;In the early days of my career, I got new responsibilities, promotions, and raises fairly regularly. It took a bit of luck, a lot of hard work, and a few years (but not very many years), to work my way up to a senior developer position. Senior means different things at different places, but eventually I got to a place where there was no easy next step, and I had a good number of peers in exactly the same position.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Licence</title>
      <link>https://jessemcdowell.ca/licence/</link>
      <pubDate>Mon, 21 Dec 2020 21:28:15 -0800</pubDate>
      <guid>https://jessemcdowell.ca/licence/</guid>
      <description>&lt;p&gt;Unless otherwise stated, all content on this blog (jessemcdowell.ca) is licensed with the following terms:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All text and images are licensed under a &lt;a href=&#34;https://creativecommons.org/licenses/by-nc/4.0/&#34;&gt;Creative Commons Attribution-NonCommercial 4.0 International License&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;All source code snippets are licensed under the MIT License.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;mit-licence&#34;&gt;MIT Licence&lt;/h2&gt;&#xA;&lt;p&gt;Copyright (c) 2025 Jesse McDowell&lt;/p&gt;&#xA;&lt;p&gt;Permission is hereby granted, free of charge, to any person obtaining a copy&#xA;of this software and associated documentation files (the &amp;ldquo;Software&amp;rdquo;), to deal&#xA;in the Software without restriction, including without limitation the rights&#xA;to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#xA;copies of the Software, and to permit persons to whom the Software is&#xA;furnished to do so, subject to the following conditions:&lt;/p&gt;</description>
    </item>
    <item>
      <title>About Me</title>
      <link>https://jessemcdowell.ca/about/</link>
      <pubDate>Mon, 21 Dec 2020 00:00:00 -0800</pubDate>
      <guid>https://jessemcdowell.ca/about/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m a software architect and developer. I enjoy building awesome software with awesome people, and making the world a better place while doing it. I love learning, and I enjoy solving tough problems.&lt;/p&gt;&#xA;&lt;img src=&#34;231117-5-350x525.webp&#34; width=&#34;350&#34; style=&#34;float: left; margin: 0 10px 10px 0; max-width: 50%;&#34;&gt;&#xA;&lt;p&gt;I have worked in many areas of development, in everything from small startups to large established businesses. I am currently operating my own company &lt;a href=&#34;https://pragmaticpotato.com/&#34;&gt;Pragmatic Potato Software&lt;/a&gt; where I help teams design and build software.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Brewing Your Own Iced Tea</title>
      <link>https://jessemcdowell.ca/2018/06/brewing-your-own-iced-tea/</link>
      <pubDate>Wed, 13 Jun 2018 21:29:59 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2018/06/brewing-your-own-iced-tea/</guid>
      <description>&lt;p&gt;There are few things more refreshing than a cold glass of good iced tea. I&amp;rsquo;ve tried iced tea from a lot of places, but the best I&amp;rsquo;ve had to this day is my own recipe. It&amp;rsquo;s so easy that I can&amp;rsquo;t in good conscience keep it secret. It&amp;rsquo;s also far cheaper than anything you can buy in a can or bottle, and a lot healthier because it doesn&amp;rsquo;t require any kind of sweetener. The only down side is that it takes a few hours to cool.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Infiltrating an Organization (or: Joining a New Team)</title>
      <link>https://jessemcdowell.ca/2016/08/infiltrating-an-organization/</link>
      <pubDate>Wed, 31 Aug 2016 22:23:42 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2016/08/infiltrating-an-organization/</guid>
      <description>&lt;p&gt;It takes some time to integrate into a new team. I always feel like an outsider at first. As I build friendships and trust, I&amp;rsquo;m able to contribute with increasing effectiveness. Having noticed some patterns, I&amp;rsquo;ve been able to make the process faster and smoother using a few simple tricks.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Tuckman%27s_stages_of_group_development&#34;&gt;Tuckman&amp;rsquo;s Stages of Group Development&lt;/a&gt; describe what happens when a team is formed. His theory has four stages: forming, storming, norming, and performing. As I stared writing this post, I noticed that the stages I was describing lined up fairly well with his. It&amp;rsquo;s important to note that I&amp;rsquo;m talking about joining an existing team, where he talks about a team being formed entirely from new people.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why I Only Drink Loose Tea</title>
      <link>https://jessemcdowell.ca/2014/06/why-i-only-drink-loose-tea/</link>
      <pubDate>Sun, 01 Jun 2014 15:47:35 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2014/06/why-i-only-drink-loose-tea/</guid>
      <description>&lt;p&gt;When I was a child, I drank tea because my parents wouldn&amp;rsquo;t let me drink coffee. I would soak a tea bag in hot water until it made a dark, bitter liquid, then dump in milk and sugar until it was overly sweet, and mostly flavourless. I would sip it to fit in with adults, but I wouldn&amp;rsquo;t say that it was something I enjoyed.&lt;/p&gt;&#xA;&lt;p&gt;As a young adult, I tried loose tea on the advice of a friend. It was a totally different drink. Black tea tasted rich and warming. Earl grey had a wonderfully soothing aroma. Green tea had a nourishing earthy taste that made me feel good when I drank it. More importantly, there was very little bitterness, so I could skip the milk and sugar, and enjoy the flavours even more.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Controller Led Navigation in Angular</title>
      <link>https://jessemcdowell.ca/2014/04/controller-led-navigation-in-angular/</link>
      <pubDate>Tue, 01 Apr 2014 15:59:35 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2014/04/controller-led-navigation-in-angular/</guid>
      <description>&lt;p&gt;I recently tried &lt;a href=&#34;https://angularjs.org/&#34;&gt;AngularJS&lt;/a&gt; for a pet project. I watched &lt;a href=&#34;https://www.youtube.com/watch?v=i9MHigUZKEM&#34; title=&#34;a great tutorial&#34;&gt;a great tutorial about the platform&lt;/a&gt;, then dove in head first. You can see what I built here: &lt;a href=&#34;https://jessemcdowell.ca/mysterysolver&#34; title=&#34;Mystery Solver&#34;&gt;MysterySolver&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I enjoyed Angular. It was straightforward to use, and allowed me to bang out a lot of functionality without much cumbersome boilerplate code. Jasmine, the testing framework set up in the bootstrap source, was also pretty slick. I really liked how I could nest a bunch of test blocks inside of each other to reuse common setup code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mystery Solver</title>
      <link>https://jessemcdowell.ca/mysterysolver/</link>
      <pubDate>Tue, 18 Mar 2014 10:55:59 -0700</pubDate>
      <guid>https://jessemcdowell.ca/mysterysolver/</guid>
      <description>&lt;p&gt;Mystery Solver is a tool to track answers and help solve a particular board game that is popular in my family.&lt;/p&gt;&#xA;&lt;p&gt;You can use it here:&lt;a href=&#34;https://jessemcdowell.ca/mystery/&#34;&gt;https://jessemcdowell.ca/mystery/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I built it with AngularJS using entirely client-side logic. You can see the source code here: &lt;a href=&#34;https://github.com/jessemcdowell/mysterysolver&#34;&gt;https://github.com/jessemcdowell/mysterysolver&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reading Server Graphs: Connected Users</title>
      <link>https://jessemcdowell.ca/2013/06/reading-server-graphs-connected-users/</link>
      <pubDate>Fri, 14 Jun 2013 22:30:44 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2013/06/reading-server-graphs-connected-users/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve spent the last several years working on multi-user server systems in two different companies. Both those companies had a giant monitor hanging off a wall showing a graph of connected users. It won&amp;rsquo;t give you detailed diagnostic information, but it is a good indicator for the health of your servers, and your product generally. If you learn to notice certain patterns in your user graph, it can also save you precious time when things go wrong.&lt;/p&gt;</description>
    </item>
    <item>
      <title>InstallUtil and BadImageFormatException - Facepalm</title>
      <link>https://jessemcdowell.ca/2012/04/installutil-and-badimageformatexception/</link>
      <pubDate>Sat, 14 Apr 2012 23:09:18 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2012/04/installutil-and-badimageformatexception/</guid>
      <description>&lt;p&gt;I had a frustrating issue at work this week: one that was easy to fix, but embarrassingly difficult to find. I came pretty close to giving up, which is not a solution I often explore, but in the end we figured it out and got everything working.&lt;/p&gt;&#xA;&lt;p&gt;A member of our operations team was installing a Windows service I&amp;rsquo;d built to monitor some stuff in our production environment. I&amp;rsquo;ve made a few windows services in my day, and installed them many times on many machines. I&amp;rsquo;d even installed this one on my development machine with no issue. In our staging environment, however, this is what we got:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Choosing Priorities</title>
      <link>https://jessemcdowell.ca/2012/03/choosing-priorities/</link>
      <pubDate>Thu, 08 Mar 2012 21:50:05 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2012/03/choosing-priorities/</guid>
      <description>&lt;p&gt;During the summer I started a difficult but important journey to reorganize my life. The first step was &lt;a href=&#34;https://jessemcdowell.ca/2011/10/managing-priorities-outside-of-work&#34; title=&#34;organizing my daily tasks&#34;&gt;organizing my daily tasks&lt;/a&gt;. I was successful, but becoming productive again has created new issues.&lt;/p&gt;&#xA;&lt;p&gt;When you change from trying to do everything to doing what&amp;rsquo;s most important, you need to decide what important means. Figuring this out for myself has proven difficult. I still don&amp;rsquo;t have all the answers, but I am constantly making progress.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sharpening The Saw</title>
      <link>https://jessemcdowell.ca/2011/10/sharpening-the-saw/</link>
      <pubDate>Mon, 24 Oct 2011 18:49:26 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2011/10/sharpening-the-saw/</guid>
      <description>&lt;p&gt;One of the best things about working in the software business is the high rate of change. Not only do we work with machines that radically change in capability every few years, but new techniques and technologies are constantly appearing on the scene. It is a fascinating new frontier that never gets dull.&lt;/p&gt;&#xA;&lt;p&gt;One of the worst things about working in the software business is the high rate of change. If you only focus on your job and stop paying attention, you could wake up one day unemployed with an obsolete skill set. Keeping up to date is a lot of work, and it becomes harder every year.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing Priorities Outside of Work</title>
      <link>https://jessemcdowell.ca/2011/10/managing-priorities-outside-of-work/</link>
      <pubDate>Thu, 06 Oct 2011 19:55:07 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2011/10/managing-priorities-outside-of-work/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been fortunate to take some serious down time during the summer. After working pretty much non-stop for ten years, things have piled up. I took some time to rest, then got to work on some personal projects that have been neglected far too long.&lt;/p&gt;&#xA;&lt;p&gt;What I&amp;rsquo;ve learned, however, is that it takes more than time to get things done. After about a month, pretty much all I&amp;rsquo;d achieved was completing a couple video games, and putting all the things I wanted to do into one very long list.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Doubling Data for Performance Testing</title>
      <link>https://jessemcdowell.ca/2011/08/doubling-data-for-performance-testing/</link>
      <pubDate>Thu, 11 Aug 2011 21:22:26 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2011/08/doubling-data-for-performance-testing/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Or: The Most Impressive T-SQL Script I&amp;rsquo;ve Ever Written&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I was recently working on a new application. After three months in the field, users were starting to complain about performance issues. We had done some limited performance tuning for the first release, and more as part of the second release, but new issues were popping up as more data got entered into the system. We could have continued fixing issues as they came up, one release at a time, but we wanted to get ahead of the problem, and the client wanted to know that the system would remain usable without developer intervention for a few years at least.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Critical Path</title>
      <link>https://jessemcdowell.ca/2011/06/the-critical-path/</link>
      <pubDate>Sat, 25 Jun 2011 09:58:08 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2011/06/the-critical-path/</guid>
      <description>&lt;p&gt;For the last ten years, if you had asked, I would have told you with some conviction that a &amp;ldquo;critical path&amp;rdquo; is a kind of test script that tests the essential functionality of a system. If the app passes it&amp;rsquo;s critical path test, I would have said, it may not delight users, but it&amp;rsquo;s unlikely that they&amp;rsquo;ll storm your basement with torches and pitchforks.&lt;/p&gt;&#xA;&lt;p&gt;It came up at work during a discussion about interview questions. My colleague was both proud and surprised to have been the only person interviewed for his position that had known what it really means.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Consulting - A Brave New World</title>
      <link>https://jessemcdowell.ca/2011/05/consulting-a-brave-new-world/</link>
      <pubDate>Mon, 23 May 2011 22:20:41 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2011/05/consulting-a-brave-new-world/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve taken a big step in my career. I&amp;rsquo;ve become a software consultant.&lt;/p&gt;&#xA;&lt;p&gt;The decision to leave my job of three and a half years wasn&amp;rsquo;t an easy one. I was working with some fantastic people, building the best software we could, but at the end of the day I wasn&amp;rsquo;t learning. The work was challenging, but the challenges were mostly non-technical. In this business, if you&amp;rsquo;re not moving forward you may as well lay down and die. I couldn&amp;rsquo;t change my situation, so I said my goodbyes and left.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Average Test</title>
      <link>https://jessemcdowell.ca/2011/04/the-average-test/</link>
      <pubDate>Sat, 30 Apr 2011 16:08:30 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2011/04/the-average-test/</guid>
      <description>&lt;p&gt;I was conducting technical interviews recently for a senior developer position. I like to talk about a bunch of things, but there is one question I particularly enjoy asking each candidate. Write an implementation for this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Average&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It&amp;rsquo;s a great question because it&amp;rsquo;s a simple problem, and anyone that comes through the door should know the formula without having to ask. It&amp;rsquo;s interesting how people react to it sometimes, but I chalk it up to interview jitters. About half the people interviewed answer like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Working Together and Having Fun</title>
      <link>https://jessemcdowell.ca/2011/01/working-together-and-having-fun/</link>
      <pubDate>Sun, 30 Jan 2011 11:46:45 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2011/01/working-together-and-having-fun/</guid>
      <description>&lt;p&gt;We did one of our monthly releases at work this week. Releases can be stressful and frustrating, and take a lot of methodical preparation to get right. It can be thankless work too; the only time a user notices a release is when it goes badly. We do our releases early on a week day to minimize impact, so if anything does go wrong, there&amp;rsquo;s not many bodies around to help out. It&amp;rsquo;s not much fun, but it&amp;rsquo;s important work that needs to be done.&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>Teaching IT</title>
      <link>https://jessemcdowell.ca/2010/12/teaching-it/</link>
      <pubDate>Fri, 24 Dec 2010 22:28:12 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2010/12/teaching-it/</guid>
      <description>&lt;p&gt;My company runs a 24/7 site with a substantial number of users and connections to partner systems all over the world. We do what we can to make the system fault tolerant, but problems can still appear at any time of day or night. Ideally we would have a technical support team that&amp;rsquo;s staffed around the clock, but that not in the cards for now.&lt;/p&gt;&#xA;&lt;p&gt;We used to have a system where anyone that could fix a problem would get a text message, and whoever was closest to a computer would respond. It worked most of the time, but there were some issues. The team creating the tickets would often be unsure of which component was broken, so the issues would hit lots of people who would be unable to help, and it also exposes &lt;a href=&#34;https://en.wikipedia.org/wiki/Diffusion_of_responsibility&#34;&gt;a quirk of human behaviour&lt;/a&gt; that makes us less likely to help when more people are available.&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>64-bit IIS vs. 32-bit Assemblies</title>
      <link>https://jessemcdowell.ca/2010/11/64-bit-iis-vs-32-bit-assemblies/</link>
      <pubDate>Thu, 11 Nov 2010 16:45:38 -0800</pubDate>
      <guid>https://jessemcdowell.ca/2010/11/64-bit-iis-vs-32-bit-assemblies/</guid>
      <description>&lt;p&gt;I found my first 64-bit bug at work. I was moving a windows service built for the &amp;lsquo;Any CPU&amp;rsquo; to a 64-bit server. It started fine on the new server, and gave no indication of poor health in the logs, but one key function was malfunctioning. I&amp;rsquo;m not exactly sure what the cause is, but I know that the hash of any binary file was resulting in the same value. The service does some direct memory manipulation which is a likely culprit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SQLite vs. SQL CE 3.5 with Entity Framework 4</title>
      <link>https://jessemcdowell.ca/2010/10/sqlite-vs-sql-ce-3-5-with-entity-framework-4/</link>
      <pubDate>Sun, 31 Oct 2010 22:19:23 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2010/10/sqlite-vs-sql-ce-3-5-with-entity-framework-4/</guid>
      <description>&lt;p&gt;My wife and I have been taking a Japanese class. I&amp;rsquo;m enjoying it quite a bit, even though learning languages has never been easy for me. I need to work hard to memorize all the new words, and that means lots and lots of practice.&lt;/p&gt;&#xA;&lt;p&gt;My wife bought a pack of index cards. This is what a normal person would do. To me, it seems like defeat. Why use paper when there&amp;rsquo;s a computer in the room? While she&amp;rsquo;s at the store, I grab a white board and sketch out a data model.&lt;/p&gt;</description>
    </item>
    <item>
      <title>IE9 Try and Fail</title>
      <link>https://jessemcdowell.ca/2010/09/ie9-try-and-fail/</link>
      <pubDate>Wed, 22 Sep 2010 20:07:53 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2010/09/ie9-try-and-fail/</guid>
      <description>&lt;p&gt;I decided to give IE9 a try. What&amp;rsquo;s not to like about a browser that&amp;rsquo;s supposed to be faster, cleaner, and support new HTML features?&lt;/p&gt;&#xA;&lt;p&gt;They really nailed the faster and cleaner parts. I didn&amp;rsquo;t find the user interface in IE8 too busy, but seeing the improvement I&amp;rsquo;m happy for the extra space.&lt;/p&gt;&#xA;&lt;p&gt;Plunking a site onto my task bar like it were an application is pretty awesome. There are a couple of websites that I&amp;rsquo;ll do this for without hesitation.I wonder how long it&amp;rsquo;ll take to see adoption of the magic html jump list task extensions. I&amp;rsquo;m not terribly optimistic myself; I&amp;rsquo;m hoping someone will find a way to add tasks and maybe an overlay to sites that don&amp;rsquo;t have them built in.&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>My First Open Source Project</title>
      <link>https://jessemcdowell.ca/2010/09/my-first-open-source-project/</link>
      <pubDate>Sat, 04 Sep 2010 19:52:29 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2010/09/my-first-open-source-project/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been spending time on the first part of the shared resource service project: &amp;ldquo;Receive event invitations by email and send an acceptance email&amp;rdquo;. I hadn&amp;rsquo;t considered the difficulty I would face receiving emails. This is the most important part of the application, and if I can&amp;rsquo;t make it work, there&amp;rsquo;s really no point to continue.&lt;/p&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t want to write my own POP3 library, I&amp;rsquo;ve done that before and it&amp;rsquo;s much more complicated than it appears. Buying a commercial component isn&amp;rsquo;t going to happen either. That left me with one option: To scour the Internet for an open source library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changing From an iPod to a Creative Zen</title>
      <link>https://jessemcdowell.ca/2010/08/changing-from-an-ipod-to-a-creative-zen/</link>
      <pubDate>Tue, 31 Aug 2010 14:22:15 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2010/08/changing-from-an-ipod-to-a-creative-zen/</guid>
      <description>&lt;p&gt;The time finally came for me to replace my iPod with something new. I was using an&lt;a href=&#34;https://support.apple.com/kb/HT1353#clickwheel&#34;&gt;iPod click wheel&lt;/a&gt;that I got as a warranty replacement back in 2004.It was good to me, but I felt that it was time to look at other options.If iTunes ran a little better on my PC, I probably would have just bought another iPod without a second thought.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hardware&#34;&gt;Hardware&lt;/h2&gt;&#xA;&lt;p&gt;It took me quite a while to choose a new device. I did look at the iPod Nano, but they couldn&amp;rsquo;t store quite as much as I wanted.The iPod classic on the other hand is way more storage thanI need, and I prefer the lighter weight, longer battery life, and the improved durability of flash storage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SQL Management Studio Express with VS 2010 Express</title>
      <link>https://jessemcdowell.ca/2010/08/ssmse-with-vs2010-express/</link>
      <pubDate>Tue, 10 Aug 2010 20:16:53 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2010/08/ssmse-with-vs2010-express/</guid>
      <description>&lt;p&gt;I had some fun trying to install SQL Management Studio on my home computer over the weekend. I was successful in the end, but it was a rough journey.&lt;/p&gt;&#xA;&lt;p&gt;These seem to be the things that can lead you into my scenario:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Windows 7&lt;/li&gt;&#xA;&lt;li&gt;Visual Web Developer 2010 Express (which installs SQL Server 2008 Express)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These are the things I ran into trying to install SQL Management Studio (both from an SQL 2008 standard disk, and a download of the express version from the Microsoft web site):&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>
    <item>
      <title>Shared Resource Schedule Service</title>
      <link>https://jessemcdowell.ca/2010/07/shared-resource-schedule-service/</link>
      <pubDate>Wed, 28 Jul 2010 21:53:02 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2010/07/shared-resource-schedule-service/</guid>
      <description>&lt;p&gt;I think I&amp;rsquo;ve got a new project to work on at home. We&amp;rsquo;ve got this problem at work coordinating a few shared resources in Outlook (like a couple of meeting rooms and a projector), but we couldn&amp;rsquo;t find any good solutions out there short of installing Exchange Server.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been wanting to play around with Entity Framework a bit, so this should be a good candidate. Perhaps I can slap a UI on it using Silverlight and Ria Services.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My First Post</title>
      <link>https://jessemcdowell.ca/2010/07/my-first-post/</link>
      <pubDate>Tue, 27 Jul 2010 22:22:21 -0700</pubDate>
      <guid>https://jessemcdowell.ca/2010/07/my-first-post/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve finally gone and done it.&lt;/p&gt;&#xA;&lt;p&gt;To be honest, creating my own blog wasn&amp;rsquo;t foremost in my thoughts until fairly recently. Scott Hanselman had &lt;a href=&#34;https://www.hanselman.com/blog/FoundVideoSocialNetworkingForDevelopersAndMakingYourBlogSuckLess.aspx&#34;&gt;a couple of interesting videos&lt;/a&gt; on his blog that finally convinced me to do it.&lt;/p&gt;&#xA;&lt;p&gt;I hope you like it.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
