<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ardalis.com on Ardalis (Steve Smith)</title>
    <link>https://ardalis.com/</link>
    <description>Recent content in Ardalis.com on Ardalis (Steve Smith)</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 07 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://ardalis.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Claude Throttling and the Cloud</title>
      <link>https://ardalis.com/claude-throttling-and-the-cloud/</link>
      <pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/claude-throttling-and-the-cloud/</guid>
      <description>&lt;p&gt;One of the foundational promises of cloud computing is elastic, near-infinite scalability. You pay for what you use, and when demand spikes, the cloud scales with you. It was supposed to be the end of capacity planning, the death of &amp;ldquo;we need to buy more servers&amp;rdquo; conversations. So why is Anthropic—one of the best-funded AI companies in the world, running on the infrastructure of Amazon and Google—throttling its users during peak hours?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Own What Makes You You</title>
      <link>https://ardalis.com/own-what-makes-you-you/</link>
      <pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/own-what-makes-you-you/</guid>
      <description>&lt;p&gt;If you want to stand out, you need to have your own identity. This is true whether you&amp;rsquo;re talking about you, the person, individually, or your business. You can&amp;rsquo;t really have your own &lt;em&gt;distinct&lt;/em&gt; identity if everything about you is just vanilla, off-the-shelf stuff that anyone else could easily do if they chose to do so. I&amp;rsquo;m mainly focusing on businesses and their branding and positioning here, but you&amp;rsquo;ll see parallels that apply to personal brands as well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET Conf Most Popular Sessions Tool</title>
      <link>https://ardalis.com/dotnetconf-most-popular-sessions-tool/</link>
      <pubDate>Wed, 01 Apr 2026 16:47:18 -0400</pubDate>
      <guid>https://ardalis.com/dotnetconf-most-popular-sessions-tool/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.dotnetconf.net/&#34;&gt;DotNetConf (.NET Conf)&lt;/a&gt; is a long-running virtual conference hosted each November with the release of a new version of .NET. Its sessions are published to YouTube each year. What have been the top sessions each year? I wrote a tool to pull the stats year by year (since 2021) to see.&lt;/p&gt;&#xA;&lt;p&gt;Also, why do I keep giving (updated) versions of the same session, Clean Architecture, each year (like last November as &lt;a href=&#34;https://bsky.app/profile/sinclairinat0r.com/post/3m5k2thtb6i2u&#34;&gt;covered by Jeremy Sinclair&lt;/a&gt;)? There are some who have found it a bit&amp;hellip; repetitive (though I do mix it up year to year):&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI Benefits - But at What Cost?</title>
      <link>https://ardalis.com/ai-benefits---but-at-what-cost/</link>
      <pubDate>Thu, 19 Mar 2026 16:17:07 -0400</pubDate>
      <guid>https://ardalis.com/ai-benefits---but-at-what-cost/</guid>
      <description>&lt;p&gt;In 2026 we can all agree that AI and agentic development are certainly exciting topics which many see yielding great productivity gains. But as the investor-subsidized pricing of these services gives way to realistic and profitable business models, where will the real costs land?&lt;/p&gt;&#xA;&lt;p&gt;As many businesses downsize staff or pause hiring to see how these new models and tools actually perform in the real world, the trillion dollar question is:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use Asciinema and Powersession on Windows</title>
      <link>https://ardalis.com/use-asciinema-and-powersession-on-windows/</link>
      <pubDate>Thu, 19 Mar 2026 11:31:56 -0400</pubDate>
      <guid>https://ardalis.com/use-asciinema-and-powersession-on-windows/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;I recently became aware of &lt;a href=&#34;https://asciinema.org/&#34;&gt;Asciinema&lt;/a&gt; when I saw that the &lt;a href=&#34;https://aspire.dev&#34;&gt;Aspire&lt;/a&gt; docs are using it to &lt;a href=&#34;https://aspire.dev/get-started/install-cli/#validation&#34;&gt;document installing their CLI&lt;/a&gt;. As someone who creates a lot of content (or used to, anyway) and docs, this seems like a really useful tool! But it doesn&amp;rsquo;t &amp;ldquo;just work&amp;rdquo; on Windows, so I figured I&amp;rsquo;d document how to get it working on Windows for future me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;asciinema-itself&#34;&gt;Asciinema Itself&lt;/h2&gt;&#xA;&lt;p&gt;There are basically two parts to Asciinema:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Llms Need Mark as Answer</title>
      <link>https://ardalis.com/llms-need-mark-as-answer/</link>
      <pubDate>Fri, 13 Feb 2026 10:20:47 -0500</pubDate>
      <guid>https://ardalis.com/llms-need-mark-as-answer/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Today&amp;rsquo;s LLMs have already ingested basically all of the publicly available information they can to build their models. In order to improve further, they&amp;rsquo;re going to need to seek out additional sources of information. One obvious such source is the countless interactions they have with their users, and while privacy concerns are certainly relevant here, for the purposes of this article I want to focus on another issue: quality signals. How will these LLMs know whether a given exchange led to a solution (defined however the user would define it)? Without this knowledge, there&amp;rsquo;s no way for LLMs to give more weight to answers that ultimately were fruitful over answers that were useless but the user gave up and ended the session.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2025 Year in Review</title>
      <link>https://ardalis.com/2025-year-in-review/</link>
      <pubDate>Mon, 09 Feb 2026 08:34:11 -0500</pubDate>
      <guid>https://ardalis.com/2025-year-in-review/</guid>
      <description>&lt;p&gt;Better late than never, as I&amp;rsquo;m writing this in early February 2026&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;First, here are a few links to past years in review:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2017-in-review&#34;&gt;My 2017 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2018-year-in-review&#34;&gt;My 2018 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2019-year-in-review&#34;&gt;My 2019 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2020-year-in-review&#34;&gt;My 2020 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2021-year-in-review&#34;&gt;My 2021 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2022-year-in-review&#34;&gt;My 2022 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2023-year-in-review&#34;&gt;My 2023 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2024-year-in-review&#34;&gt;My 2024 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/year-in-review-post-checklist&#34;&gt;My Year in Review Post Checklist&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Now on to the various categories&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why a Free Market Fire Department System Beats the Archaic Public Model</title>
      <link>https://ardalis.com/why-a-free-market-fire-department-systems-beats-the-archaic-public-model/</link>
      <pubDate>Fri, 09 Jan 2026 09:00:00 -0500</pubDate>
      <guid>https://ardalis.com/why-a-free-market-fire-department-systems-beats-the-archaic-public-model/</guid>
      <description>&lt;p&gt;&lt;em&gt;By a devoted advocate for individual choice&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;introduction-fire-protection-reimagined-&#34;&gt;Introduction: Fire Protection, Reimagined 🚒&lt;/h2&gt;&#xA;&lt;p&gt;In a nation that prizes personal responsibility, it&amp;rsquo;s time to ask whether a single, taxpayer-funded fire department model still serves us best. A market of competing fire protection providers would let every household choose the coverage, response times, and perks that match their unique risk profile and budget. What&amp;rsquo;s more, it would allow individuals and households to prioritize how they want to spend their money, rather than leaving it up to big government and its known inefficiencies. Let the invisible hand of the market sort out which fire departments offer the best value for their rates, and which properties people find worth protecting with fire extinguishing services.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Single File Test Suites in Dotnet Csharp</title>
      <link>https://ardalis.com/single-file-tests-in-dotnet-csharp/</link>
      <pubDate>Tue, 02 Dec 2025 16:16:18 -0500</pubDate>
      <guid>https://ardalis.com/single-file-tests-in-dotnet-csharp/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article is part of the &lt;a href=&#34;https://www.csadvent.christmas/&#34;&gt;2025 Advent of C# Code Calendar&lt;/a&gt;, which publishes 2 C# articles every day in December leading up to 25 December.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Originally targeted xUnit v2; now updated to &lt;a href=&#34;https://www.nuget.org/packages/xunit.v3&#34;&gt;xUnit.v3&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;One of my favorite new features in .NET 10 is C# &lt;a href=&#34;https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/tutorials/file-based-programs&#34;&gt;file-based apps (or file-based C# programs if you prefer)&lt;/a&gt;. With this feature, we can create individual .cs files and then run them using &lt;code&gt;dotnet run &amp;lt;file.cs&amp;gt;&lt;/code&gt;. On Unix OSes you can go even further and mark the files as executable and include a shebang (#!) directive as the first line to tell the OS what to run it with and then you can run the files directly without even calling &lt;code&gt;dotnet run&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use cd - in Powershell 7 to Return to Previous Directory</title>
      <link>https://ardalis.com/use-cd---in-powershell-7-to-return-to-previous-directory/</link>
      <pubDate>Tue, 02 Dec 2025 11:16:30 -0500</pubDate>
      <guid>https://ardalis.com/use-cd---in-powershell-7-to-return-to-previous-directory/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;A command that many shells have had forever and that PowerShell has had for a long time as well is &amp;lsquo;cd -&amp;rsquo; which means &amp;ldquo;change directory to previous folder&amp;rdquo;. This means you could do something like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&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;n&#34;&gt;c:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&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;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;temp&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;n&#34;&gt;c:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;temp&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;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd &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;n&#34;&gt;c:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;This is quite handy in many situations. In particular, since I&amp;rsquo;ve modified my PowerShell Profile to NOT start in my users folder but instead to start in my &lt;code&gt;c:\dev&lt;/code&gt; folder (from which I can easily get to any repo I may be working from), I very often find myself using &lt;code&gt;cd -&lt;/code&gt; whenever I create a new terminal &lt;em&gt;in the folder I want to be in&lt;/em&gt; such as when using VS Code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Update .NET on Wsl or Ubuntu</title>
      <link>https://ardalis.com/how-to-update-net-on-wsl-or-ubuntu/</link>
      <pubDate>Wed, 19 Nov 2025 09:37:56 -0500</pubDate>
      <guid>https://ardalis.com/how-to-update-net-on-wsl-or-ubuntu/</guid>
      <description>&lt;p&gt;Ever year or so, a new version of .NET ships, and I need to upgrade the .NET SDK version on my machines. Not just the Windows machines, but also the WSL Ubuntu bits that live on those same machines.&lt;/p&gt;&#xA;&lt;p&gt;First, determine what version of dotnet you already have using this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dotnet --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt; 10.0.100-rc.1.25451.107&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Yep, I need to update that. But how? Surely there must be a simple way to do it using just the command line. If you just do a quick search for how to do this, you&amp;rsquo;ll find instructions like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ardalis Fall 2025 Speaking Tour Review</title>
      <link>https://ardalis.com/ardalis-fall-2025-speaking-tour-review/</link>
      <pubDate>Fri, 14 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/ardalis-fall-2025-speaking-tour-review/</guid>
      <description>&lt;p&gt;The last two years, I&amp;rsquo;ve had the good fortune to be invited to the Netherlands for TechoramaNL, and I&amp;rsquo;ve been able to bring my wife and business partner Michelle and our twin boys along as well. It&amp;rsquo;s been fun and educational for all of us, so this year when there were opportunities to submit talks in Portugal that butted up against TechoramaNL on the calendar, we decided to go ahead and submit. Amazingly, my submissions were accepted to not one but two different Portugal events, and so the trip went from one week to three. And along the way, I also said yes to my good friends at DevIntersection who wanted me to present there (the week before we were to leave for Europe, in Florida). And when JetBrains asked if I could present at their DotNetDays event literally on the same day I was presenting in Florida for DevIntersection, I said &amp;ldquo;Why not?&amp;rdquo; and added that to the schedule as well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Ardalis Cli</title>
      <link>https://ardalis.com/the-ardalis-cli/</link>
      <pubDate>Tue, 11 Nov 2025 17:03:42 -0500</pubDate>
      <guid>https://ardalis.com/the-ardalis-cli/</guid>
      <description>&lt;p&gt;Back in the .NET 10 Preview days, &lt;a href=&#34;https://andrewlock.net/exploring-dotnet-10-preview-features-5-running-one-off-dotnet-tools-with-dnx/&#34;&gt;Andrew Lock wrote about running one-off dotnet tools with DNX&lt;/a&gt;. I decided to riff on that to create what was initially just a business card, but then I enhanced it with some additional functionality, making a full-blown &lt;strong&gt;Ardalis CLI&lt;/strong&gt; tool, which mostly just gets you access to content from me in your terminal.&lt;/p&gt;&#xA;&lt;p&gt;You can find &lt;a href=&#34;https://github.com/ardalis/ardalis-card-dnx&#34;&gt;the source&lt;/a&gt; for my &lt;code&gt;ardalis&lt;/code&gt; command line interface as well as its &lt;a href=&#34;https://www.nuget.org/packages/ardalis&#34;&gt;listing on NuGet&lt;/a&gt;. You should review these before running commands on your machine to ensure the tool isn&amp;rsquo;t doing anything nefarious.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use TimeSpan Or Specify Units In Duration Properties And Parameters</title>
      <link>https://ardalis.com/use-timespan-or-specify-units-in-duration-properties-and-parameters/</link>
      <pubDate>Thu, 06 Nov 2025 09:51:30 -0500</pubDate>
      <guid>https://ardalis.com/use-timespan-or-specify-units-in-duration-properties-and-parameters/</guid>
      <description>&lt;p&gt;A special case of &lt;a href=&#34;https://deviq.com/code-smells/primitive-obsession-code-smell&#34;&gt;primitive obsession&lt;/a&gt; is the use of an &lt;code&gt;int&lt;/code&gt; value to describe a span of time. You see this all the time in various APIs, and it&amp;rsquo;s a frequent source of bugs and confusion. Developers are forced to either guess or try to find the documentation that describes what units &lt;code&gt;int timeout&lt;/code&gt; or &lt;code&gt;int delay&lt;/code&gt; actually uses.&lt;/p&gt;&#xA;&lt;p&gt;Having a retry delay of 1 millisecond instead of 1 second, for example, is a huge difference - that&amp;rsquo;s 1000x more load on your system! But so is having a timeout of 1000 seconds (nearly 17 minutes!) instead of 1000 milliseconds (1 second). Either way, it&amp;rsquo;s three orders of magnitude away from the expected and intended behavior, which can lead to production incidents and difficult-to-diagnose bugs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ardalis Fall 2025 Speaking Tour</title>
      <link>https://ardalis.com/ardalis-fall-2025-speaking-tour/</link>
      <pubDate>Sat, 27 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/ardalis-fall-2025-speaking-tour/</guid>
      <description>&lt;p&gt;I may have gone a bit overboard this year&amp;hellip; I&amp;rsquo;ve scheduled myself for 5 developer conferences in 4 weeks during October 2025! If you&amp;rsquo;re interested in learning about &lt;strong&gt;Clean Architecture&lt;/strong&gt;, &lt;strong&gt;SOLID principles&lt;/strong&gt;, &lt;strong&gt;microservices&lt;/strong&gt;, &lt;strong&gt;modular monoliths&lt;/strong&gt;, and other software architecture best practices, here&amp;rsquo;s where you can find me speaking across three countries and online.&lt;/p&gt;&#xA;&lt;p&gt;Whether you&amp;rsquo;re a.NET developer, software architect, or just passionate about writing better code, these sessions will cover practical techniques you can apply immediately to improve your applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Combine MP4 Files on Windows Using FFmpeg</title>
      <link>https://ardalis.com/combine-mp4-files-ffmpeg-windows/</link>
      <pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/combine-mp4-files-ffmpeg-windows/</guid>
      <description>&lt;p&gt;Merging multiple MP4 files into one can be useful when working with ripped DVDs, split movie parts, or recorded gameplay. On Windows, the simplest and most flexible tool for this task is &lt;strong&gt;FFmpeg&lt;/strong&gt; — a powerful open-source utility that can join, convert, and manipulate video files.&lt;/p&gt;&#xA;&lt;p&gt;This guide walks you through installing FFmpeg, preparing your files, and performing a &lt;strong&gt;lossless merge&lt;/strong&gt; (no quality loss).&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-install-ffmpeg-with-winget&#34;&gt;1. Install FFmpeg with Winget&lt;/h2&gt;&#xA;&lt;p&gt;Windows 10/11 includes the &lt;code&gt;winget&lt;/code&gt; package manager, which makes installing FFmpeg simple:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Install Nerd Fonts and Icons in PowerShell 7 on Windows 11</title>
      <link>https://ardalis.com/install-nerd-fonts-terminal-icons-pwsh-7-win-11/</link>
      <pubDate>Tue, 22 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/install-nerd-fonts-terminal-icons-pwsh-7-win-11/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re setting up a polished dev terminal experience with icons, custom fonts, and PowerShell 7 on Windows 11, here&amp;rsquo;s a step-by-step guide that actually works. We&amp;rsquo;ll install a Nerd Font, configure PowerShell 7 properly, and enable terminal icons in directory listings — all without pulling your hair out. If video is more your thing, &lt;a href=&#34;https://youtu.be/TpHcEsPIOhw?si=YmQTIi6rLwB02Cbe&#34;&gt;check out my YouTube video on prettying up your terminal with terminal icons&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;-what-not-to-do&#34;&gt;🚫 What &lt;em&gt;Not&lt;/em&gt; to Do&lt;/h2&gt;&#xA;&lt;p&gt;Before we dive in, here are a few things that &lt;strong&gt;didn&amp;rsquo;t work&lt;/strong&gt; and might trip you up:&lt;/p&gt;</description>
    </item>
    <item>
      <title>GenAI is the new Offshoring</title>
      <link>https://ardalis.com/genai-is-the-new-offshoring/</link>
      <pubDate>Fri, 06 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/genai-is-the-new-offshoring/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;I originally &lt;a href=&#34;https://bsky.app/profile/ardalis.com/post/3lpf22jfrbs2d&#34;&gt;posted this on LinkedIn / BlueSky&lt;/a&gt; but I&amp;rsquo;ve found that it&amp;rsquo;s nearly impossible to find (searching for &amp;ldquo;AI is the new offshoring&amp;rdquo; or&amp;quot;genAI is the new offshoring&amp;quot; both fail to find it) so I&amp;rsquo;m cross-posting here and adding a bit more context.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Twenty years ago, the internet and improved communications led to a massive push in US corporate enterprises to outsource IT and dev efforts to far less expensive offshore outfits staffed by eager but often inexperienced workers making pennies on the dollar compared to their US counterparts. Layoffs occurred in many orgs and whole departments moved offshore in some cases, and while there were success stories and many companies continue to leverage offshore talent, many (most in my experience but that&amp;rsquo;s probably biased by the ones coming to my company for help) later regretted the decision.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing GenAI Coding Risk Like an Investment</title>
      <link>https://ardalis.com/genai-coding-investment-risk-strategy/</link>
      <pubDate>Thu, 05 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/genai-coding-investment-risk-strategy/</guid>
      <description>&lt;p&gt;Generative AI tools have greatly improved in their ability to generate large amounts of code, quickly, to support software development tasks. They&amp;rsquo;re fast, confident, and in some cases even creative. But they&amp;rsquo;re also fallible, occasionally destructive, and always somewhat unpredictable.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve ever used GenAI to bang out a prototype in hours instead of days, you&amp;rsquo;ve seen the upside. If you&amp;rsquo;ve watched it delete critical files, misconfigure infrastructure, or hallucinate complex nonsense that passes code review but fails in production, you&amp;rsquo;ve felt the downside.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ardalis Specification v9 Released</title>
      <link>https://ardalis.com/ardalis-specification-v9-release/</link>
      <pubDate>Thu, 13 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/ardalis-specification-v9-release/</guid>
      <description>&lt;p&gt;A new major version of the Ardalis Specification library has been released. This library is used to create and compose specifications for querying data from repositories. It&amp;rsquo;s a key part of the Ardalis Clean Architecture libraries and is used in many applications to help simplify querying logic and make it more testable. If your application suffers from LINQ pollution, with query logic spread through every part of it, this library may help.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2024 Year In Review</title>
      <link>https://ardalis.com/2024-year-in-review/</link>
      <pubDate>Wed, 26 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/2024-year-in-review/</guid>
      <description>&lt;p&gt;Better late than never, as I&amp;rsquo;m writing this in late February 2025&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;First, here&amp;rsquo;s a few links to past years in review:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2017-in-review&#34;&gt;My 2017 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2018-year-in-review&#34;&gt;My 2018 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2019-year-in-review&#34;&gt;My 2019 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2020-year-in-review&#34;&gt;My 2020 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2021-year-in-review&#34;&gt;My 2021 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2022-year-in-review&#34;&gt;My 2022 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2023-year-in-review&#34;&gt;My 2022 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/year-in-review-post-checklist&#34;&gt;My Year in Review Post Checklist&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Now on to the various categories&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;blogging-&#34;&gt;Blogging ✍️&lt;/h2&gt;&#xA;&lt;p&gt;Blogging continues its slide into obscurity. In 2024 I had just 18 new articles, which is down from 20 in 2023. I think part of the reason for this is that I&amp;rsquo;ve been focusing more on video content. I also tend to get more immediate feedback on video content, even though it&amp;rsquo;s more effort to create, and there are vanity metrics like YouTube subscribers which offer more of a dopamine hit than page views on a blog. In 2023 I had 20 articles so this is a slight decrease.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When QA Keeps Finding Bugs</title>
      <link>https://ardalis.com/when-qa-keeps-finding-bugs/</link>
      <pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/when-qa-keeps-finding-bugs/</guid>
      <description>&lt;p&gt;A developer manager recently reached out with a concern: their new QA team member was finding too many bugs, leading to frustration among developers. Overall velocity of the dev team (in terms of features being shipped) was rapidly falling. The question was, how can they reduce the number of issues being kicked back from QA without discouraging the testers from doing their job well?&lt;/p&gt;&#xA;&lt;h2 id=&#34;qa-isnt-the-problem&#34;&gt;QA Isn&amp;rsquo;t the Problem&lt;/h2&gt;&#xA;&lt;p&gt;First and foremost, if QA is finding bugs, that means they&amp;rsquo;re doing their job well. The goal shouldn&amp;rsquo;t be to stop QA from finding bugs. The goal should be to reduce the number of bugs that reach QA &lt;em&gt;in the first place&lt;/em&gt;. The real issue likely lies upstream in the development process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Avoid Using C# Events in ASP.NET Core Applications</title>
      <link>https://ardalis.com/avoid-using-csharp-events-in-aspnetcore-apps/</link>
      <pubDate>Sun, 15 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/avoid-using-csharp-events-in-aspnetcore-apps/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of the &lt;a href=&#34;https://csadvent.christmas/&#34;&gt;C# Advent Calendar 2024 - check out all of the C# articles from this year!&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;C# events are a powerful feature of the language, providing a simple mechanism for building publish-subscribe communication patterns. However, when used in ASP.NET Core applications, events can lead to subtle, hard-to-diagnose issues that can harm the reliability and scalability of your application. In this article, I&amp;rsquo;ll highlight the main issues with using C# events in ASP.NET Core and share better alternatives.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interfaces Describe What - Implementations Describe How</title>
      <link>https://ardalis.com/interfaces-describe-what-implementations-describe-how/</link>
      <pubDate>Mon, 23 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/interfaces-describe-what-implementations-describe-how/</guid>
      <description>&lt;p&gt;When working with software development, especially in object-oriented or component-based systems, understanding the distinction between interfaces and implementations is crucial. The two terms often come up in conversations about architecture, design patterns, and coding best practices, but what do they really mean? In this post, we&amp;rsquo;ll break down the difference and why it matters.&lt;/p&gt;&#xA;&lt;h2 id=&#34;youtube&#34;&gt;YouTube&lt;/h2&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/Cg4w-MgjkLA?si=LcOwZQKK3c4Q_y7U&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;h2 id=&#34;what-is-an-interface&#34;&gt;What is an Interface?&lt;/h2&gt;&#xA;&lt;p&gt;An interface in software development defines &lt;em&gt;what&lt;/em&gt; a component or class can do. Think of it like a contract or a blueprint. It specifies the methods or behaviors that must be available without dictating &lt;em&gt;how&lt;/em&gt; they should be carried out. (While &lt;a href=&#34;https://learn.microsoft.com/en-us/dotnet/csharp/advanced-topics/interface-implementation/default-interface-methods-versions&#34;&gt;default interface methods&lt;/a&gt; are a special case in modern languages like C#, they don&amp;rsquo;t change the fundamental role of interfaces as abstractions).&lt;/p&gt;</description>
    </item>
    <item>
      <title>You Should Blog</title>
      <link>https://ardalis.com/you-should-blog/</link>
      <pubDate>Mon, 26 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/you-should-blog/</guid>
      <description>&lt;p&gt;As a software developer, you might spend most of your time immersed in code, solving problems, and building innovative solutions. But have you ever considered starting a blog? If you haven&amp;rsquo;t, let me give you some compelling reasons why you should. This is advice I frequently give to members of my &lt;a href=&#34;https://devBetter.com&#34;&gt;developer group coaching program at devBetter.com&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;watch-the-video&#34;&gt;Watch the Video&lt;/h2&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/yRLaoq_q1a8?si=AhncsYcrusSLaOat&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;h2 id=&#34;1-sharpen-your-skills&#34;&gt;1. Sharpen Your Skills&lt;/h2&gt;&#xA;&lt;p&gt;One of the best ways to deepen your understanding of any topic is to teach it to others.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Microservices to Modular Monoliths</title>
      <link>https://ardalis.com/from-microservices-to-modular-monoliths/</link>
      <pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/from-microservices-to-modular-monoliths/</guid>
      <description>&lt;p&gt;What do you do when you find yourself in microservice hell? How do you keep the gains you (hopefully) made in breaking up your legacy ball of mud, without having to constantly contend with a massively distributed system? Migrate to a modular monolith.&lt;/p&gt;&#xA;&lt;h2 id=&#34;microservices&#34;&gt;Microservices&lt;/h2&gt;&#xA;&lt;p&gt;Microservices have been all the rage for the past several years. They offer a way to break up large, monolithic applications into smaller, more manageable pieces. This can make it easier to scale, deploy, and maintain your application. However, microservices come with their own set of challenges. They can be difficult to manage, especially as the number of services grows. They can also introduce latency and complexity into your system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modeling Navigation Properties Between Aggregates or Modules</title>
      <link>https://ardalis.com/navigation-properties-between-aggregates-modules/</link>
      <pubDate>Wed, 19 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/navigation-properties-between-aggregates-modules/</guid>
      <description>&lt;p&gt;One of the key challenges in developing a modular monolith is managing the communication between different modules, especially when it comes to handling data dependencies across module boundaries. Recently, I received an interesting question from one of the students of &lt;a href=&#34;https://dometrain.com/bundle/from-zero-to-hero-modular-monoliths-in-dotnet/&#34;&gt;my modular monoliths course&lt;/a&gt;, which I thought others might appreciate.&lt;/p&gt;&#xA;&lt;h2 id=&#34;student-query&#34;&gt;Student Query&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Modular Monolith course question (EFCore Navigation Properties)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Message:&#xA;&lt;em&gt;Hi Steve,&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Just got done with your modular monoliths course and loved it. I have a question about how navigation properties work inside each module using EFCore.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparing Unit Testable Code with Maintainable Code</title>
      <link>https://ardalis.com/comparing-unit-testable-code-with-maintainable-code/</link>
      <pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/comparing-unit-testable-code-with-maintainable-code/</guid>
      <description>&lt;p&gt;Writing maintainable code should be a goal in most software engineering projects. Although definitions and especially hard measurements of what maintainable means with regard to software may vary, it can be useful to compare maintainable code to the much more easily verified unit testability of that code.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;When discussing software quality, two important concepts often arise: unit testable code and maintainable code. While these concepts are distinct, they share many characteristics. This article explores the overlap between unit testable code and maintainable code in C#, highlighting how striving for one often leads to achieving the other.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Effectively Sharing Resources Between Modules in a Modular Monolith</title>
      <link>https://ardalis.com/effectively-sharing-resources-between-modules-modular-monolith/</link>
      <pubDate>Fri, 24 May 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/effectively-sharing-resources-between-modules-modular-monolith/</guid>
      <description>&lt;p&gt;One of the key challenges in developing a modular monolith is managing the communication between different modules, especially when it comes to handling data dependencies across module boundaries. Recently, I received an interesting question from one of the students of &lt;a href=&#34;https://dometrain.com/bundle/from-zero-to-hero-modular-monoliths-in-dotnet/&#34;&gt;my modular monoliths course&lt;/a&gt;, which I thought others might appreciate.&lt;/p&gt;&#xA;&lt;h2 id=&#34;student-query&#34;&gt;Student Query&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Hi Steve, I have another question for you after finishing the deep dive course. Let&amp;rsquo;s say that now I have multiple modules, each of them with IDs of other entities in their domain. I don&amp;rsquo;t want to serve data from module A in module B, so I just return the ID to the consumer and let them call module A with it. The problem is that following this pattern, the consumer could be forced to do a lot of calls just to jump between our domains. Could it make sense to implement an API Gateway? How could it be implemented in a modular monolith environment?&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clean Architecture Sucks</title>
      <link>https://ardalis.com/clean-architecture-sucks/</link>
      <pubDate>Thu, 23 May 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/clean-architecture-sucks/</guid>
      <description>&lt;p&gt;The other day I was participating in a conversation online in an architecture forum. One of the participants was complaining about the mess they were cleaning up from a team they&amp;rsquo;d joined. The team had, ostensibly, been following &lt;a href=&#34;https://ardalis.com/clean-architecture-asp-net-core/&#34;&gt;Clean Architecture&lt;/a&gt;, but the code they had produced was a mess. Their conclusion:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Clean Architecture sucks.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;They led with:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Clean Architecture and its obsession with grouping things into technical concerns can quickly turn into a giant ball of mud as the ability to properly develop and maintain code in such a project style is directly dependent on the technical expertise and skill of each of the developers on the project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Navigating the Edges of Technology in Software Development: Bleeding, Leading, Dull, and Rusting</title>
      <link>https://ardalis.com/technology-edges-bleeding-leading-rusting/</link>
      <pubDate>Fri, 19 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/technology-edges-bleeding-leading-rusting/</guid>
      <description>&lt;p&gt;In the fast-evolving world of software development, keeping pace with technology trends is both a necessity and a challenge. Companies and developers often find themselves making critical decisions about whether to adopt new technologies early (bleeding edge), wait until they mature (leading edge or cutting edge), or continue using older, more established technologies (what I&amp;rsquo;ll call the &lt;strong&gt;dull edge&lt;/strong&gt; and &lt;strong&gt;rusting edge&lt;/strong&gt;). Understanding the distinctions and implications of these choices can significantly impact both the development process and business outcomes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stop Debugging and Start Running in Visual Studio</title>
      <link>https://ardalis.com/stop-debugging-start-running-visual-studio/</link>
      <pubDate>Thu, 18 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/stop-debugging-start-running-visual-studio/</guid>
      <description>&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/jxfAoUHH400?si=CvrmjUsJsmk15Pol&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Watch the video above to see actual timings of starting with and without debugging. Vote for this &lt;a href=&#34;https://developercommunity.visualstudio.com/t/Change-Menu-Text-from-Start-Debugging-/10639783&#34;&gt;feature request to make Run vs Debug more obvious in Visual Studio.&lt;/a&gt;. Thanks!&lt;/p&gt;&#xA;&lt;p&gt;I work with a lot of different.NET developers as a trainer, architect, and consultant with &lt;a href=&#34;https://nimblepros.com&#34;&gt;NimblePros&lt;/a&gt;. One thing that I&amp;rsquo;m frequently pointing out to them is the difference in startup speed for their applications when launching from Visual Studio. Many, I would even say most,.NET developers have developed&amp;quot;muscle memory&amp;quot; of hitting F5 (or clicking the&amp;quot;Play&amp;quot; button) in order to launch their applications. And why not? This was the only toolbar button available for many years, and F5 is a simple enough key to remember, and is literally called&amp;quot;Start&amp;quot;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 Rules for DTOs</title>
      <link>https://ardalis.com/5-rules-dtos/</link>
      <pubDate>Sat, 06 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/5-rules-dtos/</guid>
      <description>&lt;p&gt;If you don&amp;rsquo;t like reading, here&amp;rsquo;s my YouTube video with samples that covers why these 5 rules will help you write better DTOs:&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/W4n9x_qGpT4?si=1ryxzqqMlRM3Sx8w&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;h2 id=&#34;whats-a-dto&#34;&gt;What&amp;rsquo;s a DTO?&lt;/h2&gt;&#xA;&lt;p&gt;A DTO is a Data Transfer Object. Its job is to transfer data, and it can be used both to &lt;em&gt;send&lt;/em&gt; data and to &lt;em&gt;receive&lt;/em&gt; it. Often, data transferred will use different types (possibly even different programming languages and technology stacks) on each end of the transfer. The only thing you can count on transferring is the &lt;em&gt;data&lt;/em&gt; - nothing else. Which leads to the first rule for DTOs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An Active Local NuGet Server</title>
      <link>https://ardalis.com/active-local-nuget-server/</link>
      <pubDate>Thu, 22 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/active-local-nuget-server/</guid>
      <description>&lt;p&gt;As I&amp;rsquo;m writing this the Internet is out. When that happens, it makes it very difficult to work on development projects that have NuGet dependencies, especially when it comes to adding anything new to a project. A local NuGet server that kept up-to-date with my commonly used packages would be helpful right now.&lt;/p&gt;&#xA;&lt;p&gt;NuGet already has a local NuGet cache. You&amp;rsquo;ll find it in your user profile folder. Here&amp;rsquo;s mine:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing Modular Monoliths: The Goldilocks Architecture</title>
      <link>https://ardalis.com/introducing-modular-monoliths-goldilocks-architecture/</link>
      <pubDate>Wed, 21 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/introducing-modular-monoliths-goldilocks-architecture/</guid>
      <description>&lt;p&gt;In the world of software architecture, finding the perfect balance between complexity and simplicity can often feel like an elusive quest. Developers and architects are constantly navigating the spectrum between traditional monoliths, known for their simplicity but criticized for their scalability and maintainability issues, and microservices, praised for their scalability and flexibility but often complicated by their operational and developmental overhead. Enter the &amp;ldquo;Goldilocks&amp;rdquo; architecture: the &lt;a href=&#34;https://bit.ly/3UKfNWI&#34;&gt;Modular Monolith&lt;/a&gt;. This architecture promises to strike a balance that is&amp;quot;just right&amp;quot; for many applications, offering the simplicity of a monolith with the flexibility of microservices.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hello, MongoDB - Getting Started with Mongo and dotnet 8</title>
      <link>https://ardalis.com/hello-mongodb-getting-started-mongo-dotnet/</link>
      <pubDate>Thu, 15 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/hello-mongodb-getting-started-mongo-dotnet/</guid>
      <description>&lt;h1 id=&#34;integratingnet-core-with-mongodb-in-a-dockerized-environment&#34;&gt;Integrating.NET Core with MongoDB in a Dockerized Environment&lt;/h1&gt;&#xA;&lt;p&gt;Hello, fellow developers! Whether you&amp;rsquo;re building a new project or integrating into an existing one, this guide is your starting point for a &amp;ldquo;hello world&amp;rdquo; level application in the.NET 8 plus MongoDB stack. Let&amp;rsquo;s get to it!&lt;/p&gt;&#xA;&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;&#xA;&lt;p&gt;Before we begin, ensure you have the following installed on your machine:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Docker&#xA;-.NET SDK (I&amp;rsquo;m using dotnet 8)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;step-1-dockerize-mongodb&#34;&gt;Step 1: Dockerize MongoDB&lt;/h2&gt;&#xA;&lt;p&gt;First off, let&amp;rsquo;s get MongoDB up and running inside a Docker container. Just run this command (assuming you have docker installed and running)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hello, Redis - Getting Started with Redis and dotnet 8</title>
      <link>https://ardalis.com/hello-redis-getting-started-with-redis-dotnet/</link>
      <pubDate>Sun, 11 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/hello-redis-getting-started-with-redis-dotnet/</guid>
      <description>&lt;h1 id=&#34;integrating-redis-caching-innet-8-applications&#34;&gt;Integrating Redis Caching in.NET 8 Applications&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://redis.io/&#34;&gt;Redis&lt;/a&gt; is an open-source, in-memory data structure store, used as a database, cache, and message broker. It&amp;rsquo;s known for its speed and flexibility, making it an excellent choice for caching in modern applications. In this article, we&amp;rsquo;ll explore how to use Redis for caching in a.NET 8 application, covering both setting up Redis using Docker on a Windows development machine and integrating it into your.NET application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Solved! Visual Studio.http File Not Sending Authorization Header</title>
      <link>https://ardalis.com/http-file-not-sending-auth-header/</link>
      <pubDate>Thu, 01 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/http-file-not-sending-auth-header/</guid>
      <description>&lt;p&gt;I ran into a weird problem with how Visual Studio was sending API requests. I was trying to use a bearer token, and it worked fine in Swagger, but from an.http file the Authorization header was simply being ignored, resulting in a 401 Unauthorized.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;d built a simple ASP.NET Core webapi project using the default template. I was using the built-in support for.http files to execute requests against the project. I could register and log in successfully, but when it came time to hit an endpoint that required authentication, it would always result in a 401. The same token added to the same &lt;code&gt;Authorization&lt;/code&gt; header worked just fine using Swagger/Swashbuckle in the browser.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Log Request Headers Middleware for ASP.NET Core</title>
      <link>https://ardalis.com/log-request-headers-middleware/</link>
      <pubDate>Wed, 31 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/log-request-headers-middleware/</guid>
      <description>&lt;p&gt;Recently I ran into a weird problem with how Visual Studio was sending API requests and I really wanted to see exactly what headers were being sent to my ASP.NET Core app. So I wrote this simple bit of middleware to do the job.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-middleware&#34;&gt;What is Middleware&lt;/h2&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re not familiar with middleware, it&amp;rsquo;s a set of functions (&amp;ldquo;request delegates&amp;rdquo;) that are executed in a particular order as part of every request that is made to an ASP.NET Core application. It&amp;rsquo;s an example of the &lt;a href=&#34;https://deviq.com/design-patterns/chain-of-responsibility-pattern&#34;&gt;Chain of Responsibility design pattern&lt;/a&gt;. I talk about &lt;a href=&#34;https://www.youtube.com/watch?v=eSQHpfaYspw&amp;amp;ab_channel=dotnetFlix&#34;&gt;useful ways you can use the Chain of Responsibility pattern in this video&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2023 Year in Review</title>
      <link>https://ardalis.com/2023-year-in-review/</link>
      <pubDate>Tue, 23 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/2023-year-in-review/</guid>
      <description>&lt;p&gt;Now that CodeMash is over (I had a workshop and 2 talks, including a new one), I can focus enough to write up this review post. For those who care to see how things have progressed over the years, a brief history of similar such posts is listed below. If you want to write your own such article, I have a checklist linked at the bottom of the list.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2017-in-review&#34;&gt;My 2017 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2018-year-in-review&#34;&gt;My 2018 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2019-year-in-review&#34;&gt;My 2019 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2020-year-in-review&#34;&gt;My 2020 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2021-year-in-review&#34;&gt;My 2021 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/2022-year-in-review&#34;&gt;My 2022 Year in Review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ardalis.com/year-in-review-post-checklist&#34;&gt;My Year in Review Post Checklist&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;blogging&#34;&gt;Blogging&lt;/h2&gt;&#xA;&lt;p&gt;Last year I only added 20 articles to my blog (about 6 fewer than in 2022). That works out to 1-2 per month, though in reality there were a few months where I blogged a lot, and bunch where I&amp;hellip; didn&amp;rsquo;t.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scaling Your Software Team: Development vs. Hiring</title>
      <link>https://ardalis.com/scaling-your-software-team-develop-vs-hiring/</link>
      <pubDate>Wed, 20 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/scaling-your-software-team-develop-vs-hiring/</guid>
      <description>&lt;p&gt;Scaling up and scaling out, originally application terms, offer a fresh perspective on team development. In team contexts, scaling up involves enhancing existing members&amp;rsquo; skills, offering depth and cost efficiency, whereas scaling out adds new members for diverse skills and increased capacity. The choice hinges on project needs and long-term goals, each strategy presenting distinct benefits and challenges.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving landscape of software development, team scalability is a critical factor for success. Two primary approaches dominate the scene: scaling up by developing individual team members, and scaling out through hiring additional team members. This article delves into the nuances of both strategies, highlighting their benefits, challenges, and suitability for different project demands.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Embed a YouTube Video in GitHub ReadMe Markdown</title>
      <link>https://ardalis.com/how-to-embed-youtube-video-in-github-readme-markdown/</link>
      <pubDate>Thu, 23 Nov 2023 06:04:10 -0500</pubDate>
      <guid>https://ardalis.com/how-to-embed-youtube-video-in-github-readme-markdown/</guid>
      <description>&lt;p&gt;I keep wanting to do this and forgetting how, so I&amp;rsquo;m writing it down. Here&amp;rsquo;s how to embed a YouTube video in a GitHub ReadMe markdown file.&lt;/p&gt;&#xA;&lt;p&gt;Thanks for this &lt;a href=&#34;https://stackoverflow.com/a/29862696/13729&#34;&gt;Stack Overflow answer&lt;/a&gt; for the tip.&lt;/p&gt;&#xA;&lt;h2 id=&#34;step-1-get-the-youtube-video-id&#34;&gt;Step 1: Get the YouTube Video ID&lt;/h2&gt;&#xA;&lt;p&gt;The YouTube video ID is the part of the URL after the &lt;code&gt;v=&lt;/code&gt;. For example, in the URL &lt;code&gt;[https://www.youtube.com/watch?v=dQw4w9WgXcQ](https://www.youtube.com/watch?v=dQw4w9WgXcQ)&lt;/code&gt;, the video ID is &lt;code&gt;dQw4w9WgXcQ&lt;/code&gt;. You&amp;rsquo;ll need that for the next step.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New Course - Refactoring to SOLID C# Code</title>
      <link>https://ardalis.com/new-course-refactoring-solid-csharp-code/</link>
      <pubDate>Fri, 17 Nov 2023 06:04:10 -0500</pubDate>
      <guid>https://ardalis.com/new-course-refactoring-solid-csharp-code/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m thrilled to announce the release of my latest Pluralsight course, &lt;a href=&#34;https://app.pluralsight.com/library/courses/refactoring-solid-c-sharp-code&#34;&gt;&lt;strong&gt;Refactoring to SOLID C# Code&lt;/strong&gt;&lt;/a&gt;. This course is designed for software developers, architects, and anyone interested in enhancing their coding skills, especially in the C# programming language.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Legacy code is often difficult to maintain and extend. In this course, Refactoring to SOLID C# Code, you&amp;rsquo;ll learn to apply refactoring techniques guided by SOLID principles. First, you&amp;rsquo;ll explore a small application that wasn&amp;rsquo;t written to follow SOLID. Next, you&amp;rsquo;ll discover ways to improve the design using specific techniques. Finally, you&amp;rsquo;ll learn how to assess and test the resulting code. When you finish this course, you&amp;rsquo;ll have the skills and knowledge of refactoring and OO design principles needed to improve and maintain legacy.NET applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding Migrations, Snapshots, and Synchronization in Entity Framework Core</title>
      <link>https://ardalis.com/entity-framework-core-understanding-migrations-snapshots-synchronization/</link>
      <pubDate>Fri, 27 Oct 2023 04:34:00 -0400</pubDate>
      <guid>https://ardalis.com/entity-framework-core-understanding-migrations-snapshots-synchronization/</guid>
      <description>&lt;h1 id=&#34;entity-framework-core-understanding-migrations-snapshots-and-synchronization&#34;&gt;Entity Framework Core: Understanding Migrations, Snapshots, and Synchronization&lt;/h1&gt;&#xA;&lt;p&gt;Entity Framework Core (EF Core) is a powerful tool for managing database schema migrations and synchronization in.NET projects. This article aims to explore the core components that EF Core uses to maintain this sync: migration files, model snapshots, and a special database table. We&amp;rsquo;ll also clarify the roles of &lt;code&gt;.designer.cs&lt;/code&gt; and &lt;code&gt;ModelSnapshot.cs&lt;/code&gt; files in migrations.&lt;/p&gt;&#xA;&lt;h2 id=&#34;models&#34;&gt;Models&lt;/h2&gt;&#xA;&lt;p&gt;One point of confusion I see a lot when discussing EF Core migrations is with &amp;ldquo;the model.&amp;rdquo; The model or&amp;quot;the current model&amp;quot; being referenced varies quite a bit with context. In one scenario, the&amp;quot;current model&amp;quot; is your C# code in its current most-recently-saved state. If you just added a property called &lt;code&gt;Name&lt;/code&gt; to an entity class, you&amp;rsquo;re thinking that is your current model. But another &lt;em&gt;version&lt;/em&gt; of the model is in a snapshot file, and that one is only updated when you create a migration. And another &lt;em&gt;version&lt;/em&gt; of the model is in the/a database. And &lt;em&gt;that&lt;/em&gt; one is only updated when you do a database update or deployment. So, keep in mind as you continue reading that there are always several different versions of your model that are in various states, and ultimately should be synchronized by the migration process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Process Bloat: The Silent Killer of Developer Productivity</title>
      <link>https://ardalis.com/process-bloat-silent-killer-developer-productivity/</link>
      <pubDate>Tue, 24 Oct 2023 04:34:00 -0400</pubDate>
      <guid>https://ardalis.com/process-bloat-silent-killer-developer-productivity/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the exhilarating infancy stages of a software development project, teams are marked by agility, prompt decision-making, and a zest for delivering valuable features. Yet, as projects gain complexity and scale, many fall prey to a lesser-known but insidious anti-pattern: &lt;strong&gt;Process Bloat&lt;/strong&gt;. This bureaucratic monster not only hampers innovation but becomes a silent killer of developer productivity.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-does-process-bloat-occur&#34;&gt;Why Does Process Bloat Occur?&lt;/h2&gt;&#xA;&lt;p&gt;Initially, the integration of processes into a project aims to streamline operations, uphold quality standards, and minimize risks. However, these well-meant structures can evolve into debilitating &lt;strong&gt;Process Bloat&lt;/strong&gt;. The factors leading to this are multiple:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Principles of Lean Software Development</title>
      <link>https://ardalis.com/principles-lean-software-development/</link>
      <pubDate>Fri, 20 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/principles-lean-software-development/</guid>
      <description>&lt;p&gt;Lean Software Development is an agile project management and product development framework that originated from Lean manufacturing principles. It focuses on delivering value to the customer by optimizing resources, workflows, and processes. Below is a breakdown of its core principles:&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-eliminate-waste&#34;&gt;1. Eliminate Waste&lt;/h2&gt;&#xA;&lt;p&gt;The first principle of Lean Software Development is to eliminate waste, a concept borrowed from the Lean manufacturing world where it is known as &amp;ldquo;muda.&amp;rdquo; In software development, waste could be anything from writing unnecessary code to excessive meetings that don&amp;rsquo;t add value. The goal is to streamline the workflow by identifying and removing anything that doesn&amp;rsquo;t contribute to the end product or the customer&amp;rsquo;s needs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introduction to MassTransit: A Guide to Streamlined Messaging in C#</title>
      <link>https://ardalis.com/introduction-to-masstransit-csharp-guide/</link>
      <pubDate>Thu, 28 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/introduction-to-masstransit-csharp-guide/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re interested in building distributed, scalable, and robust applications in C#, you may have heard of MassTransit. This open-source messaging framework simplifies working with message brokers like RabbitMQ and Azure Service Bus, allowing you to focus more on business logic and less on infrastructure concerns.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-masstransit&#34;&gt;What Is MassTransit?&lt;/h2&gt;&#xA;&lt;p&gt;MassTransit is a free, open-source distributed application framework for.NET. It&amp;rsquo;s a service bus for sending messages between different parts of your application, or even across different applications. With MassTransit, you can implement various messaging patterns such as publish/subscribe, request/response, and more, using a consistent and easy-to-understand API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trunk-Based Development vs. Long-Lived Feature Branches: Which One is Right for Your Software Team?</title>
      <link>https://ardalis.com/trunk-based-development-vs-long-lived-feature-branches/</link>
      <pubDate>Thu, 14 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/trunk-based-development-vs-long-lived-feature-branches/</guid>
      <description>&lt;p&gt;When it comes to effective software development strategies, two distinct approaches often lock horns: Trunk-Based Development and Long-Lived Feature Branches. Each has its unique merits and challenges, and knowing which one to adopt can significantly influence your project&amp;rsquo;s success. In this post, we&amp;rsquo;ll delve deep into the pros and cons of both approaches and even show you a C# example demonstrating how to safely integrate work-in-progress code into the mainline.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a Resilient Email Sending Method in.NET with SmtpClient, Retry Support, and the Outbox Pattern</title>
      <link>https://ardalis.com/building-resilient-email-method-dotnet-retry-outbox-pattern/</link>
      <pubDate>Fri, 08 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/building-resilient-email-method-dotnet-retry-outbox-pattern/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the world of software applications, email sending functionalities are indispensable. From password resets to notifications, you can&amp;rsquo;t afford to let a hiccup in the network or an SMTP server issue derail you. So how do you ensure reliability in email operations? In this post, we&amp;rsquo;ll dive into creating a resilient email sending method in.NET using the &lt;code&gt;SmtpClient&lt;/code&gt; class and incorporating retry logic. Plus, we&amp;rsquo;ll go a step further by discussing how to use the Outbox pattern to preserve email content in case of failures.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET Core Clean Architecture Template v8 Released</title>
      <link>https://ardalis.com/aspnetcore-clean-architecture-template-version-8/</link>
      <pubDate>Mon, 28 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://ardalis.com/aspnetcore-clean-architecture-template-version-8/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve just published a new version of my Clean Architecture Solution Template for ASP.NET Core applications. This is version 8 of the template, though to be clear it is still targeting the current version of.NET (.NET 7). I&amp;rsquo;ll create another update once.NET 8 ships in November 2023.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-new&#34;&gt;What&amp;rsquo;s New&lt;/h2&gt;&#xA;&lt;p&gt;This version introduces some pretty major changes, which I&amp;rsquo;ll highlight here. The biggest ones have to do with:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Streamlining the template so it has less code&lt;/li&gt;&#xA;&lt;li&gt;Focusing on APIs (not razor pages or views)&lt;/li&gt;&#xA;&lt;li&gt;Introducing a new UseCases project&lt;/li&gt;&#xA;&lt;li&gt;Removing the SharedKernel project.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve also added a separate sample application so users can see examples of how they might want to organize their code (without that necessarily being in the template&amp;rsquo;s output).&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
