Blog

YAGNI or do you?

You may know the YAGNI principle in programming. The acronym stands for "you ain't gonna need it". Basically it says that you should only implement what is needed now. You shouldn't try to make the current code account for potential, future features and use cases that nobody has asked for (yet). …

How I Use all the Top-Tier AI Models Without Spending a Cent

I use AI heavily for coding. Editors or IDE with AI being integrated usually provide an Agent mode. It is the "I do whatever I think is necessary with your code base"-mode. The AI creates, modifies, deletes files and directories and executes commands on the command line. It literally works as if a …

Visualizing Software Technical Debt for Managers

Software is a hard field. Writing code in a good enough quality and maintaining it over a longer period of time is mentally consuming, especially after new features are coming in at a constant pace. The architecture starts to suffer. It deteriorates slowly if we don't take actions against it. It is …

Is it reasonable to outsource software development?

This is a pretty gnarly question! Before I jump right into the that question we need to talk briefly about software development itself. Software development is a very broad field but the first thing people might think of is "software developers write code". Yes, software developers write code. …

Why I Keep Business Logic Out of SQL

Should I default to pushing business logic into the database—using views, procedures, functions—or should I default to keeping logic inside the application code (including SQL statements)? First some definition about what I consider as business logic. Wikipedia has a good description of it which I …

My first Chrome extension

TL;DR Extensions are not hard, reverse-engineering the web page you extend is hard. There're some gotchas though. I'm developing software for almost 20 years now but I've never developed a real Chrome extension. The technology behind it is called WebExtensions API and it is a cross-browser …

File system layout for your SaaS web application

This post outlines the filesystem structure I use for my SaaS web applications. The design is guided by three primary objectives: The ability to atomically revert to a previous version of the application. Support for running multiple instances with their own configurations while sharing the same …

My personal reasons to not run my Nginx reverse-proxy inside Docker

Beware that this article is controversial to many people's opinions. It is no Docker-bashing prose! The following text is based on my situation why I consider wrapping my reverse-proxy (Nginx) with Docker as a disadvantage. Your situation is likely different. I believe that Docker is a useful …

How to achieve zero downtime with 8 common database changes

Every change to a database can be split up into a series of so small chunks then when applied one-by-one together with coordinated changes to the application everything keeps running if nothing has happened. It works because the application always stays compatible with the database. In the next …

Understanding why people underestimate software complexity

Software gets complex very fast over time. Developers and business people alike tend to underestimate how costly software development is. To illustrate the point we make up a fictious restaurant table reservations system. It should be a sufficiently generic problem domain that the reader can follow …

Optimize for developer cycles, not CPU cycles

Performance in software development matters less than you might think. I bet that you waste plenty of CPU cycles and memory for zero good reasons somewhere you aren't looking at and wouldn't look at by intention. Example: binary vs textual encoding Today I had a talk to a fellow developer who …

Forget about serverless

Beware! You will get insight into my unglamorouse server setup. I host web sites and web applications on my own hardware which resides at my home. Previously it was a Raspberry Pi 1 Model B and now it's an Odroid M1 with 8 GB of RAM. Dynamic DNS makes sure that my server is reachable from the …

Actionable steps to improve your meetings as a software developer today

Meetings can be frustrating especially when they are long and there's no valuable outcome at the end. The time feels wasted. You're exhausted. I've been there and you likely too. I claim that meetings don't need to be frustrating. They can be effective and a good mechanism to make important …

Why it is hard to generate beautiful HTML emails (from Markdown)

Developer-centric products often want to send newsletter with embedded code snippets. Some of them already write their documentation in Markdown. Why not write the newsletter in Markdown too and turn it into nicely formatted HTML email...!? This idea sounds quite nice and it doesn't seem to be only …

Warehouses made hyper-fast

Ever thought about why your online purchase can be delivered in one day or even a couple of hours? I made it possible for you. Ok, this sounds salesy! At least I contributed a part to it. I worked for a worldwide market leader in intralogistics who equips the biggest warehouses with software and …