RSSAmplifier

Blog

Ardalis.com on Ardalis (Steve Smith)

Recent content in Ardalis.com on Ardalis (Steve Smith)

ardalis.comRSS feed ↗50 posts

Latest posts

Why Care About Agent Authored Code Quality

A developer I was chatting with recently raised a question I’ve been hearing more and more: 
 
 Since we can produce code so fast now, does the code actually matter that much? Assuming the code fulfills the requirement through actual user testing, who cares what the code looks like? We’re just sitting at another layer of abstraction. Once we got 2nd and 3rd generation…

Setting Up Claude Code Agent Teams With Wsl2 and Tmux on Windows

Claude Code’s agent teams feature lets you spin up multiple Claude instances that work
in parallel, each in its own visible terminal pane. On Windows, visualizing this properly requires WSL2 and
tmux — here’s how to set it up from scratch. 
 Prerequisites 
 
 Windows 10/11 with WSL2 available 
 A Claude Code subscription (Pro or Max) with Opus 4.6 access 
…

Optimizing AI Agents with Progressive Disclosure

AI coding agents are only as good as the information you put in front of them. Every byte of context you load into an agent’s context window is space that could have been used for the code, conversation, or task at hand. Getting this balance right requires the same design instinct that makes good UIs, great games, and well-structured APIs: Progressive Disclosure . 
 What Is Progressive…

How Software Developers Fail

“Software developers fail in two ways: they build the thing wrong, or they build the wrong thing.” 
 These two separate failure modes are worth exploring independently, because they have different root causes and very different consequences. And Agentic AI “developers” face the same challenges, but can do both much more rapidly than their human counterparts. 
 The…

Claude Throttling and the Cloud

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 “we need to buy more servers” conversations. So why is Anthropic—one of the best-funded AI companies in the world, running on the infrastructure of Amazon…

Own What Makes You You

If you want to stand out, you need to have your own identity. This is true whether you’re talking about you, the person, individually, or your business. You can’t really have your own distinct 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’m mainly focusing on businesses and their branding and…

.NET Conf Most Popular Sessions Tool

DotNetConf (.NET Conf) 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. 
 Also, why do I keep giving (updated) versions of the same session, Clean Architecture, each year (like last…

AI Benefits - But at What Cost?

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? 
 As many businesses downsize staff or pause hiring to see how these new models and tools actually perform in the…

Use Asciinema and Powersession on Windows

Introduction 
 I recently became aware of Asciinema when I saw that the Aspire docs are using it to document installing their CLI . As someone who creates a lot of content (or used to, anyway) and docs, this seems like a really useful tool! But it doesn’t “just work” on Windows, so I figured I’d document how to get it working on Windows for future me. 
 Asciinema…

Llms Need Mark as Answer

Introduction 
 Today’s LLMs have already ingested basically all of the publicly available information they can to build their models. In order to improve further, they’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…

2025 Year in Review

Better late than never, as I’m writing this in early February 2026… 
 First, here are a few links to past years in review: 
 
 My 2017 Year in Review 
 My 2018 Year in Review 
 My 2019 Year in Review 
 My 2020 Year in Review 
 My 2021 Year in Review 
 My 2022 Year in Review 
 My 2023 Year in Review 
 My 2024 Year in Review 
 My Year in…

Why a Free Market Fire Department System Beats the Archaic Public Model

By a devoted advocate for individual choice 
 
 Introduction: Fire Protection, Reimagined 🚒 
 In a nation that prizes personal responsibility, it’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…

Single File Test Suites in Dotnet Csharp

This article is part of the 2025 Advent of C# Code Calendar , which publishes 2 C# articles every day in December leading up to 25 December. 
 NOTE: Originally targeted xUnit v2; now updated to xUnit.v3 . 
 Introduction 
 One of my favorite new features in .NET 10 is C# file-based apps (or file-based C# programs if you prefer) . With this feature, we can create individual .cs files and…

Use cd - in Powershell 7 to Return to Previous Directory

Introduction 
 A command that many shells have had forever and that PowerShell has had for a long time as well is ‘cd -’ which means “change directory to previous folder”. This means you could do something like this: 
 
 
 1
 2
 3
 4
 5
 6
 
 
 > cd c: \ dev 
 c: \ dev 
 > cd c: \ temp 
 c: \ temp 
 > cd -…

How to Update .NET on Wsl or Ubuntu

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. 
 First, determine what version of dotnet you already have using this: 
 
 
 1
 2
 
 
 dotnet --version
 > 10.0.100-rc.1.25451.107
 
 
 Yep, I need to…

Ardalis Fall 2025 Speaking Tour Review

The last two years, I’ve had the good fortune to be invited to the Netherlands for TechoramaNL, and I’ve been able to bring my wife and business partner Michelle and our twin boys along as well. It’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…

The Ardalis Cli

Back in the .NET 10 Preview days, Andrew Lock wrote about running one-off dotnet tools with DNX . 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 Ardalis CLI tool, which mostly just gets you access to content from me in your terminal. 
 You can find the source for my ardalis command line…

Use TimeSpan Or Specify Units In Duration Properties And Parameters

A special case of primitive obsession is the use of an int value to describe a span of time. You see this all the time in various APIs, and it’s a frequent source of bugs and confusion. Developers are forced to either guess or try to find the documentation that describes what units int timeout or int delay actually uses. 
 Having a retry delay of 1 millisecond instead of 1 second, for…

Ardalis Fall 2025 Speaking Tour

I may have gone a bit overboard this year… I’ve scheduled myself for 5 developer conferences in 4 weeks during October 2025! If you’re interested in learning about Clean Architecture , SOLID principles , microservices , modular monoliths , and other software architecture best practices, here’s where you can find me speaking across three countries and online. 
 Whether…

How to Combine MP4 Files on Windows Using FFmpeg

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 FFmpeg — a powerful open-source utility that can join, convert, and manipulate video files. 
 This guide walks you through installing FFmpeg, preparing your files, and performing a lossless merge (no quality…

How to Install Nerd Fonts and Icons in PowerShell 7 on Windows 11

If you’re setting up a polished dev terminal experience with icons, custom fonts, and PowerShell 7 on Windows 11, here’s a step-by-step guide that actually works. We’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, check out my YouTube video on prettying up…

GenAI is the new Offshoring


 I originally posted this on LinkedIn / BlueSky but I’ve found that it’s nearly impossible to find (searching for “AI is the new offshoring” or"genAI is the new offshoring" both fail to find it) so I’m cross-posting here and adding a bit more context. 
 Twenty years ago, the internet and improved communications led to a massive push in US corporate…

Managing GenAI Coding Risk Like an Investment

Generative AI tools have greatly improved in their ability to generate large amounts of code, quickly, to support software development tasks. They’re fast, confident, and in some cases even creative. But they’re also fallible, occasionally destructive, and always somewhat unpredictable. 
 If you’ve ever used GenAI to bang out a prototype in hours instead of days, you’ve…

Ardalis Specification v9 Released

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’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…

2024 Year In Review

Better late than never, as I’m writing this in late February 2025… 
 First, here’s a few links to past years in review: 
 
 My 2017 Year in Review 
 My 2018 Year in Review 
 My 2019 Year in Review 
 My 2020 Year in Review 
 My 2021 Year in Review 
 My 2022 Year in Review 
 My 2022 Year in Review 
 My Year in Review Post Checklist 
…

When QA Keeps Finding Bugs

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? 
 QA…

Avoid Using C# Events in ASP.NET Core Applications

This post is part of the C# Advent Calendar 2024 - check out all of the C# articles from this year! 
 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…

Interfaces Describe What - Implementations Describe How

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’ll break down the difference and why it matters. 
…

You Should Blog

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’t, let me give you some compelling reasons why you should. This is advice I frequently give to members of my developer group coaching program at devBetter.com . 
 Watch the Video 
 
 1. Sharpen…

From Microservices to Modular Monoliths

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. 
 Microservices 
 Microservices have been all the rage for the past several years. They offer a way to break up large, monolithic…

Modeling Navigation Properties Between Aggregates or Modules

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 my modular monoliths course , which I thought others might appreciate. 
 Student Query 
 Modular Monolith course question…

Comparing Unit Testable Code with Maintainable Code

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. 
 Introduction 
 When discussing software quality, two important concepts often…

Effectively Sharing Resources Between Modules in a Modular Monolith

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 my modular monoliths course , which I thought others might appreciate. 
 Student Query 
 Hi Steve, I have another question…

Clean Architecture Sucks

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’d joined. The team had, ostensibly, been following Clean Architecture , but the code they had produced was a mess. Their conclusion: 
 
 Clean Architecture sucks. 
 They led with: 
 
 Clean…

Navigating the Edges of Technology in Software Development: Bleeding, Leading, Dull, and Rusting

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’ll call the…

Stop Debugging and Start Running in Visual Studio


 NOTE: Watch the video above to see actual timings of starting with and without debugging. Vote for this feature request to make Run vs Debug more obvious in Visual Studio. . Thanks! 
 I work with a lot of different.NET developers as a trainer, architect, and consultant with NimblePros . One thing that I’m frequently pointing out to them is the difference in startup speed for their…

5 Rules for DTOs

If you don’t like reading, here’s my YouTube video with samples that covers why these 5 rules will help you write better DTOs: 
 
 What’s a DTO? 
 A DTO is a Data Transfer Object. Its job is to transfer data, and it can be used both to send data and to receive it. Often, data transferred will use different types (possibly even different programming languages and…

An Active Local NuGet Server

As I’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. 
 NuGet already has a local NuGet cache. You’ll find it in your user…

Introducing Modular Monoliths: The Goldilocks Architecture

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…

Hello, MongoDB - Getting Started with Mongo and dotnet 8

Integrating.NET Core with MongoDB in a Dockerized Environment 
 Hello, fellow developers! Whether you’re building a new project or integrating into an existing one, this guide is your starting point for a “hello world” level application in the.NET 8 plus MongoDB stack. Let’s get to it! 
 Prerequisites 
 Before we begin, ensure you have the following installed on…

Hello, Redis - Getting Started with Redis and dotnet 8

Integrating Redis Caching in.NET 8 Applications 
 Redis is an open-source, in-memory data structure store, used as a database, cache, and message broker. It’s known for its speed and flexibility, making it an excellent choice for caching in modern applications. In this article, we’ll explore how to use Redis for caching in a.NET 8 application, covering both setting up Redis using…

Solved! Visual Studio.http File Not Sending Authorization Header

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. 
 The Problem 
 I’d built a simple ASP.NET Core webapi project using the default template. I was using the built-in support for.http…

Log Request Headers Middleware for ASP.NET Core

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. 
 What is Middleware 
 If you’re not familiar with middleware, it’s a set of functions (“request delegates”) that are executed in a…

2023 Year in Review

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. 
 
 My 2017 Year in Review 
 My 2018…

Scaling Your Software Team: Development vs. Hiring

Scaling up and scaling out, originally application terms, offer a fresh perspective on team development. In team contexts, scaling up involves enhancing existing members’ 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…

How to Embed a YouTube Video in GitHub ReadMe Markdown

I keep wanting to do this and forgetting how, so I’m writing it down. Here’s how to embed a YouTube video in a GitHub ReadMe markdown file. 
 Thanks for this Stack Overflow answer for the tip. 
 Step 1: Get the YouTube Video ID 
 The YouTube video ID is the part of the URL after the v= . For example, in the URL…

New Course - Refactoring to SOLID C# Code

I’m thrilled to announce the release of my latest Pluralsight course, Refactoring to SOLID C# Code . This course is designed for software developers, architects, and anyone interested in enhancing their coding skills, especially in the C# programming language. 
 Description 
 Legacy code is often difficult to maintain and extend. In this course, Refactoring to SOLID C# Code,…

Understanding Migrations, Snapshots, and Synchronization in Entity Framework Core

Entity Framework Core: Understanding Migrations, Snapshots, and Synchronization 
 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’ll also clarify the…

Process Bloat: The Silent Killer of Developer Productivity

Introduction 
 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: Process Bloat . This bureaucratic monster not only hampers innovation but becomes a silent killer of…

Principles of Lean Software Development

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: 
 1. Eliminate Waste 
 The first principle of Lean Software Development is to eliminate waste, a concept…