Urs Enzler

@UrsEnzler
419 Followers
109 Following
60 Posts

Software engineering, architecture and design stuff, mainly on .Net, F#, and Azure.

Co-Host of .Net user group Central-Switzerland.

#fsharp
#dotnet
#SoftwareArchitecture

Blogwww.planetgeek.ch
LinkedInwww.linkedin.com/in/ursenzler/

The start of my new blog post series about how we do Event Sourcing. The first post starts with a simple projection-only approach: https://www.planetgeek.ch/2026/04/14/event-sourcing-simple-is-often-enough/
You'll see why we don't use event numbers for ordering, but timestamps, and why this is our default approach.

#EventSourcing #dotnet #fsharp

Lately, I see a lot of posts saying we need a robust suite of automated tests to ensure AI agents produce quality results.

Keep in mind that one cannot test quality into software. Automated tests are a necessity, but they are not sufficient as a sole approach.

I wouldn't ship a feature without first running an exploratory testing session. So many things can go wrong that we can't specify explicitly; only exploratory testing finds these.

And I want a dry run on difficult data migrations, too.

I'm not a fan of "let's throw more resources at the problem" solutions. What currently happens in the AI-assisted software development community is, however, exactly this:
From single LLM via single agent (repeat until succeeded) to multi-agent setups (giving themselves feedback to iterate on) - burning tokens like there is no tomorrow (or no token limit, if you care more about your money than the planet 😅 ).

1/2

I use the great AZD plugin to make working with Azure DevOps PRs simpler for JetBrains IDEs (https://plugins.jetbrains.com/plugin/22319-azd ). One of its many features is an AI-driven PR review. It gave me many good pointers, but it should sharpen its F# knowledge 😀
I don't have to search and check all instances of pattern matching on `Codes` as it suggests (as shown in the image). The compiler does that for me.

btw: we use the PR tooling for releasing, not as a quality gate.

#fsharp #dotnet #JetBrains

Sketchnote from Wednesday's .NET user group Zentralschweiz meet-up with Glenn F. Henriksen about practical advice to build glorious monoliths:

#sketchnote #dotnet #monoliths

A typical Monday, which is also the first day of the month, is ending for our application for time-tracking and the like.

The first two days of every month see higher loads because people close their previous month's accounts.

Thanks to Azure Web Apps, Azure Functions, and Azure SQL, everything scales automatically with load.

#Cloud

I follow what is happening in the AI/LLM/agents space as closely as I can. Lately, it sometimes feels like backstepping into the last millennium:

"We need a correct, complete specification so that agents can then implement it autonomously."
Replace agents with software developers, and it sounds like pre-2000.

1/2

Why didn't I find this great feature of Rider earlier?
It makes initialising records so much easier.

And with a quick invocation of Fantomas, the record is reformatted to match our settings regarding { } alignment. We prefer the Aligned option.

#fsharp #JetBrainsRider

Every decision in software development is a trade-off decision.
Should I use TDD or not to develop that piece of code?
Relational DB or table storage?
Model with bounded contexts or not?
FP or OOP?

If you think one option is always the best, you either work in a narrow context or you don't know enough about the alternatives.

Since I get fewer and fewer opportunities to give conference presentations, I probably have to get back to writing more blog posts to get thoughts out of my head and make room for new ones - even if almost no one reads them.

Giving presentations and writing blog posts help me find my peace of mind. 😌

#dotnet #fsharp #csharp #SoftwareArchitecture