Published in Ingeniously Simple·Mar 10Process is an excuse to not thinkWhat is “process”? Let’s say process is a rule that you follow instead of independently deciding what to do. For example, daily standups are a process: everyone agrees to meet up at a certain time each day rather than arranging ad-hoc catchups. Another example of process is code style: we…Agile2 min readAgile2 min read
Published in Ingeniously Simple·Aug 22, 2022Easy GDPR-safe exception messages with C# interpolated stringsHow a brand new C# feature can help with safe, painless, detailed exception reporting. Let’s say you’re writing an application that reads config files, and you need to handle errors: try { config = ReadConfig(configFilePath); } catch { throw new MyAppException("Failed to read config"); } This is largely sensible code…Csharp4 min readCsharp4 min read
Published in Ingeniously Simple·Apr 29, 2022.NET benchmarking and profiling for beginnersThere comes a time, for most programs, when we need to make them faster. If you’re new to .NET, or have only tried profiling tools in older versions of .NET Framework, you might not be familiar with what tools are available for .NET Core / .NET 5. …Software Engineering7 min readSoftware Engineering7 min read
Published in Ingeniously Simple·Sep 16, 2021Typescript “casts” are not castsAt Redgate we recently ran an internal typescript training course, and I wanted to highlight a common misconception I saw a couple of times. To explain what I mean, let’s compare some similar-looking code in C# and typescript. …Typescript4 min readTypescript4 min read
Published in Ingeniously Simple·Apr 27, 2021How to teach things badlyToday’s idea isn’t directly technical, but by the end it should hopefully be clear how it can apply to programming and software development in general. Recently I’ve been caught up in watching chess videos on Youtube. …Chess3 min readChess3 min read
Published in Ingeniously Simple·Mar 9, 2021Efficient React editing with vim-surroundWhat makes learning vim worthwhile? While I’m far from a vim guru, and it often gets in the way, it speeds up editing code to the point where I think it’s definitely worthwhile. …React4 min readReact4 min read
Published in Ingeniously Simple·Jan 4, 2021Managing unmanaged objects in C#A couple of months ago, we ran into a tricky race condition with the way we were handling temporary files. It took a while to track down, but ended up being a good example of how C#’s garbage collection (GC) works, so I wanted to turn it into a blog…Software Development6 min readSoftware Development6 min read
Published in Ingeniously Simple·Jun 20, 2020Member-onlyBuilding a cli parser from scratchThere are plenty of CLI parser libraries out there for pretty much every programming language under the sun. However, sometimes you might not find one with the right combination of features you want, or maybe you just want to understand what makes them tick. …Software Engineering10 min readSoftware Engineering10 min read
Published in Ingeniously Simple·Mar 31, 2020Being deliberately meaninglessA quick one today: just a common thread between a bunch of different ideas. …in examples Metasyntactic variables (foo, bar, baz, etc) are an obvious example of being deliberately meaningless. …Software Development3 min readSoftware Development3 min read
Published in Ingeniously Simple·Feb 21, 2020Command/query objects and beyondFirst, a quick story: Recently I’ve been reworking a Redgate-internal chatbot I wrote a few years ago. It’s done pretty well over the years, but I wanted to take it off the random VM it was running on and make it cloud-hostable. The biggest change required was to rewrite the…Software Development5 min readSoftware Development5 min read