Skip to main content

Posts

Tackling Technical Debt- Where to start?

Every software project accumulates technical debt. Like financial debt, it compounds over time if left unaddressed, making future changes increasingly difficult and expensive. But knowing where to begin tackling technical debt can be overwhelming.  As our time is limited, we have to choose wisely. I got inspired after watching Adam Tornhill  talk called Prioritizing Technical Debt as If Time & Money Matters. So before you continue reading this post, check out his great talk: Back? Ok, let’s first make sure that we agree on our definition of ‘technical debt’… Understanding Technical Debt Technical debt isn't just "bad code." It represents trade-offs made during development—shortcuts taken to meet deadlines, features implemented without complete understanding of requirements, or design decisions that made sense at the time but no longer fit current needs. Technical debt manifests in several ways: Code smells : Duplicated code, overly complex methods, an...
Recent posts

Discontinuous improvement

One of the mantra’s I always preached for my teams was the concept of 'Continuous Improvement'. The idea is simple and appealing: we constantly seek incremental enhancements to our processes, products, and services. This approach, popularized by Japanese manufacturing methodologies like Kaizen, promises steady progress through small, ongoing adjustments rather than dramatic overhauls. However while reading the ‘Leadership is language’ by L. David Marquet, I started to wonder; what if this widely accepted wisdom is fundamentally flawed? What if true improvement doesn't actually happen continuously at all? The stairway, not the ramp In his book, David explains that improvement doesn't occur as a smooth, uninterrupted climb upward. Rather, it happens in distinct, intentional batches - like climbing stairs instead of walking up a ramp. This is what he calls "discontinuous improvement," and understanding this concept can transform how your team operates. ...

VSCode - Expose a local API publicly using port forwarding

I’m currently working on building my own Copilot agent(more about this in another post). As part of the process, I needed to create an API and expose it publicly so it is accessible publicly through a GitHub app. During local development and debugging I don't want to have to publish my API, so let's look at how we can use the VS Code Port Forwarding feature to expose a local API publicly. Port forwarding Port forwarding is a networking technique that redirects communication requests from one address and port combination to another. In the context of web development and VS Code, here's what it means: When you run a web application or API locally, it's typically only accessible from your own machine at addresses like localhost:3000 or 127.0.0.1:8080 . Port forwarding creates a tunnel that takes requests coming to a publicly accessible address and forwards them to your local port. For example, if you have an API running locally on port 3000: Without port forw...

.NET Aspire Dashboard - The mystery of the hidden endpoint

One of the cool features of .NET Aspire is the Aspire Dashboard(also available standalone by the way). It allows you to closely track various aspects of your app and its resources, including logs, traces, and environment configurations, in real-time. After migrating an existing solution to .NET Aspire, I noticed that no URL was shown for some of the endpoints: I couldn’t find a direct reason why this was the case, but I found online that it could be related to the launchsettings.json files. Here is the launchsettings.json file for the ‘api’ project (where the endpoint URL is shown): And here is the launchsettings.json file the for the ‘webapp’ project (where no endpoint is shown): With some trial and error, I found that the order of the profiles in the launchsettings.json file matters and that Aspire will use the first profile found. I switched the profiles for the ‘webapp’ project: And indeed, after doing that, the endpoint URL became visible on the dashboard: ...

You don’t need cloud

A recent survey by Flexera found that businesses waste an estimated 30% of their cloud spend on unused or unnecessary services. For small businesses with tight margins, this isn't just inefficient—it's potentially devastating. While tech giants promote cloud solutions as essential for every modern business, the reality for most small operations is quite different. Cloud is flexible, not cheap. Although you can build cost-effective solutions on a cloud platform, you have to be purposeful about this and design your solution specifically for it. The cost predictability problem One of the most frustrating aspects of cloud services is their variable pricing models. While providers advertise low entry prices, costs can quickly spiral as your usage increases: Pay-per-use pricing makes monthly bills unpredictable Resource provisioning often requires overestimation to prevent outages Hidden costs for data transfer, API calls, and storage can shock you at month...

Future Tech 2025

Last week I had the opportunity to participate and speak at Future Tech 2025. And although it was the 7th edition, it was my first time there, so I didn't know what to expect. The Future Tech team was very kind and walked with me to the speaker room (yes, free 'stroopwafels'). When the opening was announced, I entered the main room together with 700+ other software developers still unaware of what would happen next. And then Anjuli Jhakry and Dennis Vroegop took the stage… What started as a small introduction of the agenda, evolved in a story about fear and ended with the key message that we all should confront and embrace our fears. This all brought in such a vulnerable and strong way (no I will not spoil how they did it) that it will stick with me for the rest of my life. What a great intro and exceptional example of storytelling. Kudos to both Anjuli and Dennis! After putting the bar so high, Roelant Dieben and his AI companion took the stage for his keynote to talk ...

Tweak your LLM models with Ollama–Using OpenWebUI

Yesterday I explained how we can create and upload our own language models in Ollama through the usage of a modelfile. I explained the modelfile format and the different building blocks that can be used to define and configure a model. Today I want to continue on my previous post by explaining how to use OpenWebUI instead of doing everything by hand. Start by opening OpenWebUI (checkout my previous post on how to get it up and running): Click on the Workspace section on the left:   Click on the + button in the Models section on the right: Start editing your modelfile:   Hit Save & Create at the bottom:   After saving the new model, you can immediately test it: More information Explore and test local modals using Ollama and OpenWebUI Models | Open WebUI