Similar endpoints, swagger pages, and a DevOps fail

After an unexpected debugging session, some thoughts on APIs, similar endpoints, swagger, and an ugly DevOps fail.

  Dec 12, 2023 (rev. Oct 11, 2025) ·  4 min

Diligence, laziness.. or both?

Funny how a little due diligence mixes so well with a healthy interest in avoiding unnecessary future work.

  Dec 4, 2023 (rev. Oct 10, 2025) ·  2 min

A swirly mass of shared code

I heard a story recently, where a team was asked, after spending months adding a set of features to a codebase, to remove a specific feature from very early on in the project, right before the release date. Other features had been built around it and on top of it. Without necessarily even intending too, the devs that came after that code was written would’ve had to understand it in order to add to it. I don’t know what the outcome was, but that’s not an easy ask. ...

  Nov 14, 2023 (rev. Oct 10, 2025) ·  3 min

If/else vs switch/case pattern matching

A look at if/else, switch/case, pattern matching, other options … and which is best. (spoiler: none ;) )

  Nov 3, 2023 (rev. Oct 11, 2025) ·  9 min

What are list patterns in C#?

C# has been getting a lot of pattern matching love in recent years, like with list patterns in C# 11. The problem is knowing where and how to use it.

  Aug 31, 2023 (rev. Oct 11, 2025) ·  8 min

Even in failure, an increase in understanding is a win

When what we’re trying to accomplish fails, the extra knowledge and clarity we get just by making the attempt is a win all by itself.

  Aug 24, 2023 (rev. Oct 10, 2025) ·  3 min

What are generic attributes in C# 11?

Generic attributes increase the flexibility of a very early .NET feature. Let’s try using them and see how it keeps our code DRY.

  Aug 23, 2023 (rev. Oct 11, 2025) ·  6 min

Simple ways to notify a user without a MessageBox in WinForms

When sending notifications in a WinForms app, a MessageBox is the only way to go… or is it? Let’s get creative and see what else we might do.

  Aug 16, 2023 (rev. Oct 11, 2025) ·  6 min

How to call an async method from a synchronous one, without deadlocking

Writing async code whenever possible is great, but how do we do it when we’re stuck with legacy (and very synchronous) code?

  Aug 11, 2023 (rev. Oct 11, 2025) ·  7 min

What's the difference between singleton, scoped, and transient?

It’s trivial to register a dependency in a .NET API, but it’s important to clarify a few terms that drastically change a dependency’s lifetime.

  Jul 28, 2023 (rev. Oct 11, 2025) ·  3 min