Not just...
An attempt at making something amusing by reusing snippets of AI-generated text. Read blog post
An attempt at making something amusing by reusing snippets of AI-generated text. Read blog post
What, if anything, has the impact of OKRs been for software teams that have adopted the practice? Read blog post
If you want to do a talk at a software conference, it’s not enough to figure out what you want to talk about. You also need to figure out what you want to say. Read blog post
Playing Turing’s imitation game 24/7 sucks. But the good news is we don’t have to. We can just walk away and do our thing. Read blog post
Politeness is supposed to be symmetric. That is, reciprocal between people. But unfortunately it’s not always like that. Read blog post
How do we deal with schemaless JSON documents in applications that continually evolve? I propose attaching a toe tag to each document, linking it to an explicit and immutable schema. Read blog post
I accidentally discovered a poem about human connection in the middle of all the abstracts submitted to a conference. Read blog post
I propose a radical new heuristic to be applied before replying to things online: ask yourself if the original poster could already know. Read blog post
Book clubs are great in theory, but they’re hard to do in practice. The reason is simple: they don’t make the problem of having to read the book go away. Read blog post
In C#, nullable means something very different for reference types and value types, but the syntax is the same for both. That’s bound to lead to problems. Read blog post
The typical ASP.NET Core Web API relies heavily on at least two kinds of “magick”: model binding and generation of OpenAPI documents. They are joined at the hip through C# type declarations, which are the sources of OpenAPI schemas and the targets of model binding. In this blog post, I take a look at the gotchas and caveats and shortcomings of this arrangement. Read blog post
You can’t read every book. Which ones can you safely ignore? This blog post contains a handful of heuristics for dodging boring books and finding something interesting to read. Read blog post
When someone uses a big word like socio-technical, you would think it would be a starting point for discussing interconnectedness, adaptivity, non-linearity and emergence in those systems. Alas, Read blog post
Sometimes a tomato is just a tomato. Most times even. When is a tomato not just a tomato? Almost never. Read blog post
When we connect software systems through APIs, we also connect the people who work on those systems. Socio-technical forces tend to favor certain patterns of relationships between provider and consumer. This blog post describes four patterns that I have observed many times in my career: The Millstone, The Mountain (or the Volcano), The Rapids (with or without Beaver Dams) and The Sock Puppet. Read…
The banana test is a simple heuristic to distinguish gimmicks from lasting value. Read blog post
What’s the opportunity cost of being swept up in hype? Read blog post
A few words about self-help math. Read blog post
The passing of time is the greatest unsolved problem in software. Technical debt is not an option, it is the inevitable by-product of change and inertia. Over time, we will drift into debt. Read blog post
What is autonomy for a software team? What do we want it for? Do we really want it? Read blog post
Code, alas, is dead. It falls upon the poor programmers to make it appear to be alive. Read blog post
Let’s never discuss if programming is art or science again. Read blog post
I am coming to terms with being a programmer. Read blog post
On identity and context-switching during the pandemic. Read blog post
How and why intra-team mobs can help fight the rigidity of many software organizations and their code. Read blog post
A critique of “Out of the Tar Pit”. Read blog post
JSON data can be represented in many different ways in a .NET application (e.g. explicit JSON model, JSON-friendly DTOs and plain old dictionaries). Each representation has their own characteristics in terms of flexibility, readability and verbosity. In this blog post I look at the trade-offs involved and make some recommendations. Read blog post
We’ve messed up JSON serialization in .NET. In an effort to make it easy and magical, we have turned something simple into something complicated and error-prone. To fix it, we must get rid of accidental complexity and let the serialization process be as simple and stupid as possible. Read blog post
A description of my identity crisis as a programmer, why I’ve rejected craftsmanship and crafting, and what I think we should do instead. Read blog post
The world of programming contains realms of strange values for things that may happen or may have happened, collections of things, things that may or may not be things, and so forth. How do you work with such values in a uniform way? Read blog post
What does adding or multiplying integers, concatenating strings, appending lists and composing functions have in common? Read blog post
What does it take to enable LINQ syntax for Nullable? I consult the C# specification and write some unusual code. Read blog post
An implementation of Peter Henderson’s Functional Geometry in F#, with a step-by-step guide to make an SVG reproduction of Escher’s Square Limit. Read blog post
A fable about how code quickly can deteriorate under new requirements if we don’t have a conceptual model with the right abstractions to express both new and old requirements. Read blog post
The problem with null. Read blog post
Appeal to pragmatism is a logical fallacy. We should make better arguments. Read blog post
A string in a program is never just a string. There are always assumptions about what kind of string it’s going to be. Read blog post
Technical debt is a symptom. Read blog post
We’ve got it backwards when we say that “naming things is hard”. The problem isn’t naming, the problem is in coming up with the right things to name. Read blog post
An implementation of the Diamond code kata in F#. Read blog post
Using extension methods in C# to implement a poor man’s version of aspect-oriented programming. Read blog post
Fixing an issue with rethrows in the approach described in the previous blog post. Read blog post
A way to attach and compose exception handling blocks to Funcs using extension methods. Read blog post
Read blog post
Read blog post
Read blog post
Read blog post
Read blog post
Read blog post
Read blog post