Christian Heilmann

You are currently browsing the Christian Heilmann blog archives for December, 2025.

Archive for December, 2025

Building my faux lego advent calendar feels like current software development

Friday, December 26th, 2025

I’ve stated on several occasions that Lego made me a developer. I was the youngest of four kids who inherited a huge box of bricks with no instruction booklets. So I took lots of smaller bits to build bigger things and re-used skills and ways to connect things. I came up with my own models just to dismantle them and re-arrange things.

Much like you write software:

  • You write functionality
  • You make it re-usable as functions
  • You componentise them as objects with methods and properties
  • You collate them as classes
  • You pack them up as libraries for people to ignore to go back to the first step

Now, this December my partner got me a Blue Brixx advent calendar with Peanuts characters that can be Christmas ornaments. It taught me that Blue Brixx is much more like current software development.

The advent calendar box, individual boxes and some of the models I already assembled with a plastic bag full of leftover bricks.

Lego has some unspoken rules and good structure

Lego is great to assemble and sometimes tricky to detach. But it is always possible.

Don’t tell me you are a child of the 80s if you haven’t at least chipped one tooth trying to separate some stubborn 4×2 Lego bricks.

With Lego you get instructions that show you each step of the way which parts are necessary. It’s a bit like following a tutorial on how to develop a software solution.

With Lego, you have all the necessary bricks and none should be left over. Much like with IKEA, any time you have to use force, you’re doing something wrong and it will hurt you further down the track.

Blue Brixx is different

Blue Brixx, because of its size, make and price, is different. The models are adorable and fun to build, but you need to prepare a different approach.

  • There are no notches on the underside which means the bricks don’t mesh as nicely as Lego does. You will sometimes have to use force to keep the half done model together or make a brick fit.
  • Every model so far had missing bricks. Some had bricks in colours that aren’t in the model and the further I got into the calendar, the more I collected bricks to use later on. Interestingly I often found bricks that were missing in one model as leftovers in the other, so I assume there is a packing issue.
  • Some models have glue-on faces for the characters. These stickers are the worst quality I have ever seen and an exercise in frustration. They also mean that you can’t detach the model again.
  • The instruction booklets do not list the bricks needed for each step. You need to guess that from the 3D illustration.
  • As there is a low contrast at times this means you will use the wrong bricks and then miss them in a future step. This means detaching the model, which is tough with one this size.

The instruction booklet and zoomed in showing that you need to guess the bricks in use at each step.

Current software development feels similar

Which is a bit like software development these days. We use libraries, frameworks, packages and custom-made, reusable solutions. Often we find ourselves assembling a Frankenstein solution that is hard to maintain, tough to debug, has horrible performance and gobbles up memory.

Just because we re-used bricks we’re not quite sure if we put them together the right way. And we sometimes have to use force to make them work together in the form of converters and optimisers. We add tons of bricks upfront that are loosely connected and lack structural integrity, so we add even more tools to then analyse what’s shipped but isn’t needed and remove it again. We don’t have a manual to follow and we look at the shiny end results built with a certain library and want to take a shortcut there.

I’ve seen far too many products that used several libraries because one component of each was great, resulting in a bloated mess nobody understands.

This is exacerbated by vibe coding. The idea is never to care about the code, but only about the solution, and that will always result in starting from scratch rather than maintaining and changing a product. Think of this as Lego models you glued together.

My workflow: tooling up and structuring

OK, the first thing I realised is that I need new glasses. I already have varifocals, but my eyesight must have declined – spoiler: it did in 3 years. I either can check the instruction booklet with the surprise brick illustrations or find the correct one without my glasses or I need the glasses to find the small brick on the table. This is frustrating, not to even mention the ergonomics of the situation resulting in a hurting back.

Until my new glasses arrive I am using a LED panel lamp I normally use for my podcasts to give the bricks more contrast and see much more detail.

If that is not enough I use my mobile phone as a magnifier to analyse the booklet.

And last but not least I started to pre-sort the bricks of each model before assembling it. This gives me weird looks by my partner of the “what a nerd” variety, but it really helps.

A model instruction booklet with sorted bricks around it.

All the bricks of the current model sorted and collated into 2xsomething 1 x something, angles and connectors, diagonal bricks and non-standard ones and 2x2 or 1x1

This is also how I build software and try to find my way in this “modern” world of cutting straight to the final product:

  • Find a editor environment you are comfortable with – I for one still don’t feel comfortable paying to develop, even if it is tokens
  • Structure the solution you want to build and plan it – then find the helper tools to make it easy for you to reach that goal
  • Always keep things understandable and documented to make it easy to change parts deep inside the product later without having to dismantle it completely.
  • Leave behind documentation that has all the necessary details and steps to make what you did repeatable.

Building these things is work, but it also gives me joy to have assembled them by hand. I also learn a lot how certain parts are always achieved in the same way (hair, arms, legs, parcels…) and It gets easier the more I do it.

I doubt that I would feel the same fulfilment if I asked ChatGPT to build me a 3D model and print the thing.

Ad Blockers helped kill the open web

Wednesday, December 17th, 2025

The other day I found out that you can watch YouTube in Albania without ads.

Mullvad VPN setting myself to Albania and YouTube not showing any ads.

Personally I pay for YouTube and I think it is worth while, but I found that curious. Reasons might be that Google has no advertisement contracts in the country or it may just be too small a market to matter to them. Regardless, whenever you post something like that there will always be an army of smug people telling you that any service is ad free to them as they use an ad blocker, or other means not to show ads.

The experience for users who don’t employ these means is different, though, to the extend that the web is becoming unusable. I also do lament that on social media:

Web page of Merkur.de absolutely plastered in ads to a degree that it is unusable

Here’s the thing: I am 100% sure these things are connected. The more people block ads, the more aggressive advertising became. To the extend that a newspaper site of today reminds you of illegal download or porn sites of the early 2000s. This is not a matter of greed, but survival, as subscriptions don’t scale. I pay for a few newspapers, but I really can’t be bothered to subscribe to all that I want to read. The internet replaced paper, after all, and it should also have replaced the means of acquiring news and content.

“I use an ad blocker as I don’t want to be tracked”

People claim that using ad blockers is about privacy. It can be, but most people use this as a hypocritical defense. Often these are the same people that don’t have working SSL on their sites or plaster them with third party “like” buttons. Or log in with Facebook/Google/Microsoft into other services. Pick a lane!

I am a privacy advocate and it is important to defend ourselves from being tracked online. “I don’t have anything to hide, so I don’t care when people know what I do” only works until your actions become accidentally – or by design – part of a bad narrative.

But there is a difference between tracking prevention and blocking ads. Not every ad is predatory and designed to record your actions – yet. Tracking prevention is often baked into the OS - at least in Europe – or there are specialist browser extensions like Privacy Badger. By using a dedicated “Ad” blocker, what you do is trying to get access without paying. That feels like doing a clever thing, but it hurts the web as not many things are free.

The web isn’t free – it is open, and there’s a difference

When I started on the web, I was a radio journalist. I announced the news and I got faxes and later on emails every morning with what happened in the world and our local area. We paid for getting access to these services, so our radio station played ads to cover these costs and my salary.

When I got internet access at the radio station (around 1995), I got access to the news tickers of government and international news agencies. I got the news faster, less filtered and for free, as companies and service providers published the information for free to be part of the cool new thing called internet. This also involved excellent innovations like RSS. The BBC was great at that and Netscape even had a sidebar displaying news. The platform “web” doesn’t charge you for publishing – it is an open platform. That was a huge step forward in publishing, and I quit my job and started developing and writing for the open web.

Hosting isn’t free, but it was affordable to companies and many people published on platforms that had ads on them – Geocities and the like. Even back then there were “framebusting” scripts that would hide the ads, effectively violating the terms and conditions to publish there.

We created an open platform but failed to innovate monetisation

The big mistake we made is to treat the web like any other publishing platform. We cherished the reach to get to a 24/7 world-wide audience, but our genius idea of making money was to show ads. That worked in classic media, so why not here?

I remember that at the radio station this got ridiculous at times when – for example – someone sponsored the announcement of the time. I had to play a 20 second jingle and then tell the listeners that it is 9 o’clock followed by another 4 second jingle that this amazing piece of news was brought to you by company XYZ. These days, YouTube has similar things where a 10 second video has a long non-skippable ad beforehand.

This is what I hated about traditional television, too. Watching Mythbusters on a streaming service is fun. Watching it on tele with “after the break” and “before the break” vignettes repeating what I just saw is grating.

On the web, we distribute content and leave it to the user to make it consumable to them. We have to support mobiles, desktops, voice interfaces and many other things. We don’t distribute payment though. Instead, we show ads and hope people click them. Or we ask for people to subscribe to one service at a time. There were some efforts to allow for easier payment, like Flattr, but they never made it to the mainstream or got baked into an operating system. This is a shame, as I would love to say I pay a lump sum each month and distribute it to publishers once I consumed the content. I fail to see why I should pay upfront to get access. A physical paper I also skim at the store before purchasing it to see if it is worth it.

Showing ads was too easy and became predatory

When Google came around the whole ad thing exploded. This blog had banners at a time and I did make about 2K a month with them. I vetted the providers and made sure that relevant stuff was shown. But I also found that there were dozens of blogs that scraped my content and drowned it in ads, making more money than I did. Linkfarming, Black Hat SEO stuff was mushrooming and it all had the goal to show ads around content that wasn’t made by the people who tried to benefit from it. So, naturally, people were annoyed and started using Adblockers.

I very much realised that, too. My banner income went towards zero, so I just took them off – no point in causing more traffic that nobody benefits from. Other people got hit much harder. Publications like Smashing Magazine had to reconsider from scratch how to pay their writers.

But then something really messed up happened. Google itself turned from a place to get your stuff found to a place that gives you 90% ads and sponsored content, with the first web content showing up on page 4. I worked at Yahoo when Google really became a thing and our business model – buy content from news agencies and show ads around it – became the standard model. The more people blocked ads, the more needed to be shown to those who don’t.

So this is where we are now. Web search is a mess and becomes more or less useless. And companies stop publishing on the open web because there is no way to be found. Instead, we are pushed into closed environments that promise to use Artificial Intelligence to give us only what we really look for, until the money runs out. Even now ChatGPT and others consider displaying ad content which can’t be blocked.

So, yes, I do understand people who use Adblockers, but it also feels like finding and open fire escape at the back of the concert building. Sure, feel smug and clever getting in, but you’d better go and buy some merch to support the artist.