RSSAmplifier

Blog

Dan Clarke

Software developer, consultant, podcast host, speaker, Dometrain author, community organiser, and Microsoft MVP.

danclarke.comRSS feed ↗20 posts

Latest posts

OpenSpec - a lightweight AI-driven spec framework

I kept on hearing about these new "spec-driven development" tools for AI coding agents, and I was curious to have a play. I initially tried GitHub Spec Kit , but I found it a bit heavyweight, and to be honest I just couldn't get on with the term "constitution"! Trivial, I know - but it just grated on me. Another popular one is OpenSpec . Nice and lightweight, and has given me a few really nice…

The Many Use Cases of AI Coding Agents

I've been using AI coding agents a lot lately - tools like Claude Code, GitHub Copilot CLI, and OpenCode. And the more I use them, the more I keep discovering new use-cases and ways they can be used. Most people think of AI coding tools as just that - tools that write code. And yes, they do that, and they do it really well - but they also do much more than that. Writing Code First, let's start…

Developers are System Thinkers, not Code Monkeys

There's a lot of concern amongst developers at the moment that AI is going to take our jobs. And I get it - things are moving fast . But I think a lot of this fear comes from a misunderstanding of what we actually do. We're not typists. We're not "code monkeys". We are system thinkers. First of all though - I'm going to be blunt. If you're not heavily leveraging AI right now - learning it, playing…

Year in Review: 2025

Happy New Year everyone! 🎉 Let's start off with a few small confessions... It's been quite a few years since my last blog post!🙈 I intended to get more into my YouTube channel, but didn't publish a single video! 😬 (though I did publish one on Nick Chapsas's channel! - more on that later) I only published 10 podcast episodes The first two are definitely on my list of new year's resolutions to do…

Source-controlling Config files in Git (dotfiles?)

I've recently setup some of my various config files to be source-controlled in a Github repository. Here are some examples of what I mean by config files... My .gitconfig file - which includes various aliases and settings My Powershell profile - which likewise, includes various aliases and environment variables, etc OhMyPosh theme - customised command line setup (see screenshot below) Windows…

Who should mark PR comments as resolved?

Before reading this post - note that when I say "resolving", I'm only talking about clicking the "Resolve" button for that particular comment thread. I am not talking about actually fixing the issue that the comment is describing. The TLDR; version is that the person who started the PR comment should be the person to mark it as resolved. Also note that I'm talking about PRs within a team - not…

Redefining the term '10x Developer'

TLDR; - The term "100x Develop ment " is better because it focuses more on the nature of software development, not an individual. And the 10x is just too small of a multipler. I was recently honoured to be a guest on The .NET Core Podcast to chat with Jamie Taylor about developer productivity. The full episode can be found here , or in your favourite podcast app. In it, I asked Jamie what he…

Raising Awareness of Aphantasia

Last year, whilst browsing the web on my phone, I learnt something that blew my mind. I can't remember exactly what (or why) I googled about 'visualisations', but some of the results said things like "Did you know that some people can't see images in their mind's eye?!" . I read that, and thought - "Wait? What! Some people can ?!". So it turns out that ~3-5% of the population have something called…

Year in Review: 2021

It's New Year's Eve, and I've just remembered that I haven't done a 'year in review' blog post this year - so I'm quickly knocking this out now! In fact, I'm sorry to say, I haven't blogged much at all this year - with my primary focus being on the podcast. This will only be my second blog post of the year! Hopefully, the podcast content makes up for the lack of blog content! So let's start with…

Snapshot Testing with Verify

This post is part of two awesome advent calendar initiatives - the .NET Advent Calendar 2021 , and the C# Advent Calendar 2021 . Check out both links for awesome community blog posts! In a recent episode of my podcast (The Unhandled Exception podcast), I was joined by Simon Cropp to chat about a form of testing called snapshot testing - which has completely changed the way I now write my tests!…

Year in Review: 2020

This year has obviously been a lot different than everyone expected. I feel extremely fortunately and lucky to be in an industry that naturally makes it easy to work from home. In fact, remote work is something I've wanted to try full-time for quite some time, and this year has not only forced it to happen, but also made it more normal in our industry (hopefully now moving forwards). It's just a…

Starting 'The Unhandled Exception' podcast

I have some exciting news! As you may already know if you follow me on Twitter, I've recently started my very own podcast!! TLDR; - If you're not interested in the whys or hows , and just want to listen, then head over to The Unhandled Exception Podcast website . This includes show notes, and also links to the major podcast apps, so you can listen using your favourite podcast app (and hopefully…

Standing desk: Part 1 - Initial thoughts

As an industry, we spend far too much time sat down. A quick Google search will show plenty of research suggesting that this is very bad for you in many different ways. I've very recently invested in a standing desk, and thought I'd share what led up to me buying it, which one I chose, and also my initial experiences using it. This will be a 'part 1', with a follow up in about 6 months. I work…

Git: Dealing with unrelated changes whilst working on a feature branch

How many times have you been working in a Git feature branch, and come across something in code that you want to change, but isn't related to the feature your on? Perhaps a code tidyup, or fixing some unrelated warnings? What do you do? The long way You could do it the very long way and interrupt your workflow... Stash/commit all your current changes; switch to the main branch; make these…

Comparing .NET Mocking Libraries

There are quite a few different mocking libraries in .NET. Moq and NSubstitute seem to be by far the main ones I hear that developers use. I've used both of these in different projects, and really like them both. Whilst my preference leans towards NSubstitute, I'd be happy using either. Out of interest, I posted a Twitter poll to see what other people preferred, and the results and replies were…

Multi-page login screens, hidden username fields, and LastPass!

I've just recently had an issue where I'd created two accounts for the same website - one for myself and one for my wife. I quickly hit a very strange issue where if I logged into my wife's account, I would end up in my own account! I must admit, I initially jumped to thinking that the website must have some appallingly terrible authentication code. It turns out I was wrong, and it's something…

Cleaner tests with XUnit's IAsyncLifetime and expression-bodied members

When writing tests, sometimes it can be tempting to dump a bunch of asserts into the same test to avoid duplication across multiple tests... public class MyTests { [ Fact ] public void SomeTest ( ) { var sut = new SystemUnderTest ( ) ; var result = sut . DoSomething ( ) ; result . StatusCode . Should ( ) . Be ( Okay ) ; result . Amount . Should ( ) . Be ( 123 ) ; result . UserName . Should ( ) .…

DevOps Tooling for Developers - we're so spoilt!

Last week I had a catchup meeting with a client about the progress of a platform I'm building for them, and showed them how the "devops" side of things works. Demoing it really struck me how insanely awesome all the tooling we have nowadays is, and also how much I take it for granted! I tweeted about it, but quickly realised as I was writing the multi-tweet Twitter thread , that a blog post would…

Pair Programming

I've recently started a new contract where we do 100% pair-programming. This is the first time I've done pair-programming on anywhere near this level. In the past, I've only ever paired on an ad-hock basis either to help someone else solve an issue, or vice-versa. This is an 8-hour per day contract, where other than meetings, we're pairing for all of those 8 hours. Sounds full-on? Well, actually…

Writing More Succinct C#

When looking at a lot of C# code nowadays, I find myself thinking "wow, that code could be made SO MUCH SMALLER!" . C# is a very flexible language, allowing you to write clean and functional code, but also very bloated code. There are a lot of things in the C# language that can help writing more succinct code - some older (like LINQ), and some which have been added in newer versions of C#. In this…