Blog by Daniel Westheide

Blog Post

Static Sites Without Big Tech Hosting

If you run a static website, you rarely think twice about hosting. GitHub Pages works, costs nothing, and the code is already there anyway. But “works” and “sovereign” are two different things. This recipe shows how to build a stack with statichost.eu plus Codefloe or Codeberg that is just as convenient, but stays in European hands, treats visitor data transparently, and does not depend on a transatlantic legal basis that is currently starting to wobble.

Blog Post

Faster Is Not Better: On Experimentation Culture and What It Costs

Faster experimentation sounds like an obvious advantage. But experimentation culture is not a universal paradigm. It is a product of a very specific context. And the people who bear the heaviest cost of poor product development never appear in any experiment.

Blog Post

The Agentic Trio

Blog Post

Using the space, not optimizing the treadmill

Features per unit of time is not a meaningful metric. What counts is whether they satisfy a real user need and contribute to a desired outcome. Agentic development opens up the space to finally take that seriously.

Blog Post

Accidental Complexity in the Heart of Software

Domain-Driven Design went mainstream over the last ten years – in parallel with a wave of digitalization and modernization projects. That is not a coincidence. And it explains a lot about why so many of these projects fail to deliver what they promise.

Blog Post

Hail Mary: Why domain knowledge cannot be extracted from experts

Developing with AI through the cognitive Lens

Blog Post

Spec-Driven Development is Domain-Driven Design’s Impatient Cousin

Spec-driven development tools like BMAD promise to fix the requirements bottleneck that agentic development teams face. But is it actually a good fit for your organisation?

Blog Post

Understanding AI Coding Patterns Through Cognitive Load Theory

AI coding assistants either severely harm learning or enhance it beyond manual coding—depending entirely on interaction patterns. A recent study reveals six distinct patterns with dramatically different outcomes. We’ll examine why through cognitive psychology and explore the study’s limitations.

Blog Post

AI and Elaboration: Which Coding Patterns Build Understanding?

Developing with AI through the cognitive Lens

Blog Post

Leave It Better Than You Found It

Leave your code better than you found it. This advice, also known as the Scout Rule, sounds so simple, but what does it look like in practice? This is the story of how I followed the advice and cleaned up a fat controller along the way, and how this unexpectedly enabled us to handle new requirements quickly and with minimal effort. It’s a lesson in habits and continuous architecture.

Blog Post

Speed vs. Skill

Every AI coding tool promises the same thing: unprecedented speed, effortless productivity, freedom from tedious work. The pitch is compelling. But what if feeling more productive and being more capable aren’t the same thing? Research shows that automation makes us feel more productive while eroding our skills. Let’s examine this tension through the lens of cognitive psychology.

Blog Post

First Agile, Then Agentic

Why AI Won’t Help You

Blog Post

Type-safe SQL queries in Java and Rust

In recent years, our industry has been in favour of strong typing and build-time verification to make certain classes of bugs impossible. How much influence has this trend had on how we can write SQL queries in Java? Let’s look at how typesafe SQL queries can be in Java, how this compares to what you can do in Rust, and consider the benefits and drawbacks of these different approaches.

Blog Post

Type-safe HTML templates in Java and Rust

The current fashion in our industry is to use static and strong typing wherever possible. How fashion-conscious is the Java community when it comes to HTML templating, though? Let’s have a look at what approaches at type-safe or build-time verified HTML templating are available in the Java ecosystem, how they compare to what’s available in Rust, and whether the benefits outweigh the costs.

Blog Post

Type-safe HTTP routing in Java and Rust

The Type-Safe Web Stack, Part 1

Blog Post

How we cut our website’s carbon emissions in half

Between 2010 and 2030, the environmental impact of the digital world is expected to triple. While network infrastructure and devices get more and more efficient, all of these improvements are eaten up by more and more people and devices being connected to the internet, but especially by websites which are becoming more and more bloated. On the desktop, the average page weight of a single web page is four times as much now as it was in 2010. On mobile devices, it’s even more dramatic: The average page weight is ten times as much as in 2010. In the summer of 2022, we decided that it’s about time that we take action and start decarbonising our company website.

Blog Post

What is Sustainable Software?

Environmental sustainability is a very important issue, but software is something virtual, so it doesn’t seem to have an impact, right? Wrong! As software creators, we have a significant impact and can make a difference by incorporating the principles of eco-friendly software development into our understanding and practices.

Blog Post

Remote Mob Programming at INNOQ

We asked four teams about their experiences with Remote Mob Programming

Blog Post

Blockchain Mining: Embarrassingly Parallel?

In this blog post, we are going to look at three different approaches at mining new blocks in a blockchain using Rust, all of them using multiple threads, and we’re going to compare their runtime performances with each other and with that of the two single-threaded solutions from the previous post.

Blog Post

Blockchain Mining with Rust

Recently, at one of our yearly hands-on events, we took on the challenge of implementing our own blockchain. One of the core challenges of this is the mining of new blocks. In this blog post, I want to show two different approaches we tried out for this task, using the Rust programming language.

Blog Post

The language of maths is not the language of your business

Blog Post

The perils of shared code

In this blog article, I want to examine why using a sharing code between microservices may sound attractive in the first place and why it can cause bigger problems than the ones you try to solve.

Blog Post

Solving the wrong problems

Instead of rushing to an engineering solution to a problem, we would often be better off by lying back and determining the root cause of our engineering problem, which is often an architectural one.

Blog Post

Why RESTful communication between microservices can be perfectly fine