Blog

Full-time Management is overkill

It's a known principle: constraints force creativity. When I have only one hour to finish a presentation, I set clear limits. I won't waste a quarter of that time on finding the perfect font; that would be a poor use of my time. My priority is to get the core message onto the slides. Then, I'll …

CSS Leading vs. Line Height

Typography includes a concept known as "leading"—the space between lines of text. More precisely, it's the space measured from the baseline of one line to the baseline of the next. Increasing the leading of a paragraph should not move the first line of text down. This logical expectation doesn't …

Git is too complex for most of us

Even the most old-school companies have recognized that versioning source code is essential. It's not universally true—a profitable, decades-in-business one-man-show software company still versions by copying directories in 2025—but such companies are rare today. Git, the ubiquitous source code …

Think Before You Start

I'm cleaning up a de-normalized relational data model for my booking application. This task has consumed approximately 30 hours and remains incomplete. The primary challenge is the application's production status. The database contains substantial data, and de-normalization has corrupted portions …

YAGNI or do you?

You likely know the YAGNI principle in programming. The acronym stands for "you ain't gonna need it." It advises implementing only what is needed now, avoiding attempts to make current code account for potential, future features or use cases nobody has requested. It's the minimalist software …

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

I use AI extensively for coding. Most modern editors or IDEs with integrated AI provide an Agent mode. This is the "I do whatever is necessary with your codebase" mode. The AI creates, modifies, and deletes files and directories, and executes commands. It works as if a human programmer were coding …

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 Outsourcing Software Development Effective?

This is a complex question. Before addressing it directly, we must examine software development itself. Software development is a broad field, but people typically associate it with "writing code." Yes, developers write code. Often, they write more than necessary to solve a problem. Many developers …

Why I Keep Business Logic Out of SQL

Should business logic reside in the database—using views, procedures, functions—or in application code (including SQL statements)? First, define business logic. Wikipedia provides an excellent description: Business logic is the portion of an enterprise system which determines how data is …

My first Chrome extension

TL;DR Extensions are not hard; reverse-engineering the web page you extend is hard. There are some gotchas, though. I have been developing software for almost 20 years but have 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

This text explains why, in my situation, wrapping my reverse-proxy (Nginx) with Docker is a disadvantage. Your situation is likely different. Docker is a useful technology that serves us software engineers well in many areas. I use it at work all the time although I do not consider myself a Docker …

How to achieve zero downtime with 8 common database changes

Every database change can be split into a series of sufficiently small chunks. When applied one-by-one with coordinated application changes, the system continues running without interruption. This works because the application remains compatible with the database at every step. The following table …

Understanding why people underestimate software complexity

Software complexity grows rapidly over time. Developers and business people alike often underestimate how costly software development is. To illustrate this, let's use a fictitious restaurant table reservations system. It is a sufficiently generic problem domain for the reader to follow easily. …

Optimize for developer cycles, not CPU cycles

Performance in software development matters less than you might think. You're almost certainly wasting significant CPU cycles and memory for no good reason—in parts of the codebase you don't intentionally monitor. Example: binary vs textual encoding Today, I spoke with a fellow developer who argued …

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

Have you ever wondered why your online purchase arrives in just a day or even a few hours? I contributed to making that possible. I worked for a worldwide market leader in intralogistics that equips the largest warehouses with software and hardware. They tasked me with rebuilding the software …