Steve Fenton


Steve Fenton is a four-time Microsoft MVP for developer technologies. He’s a Software Punk, an author, a programming-architect, a pragmatist/abstractionist, and a generalising-generalist. His day job spans the worlds of Product Management, Data and Analytics, Support, and Software Development. These are brought together in the DITE Cycle. Like many of you, he’s too busy to remember all of this stuff, so he writes it all down here.

Steve studied Psychology at OSC, and Anarchy in the UK: A History of Punk from 1976-1978 at the University of Reading.

A Note From Steve

The primary audience for the writing found herein is me. It’s super-easy to forget stuff if you don’t write it down, as I did the second time I had to fix a really tricky certificate problem in .NET. If only I had written down the answer, I could have saved hours of irritating replays of all the same steps I had used to find the problem in the first instance. My goal in life is to start a punk revolution in software development. I am also secretly S. M. Fenton the author of The Vanishing Room.

Recent Thoughts

You can review my full archive of thoughts, but the most recent entries are listed below.

A Perspective on Laws of Software Development Posted in: Programming - There are two basic types of natural laws, or laws of nature. Universal and probabilistic. Universal laws of nature state the when you find one thing, you will always find some other specific thing or things. Probabilistic laws of nature say that things are commonly found together. Some examples may help. If you drop a […]
C# Namespace Declarations Posted in: Programming - Unlike my recent article on Global Using Statement and Code Clues, the new namespace declarations have no trade offs and you should just auto-fix them in your whole project and move on with your life. Here’s how we do namespace before namespace declarations: namespace Fenton.Sample.UI { public class Example { } } …and here is […]
C# Caller Attributes Make Tracing and Logging Easier Posted in: Programming - If you wanted to include information about your source code in a trace message, there would be quite a lot of prep work to do before you could actually write a message out. Let’s use the below WriteTrace example to show what this does to your application. public void WriteTrace(string message, string memberName = "", […]
Stripping Times from Dates in C# Posted in: Programming - This is a surprisingly common problem in C#, where you need to take a DateTime and strip off the “time” bit to leave you with a representation of a day. Currently, you can do it by creating a new DateTime and passing only the parts you want to keep, like year, month, and day. DateTime […]
DotNet Publish, GitHub Actions, and Octopus Deploy Posted in: Automation, Programming - This was the first time I needed to create an end-to-end process with GitHub Actions and Octopus Deploy. Here’s how I did it. The set up is a .NET (Core 3.1 currently) website that has an existing Publishing Profile that I have been using to create the artefacts as I’ve been testing different hosting scenarios. […]
Type Coercion vs Type Conversion Posted in: Programming - The key difference between type coercion and type conversion is that type coercion is always implicit, whereas type conversion can be either implicit or explicit. In other words, “type conversion” refers to the general process of changing a type, whereas type coercion refers more specifically to the implicit conversion of a type. We can further […]
Global Using Statements and Code Clues Posted in: Programming - I wrote back in 2018 about how you can use your using statements as a clue to how you might dismember a big class. This makes it easier to see the important parts as you remove things that you “kinda have to have” to make the important stuff work. The trick is pretty simple… You […]
The Boy Who Cried Wolf – An Alternative Ending Posted in: Opinion - As ancient fables go, The Boy Who Cried Wolf is certainly one of the big ones. For those who haven’t yet heard it, well done! Teachers love to tell this story in an attempt to instruct students on morals, though this is misguided as the story may increase a child’s propensity to lie (NurtureShock: New […]
How to get Accurate Element Width as a Floating Point Number Posted in: Programming - This is going to be a quick one, as I’m writing this down so future me doesn’t have to set fire to several hours of debugging. I’ll explain more background after I give you the answer. If you find you are getting the wrong answer for element sizes, you are probably using this, where elem […]
Counting a Non-Generic IEnumerable Posted in: Programming - You rarely come across them in 2021, but there is such a thing as a non-generic IEnumerable. They exist in System.Collections rather than System.Collections.Generic. Since .NET 2 pretty much everyone is full-on using generics as they are the best thing since curly-braces… but occasionally you find one and even more rarely you need to count […]