The cookie factory

Years ago, a valued colleague introduced the analogy of a cookie factory to explain how software development works. We developers were the bakers. Refinement, stories, requirements — those were all ingredients. The message was simple: as long as the ingredients aren’t in order, you won’t get good cookies. The challenge back then was mainly in the preparation. If the supply chain was messy on the front end, things always ran rough on our side of the oven.

That analogy still holds up, but it seems a new and very different chapter is being added to it.

Baking skills have suddenly become a lot less important. It’s now the AI machine that bakes the cookies. Writing code ourselves was already gradually changing with the rise of AI tools that offered code suggestions. Enthusiasts caught up in the AI hype are even advocating for entrusting entire architectural decisions to AI agents. In practice, I haven’t seen that work convincingly yet; that’s precisely where the developer’s technical insight remains indispensable. The developer’s day-to-day work seems to be shifting mainly toward prompting and tweaking AI tools and reviewing their output. That work is still needed for now — a logical “escape route” for developers to stay relevant — but for how long?

Once the machines are properly tuned, it seems likely that domain experts themselves will start feeding the input to produce the software they want. No intermediate layer of bakers needed; the customer puts their own dough into the machine and takes out ready-made cookies.

That’s still a distant prospect. Plenty of counterforces will be at play before domain experts can effortlessly be handed software on a silver platter to present to the masses. Cybersecurity is one such counterforce. If no one knows anymore how the cookies were baked, who vouches for the fact that they’re safe to eat?

In early April, Anthropic announced in a paper that it would not publicly release its new model, Mythos, because its hacking capabilities were considered too powerful. The model would reportedly be able to independently find vulnerabilities, write exploits, and chain them together into complete attacks. Whether the threat is really as severe as described, or whether there’s a hefty dose of hype at play, remains to be seen. Either way, it seems only a matter of time before a model with similar capabilities hits the market.

Back to the cookie factory. If current developments continue on a linear path, a reality in which software developers no longer have a place is a realistic future scenario. People with technical skills will undoubtedly still be needed — the question is just how many, and whether that work will be as enjoyable as the kind of programming I’ve been doing for the past twenty years. Reason enough to quietly start thinking about an alternative career, away from the computer and back into the real world.

My plan is to embrace the AI developments and keep delivering the cookies as well as possible. I do find it a shame that the actual programming work seems to be disappearing — I got a lot of enjoyment out of that. At the same time, I see plenty of opportunities in what these new tools make possible, and I’m genuinely enthusiastic about that.

Reviving Saldoplanner: How AI helped me modernize a personal finance tool

Introduction

Saldoplanner is a small application I use purely for personal purposes—to keep track of my finances. Every few weeks, I set aside some time to import incoming and outgoing transactions, review my spending, and reflect on both past and expected expenses.

I originally built the application back in 2019 using AngularDart and a Symfony API, hosting it on my personal server. I never intended to turn it into a production-grade application, which gave me the freedom to cut a few corners on security and focus purely on what worked for me.

What motivated me to revisit it?

Over the past few months, developments in AI have accelerated rapidly. I had long wanted to make improvements to Saldoplanner, but the outdated AngularDart stack made even small changes difficult.

At the same time, I’ve been actively working with AI tools (especially Claude Code), and it’s impossible not to notice how much software development is changing. Skills I’ve spent the last 20 years building suddenly feel less relevant. To be honest, that realization hit me pretty hard at times, raising questions like: “Will I still be valuable in the future?”

Where I’ve landed is this: resisting change isn’t useful. Instead, I need to adapt and invest in new, relevant skills—even if I don’t yet fully know what that path looks like. For now, that means embracing AI and learning how to work with it effectively.

That mindset led me back to Saldoplanner. It’s a relatively small, outdated project—perfect for experimentation. My main question was:

“Can I refresh Saldoplanner within a day or two so I can finally implement the improvements I’ve been wanting for years?”

Approach and results

Since the application was built with AngularDart—a framework that never gained widespread adoption—my initial idea was to use AI to get the existing app running locally and make incremental changes.

However, even with AI support, that approach proved frustrating. So I pivoted.

I decided to let Claude Code attempt something more ambitious: porting the entire frontend from AngularDart to Next.js.

To my surprise, this worked remarkably well. With just a handful of prompts, I ended up with a fully functional Next.js application connected to the existing Symfony API.

That was the turning point. Removing the dependency on AngularDart felt like a huge relief. The application was now running on a stack I’m comfortable with, making future changes significantly easier.

From there, I defined a few additional milestones:

  • Migrating to a new server so I could decommission an old one
  • Upgrading the PHP version from 7.1 to 8.4
  • Adding long-desired features, including a mobile-friendly UI

Conclusion

I managed to complete all of this within a single weekend—something that would have easily taken me one to two weeks in the past.

This experience gave me valuable hands-on insight into working with AI. For this project, Claude performed well with just a simple CLAUDE.md file—more advanced features like Skills or Hooks weren’t necessary at this scale.

As a nice bycatch, the server migration also let me shut down an old machine, saving about €20 per month.

But more importantly, I now have a tool that makes managing my finances easier and more enjoyable again—and a clearer sense that adapting to AI is not just necessary, but genuinely empowering. It also makes me wonder: if I’m able to move this fast… What should I do next?..
How can I make the most of that speed without building something that becomes obsolete just as quickly?
I don’t have the answer yet, but I’m convinced we’re heading into extraordinary times, with a great deal still set to change.

Remote work Surinam

During the summer of 2023, Fleur and I traveled to Surinam for two months together. She did a six week internship at the general practitioner as her last internship to finish her medicine study. During those weeks I worked remotely for my clients.
The last two weeks we took time to enjoy more of the country.

We stayed at a compound with other people, mostly students, expats and some coming for holiday. We had a nice connection with some of them, with whom we often planned trips during the weekends and go for dinner and drinks in the city.

To be fair, Surinam is not the most convenient country to travel to. It being not very safe and underdeveloped, but the nature, food and nice people make up for that for sure. Especially for a Dutch person, I think it’s a must visit country.

Devlog #1: Viewport, user movement and real-time updates

Prototyping

I’ve made some tech decisions to quickly get something visual, so I can “play” the game asap. I chose React as I’m familiar with it and used Vite as building tool, which makes it insanely quick to get going and it’s hot module replacement feature makes prototyping also very easy.

I don’t have a clear idea yet for what I want the game to be like. And to be honest I’m happy to. Because this is a hobby project I want to keep all options open and develop it the way I feel like step by step.

Viewport and user movement

For now I thought having a 2D grid world with a viewport would be nice. So I gave the user an avatar and navigation controls using the arrow buttons. When moves over half of the screen horizontally or vertically the viewport starts moving with the player. In that way the player can move through a world larger than the viewport only (see video below).

I’ve added some debug tools showing the user position, viewport origin and a moving cooldown. The moving cooldown is a concept that I was thinking of implementing as game feature, but I’m not sure I’ll keep it as I find it pretty annoying tbh.

Real-time updates

I thought it would be cool to have multiple players walking around in the same area and seeing each other and eventually even interact. I knew about websockets as a technical solution for this, but had never actually built something with websockets. So a good reason to try!
I setup a local node server using the ws npm package and made the frontend connect to the websocket server which was fairly easy. The user position was still only stored in the frontend, so I setup a redis server with docker compose to store the user position. For now I disabled the user controls and made the websocket server make the user walk around randomly. When I opened the game in two separate browsers I saw both browsers show the user randomly walking around in the exact same way, so it worked!

What’s next

  • Activate user controls and make it work with the websockets setup
  • Allow new users to join the game
  • Make the game “playable” on mobile

Remote work Curaçao

Bon dia!

In a world with continuous changing COVID restrictions, our trip to Curaçao felt like a welcome getaway from everyday life. I still feel very privileged we got to do this. Of course living on a tropical island for a month is wonderful, but it’s also always somewhat of a challenge and adventure to find your way and setup daily routines. In the end we’re expected to deliver the same amount of work as we would’ve delivered at home.

Working setup in our apartment
Working at the office

For our stay we booked an AirBnB with car rental included. Our colleague (and director of SIM Caribbean) Wesley, who lives in Curaçao helped us pick a good location and provided us with some do’s and don’ts. Having a car is pretty much mandatory. Bicycles and scooters are rarely seen and thus not much anticipated on in traffic. Using a car is your best pick and besides some poorly maintained roads and the blinding high-beam headlights of other cars very doable.
A fun fact: in Curaçao you’ll hear a lot of cars honking to each other. It’s a custom to greet and thank one another, for example when way is given on an intersection.

The time difference with The Netherlands was 6 hours in the first week, when time changed to wintertime it was 5 hours. Curaçao is 5/6 hours behind on The Netherlands, so we always began early in the morning (around 7:00 to 7:30AM). This made us overlap with our team colleagues for like half of the day.

Well earned Friday drinks
At the local snèk “Bugs Bunny”

Wesley invited us to come have a Friday night drink at a local snèk, which is sort of an outside bar. We visited Bugs Bunny snèk, they serve the coldest Amstel Brights on the island with delicious fried chicken wings. I couldn’t imagine a better way to end the work week!

Colourful stairs in Otrabanda
Grote Knip
Tugboat Beach

In our spare time we explored the island; the colourful Otrabanda and Punda, an abundance of beautiful beaches and amazing snorkling along the coast. One other main highlight I would everyone recommend to do is climbing the Christoffelberg. From the parkinglot at the foot of the mountain it takes a fit person around 45-60 minutes to climb up. The hike is fantastic and the view on the top very rewarding!
If you manage to start early (start the hike around 6:15/6:30AM) you might find yourself alone at the top which I imagine would’ve been magical!

Christoffelberg vegetation
Christoffelberg hike route
Christoffelberg
Shete Boka park