Sign in

I write about programming, philosophy, and the things in between.

After a long break from personal projects, the situation around the virus inspired me to build something on the side again. I’ll spare you the details but I decided to build a new kind of job board that would let developers browse open positions based on the technologies they are interested in.

It’s a straight forward full-stack JavaScript application that uses React in the browser, Express on the server, and Dynamo for storage. As much as I wanted to give Go, or Svelte a try I wanted to ship something fast. …

You join a new team and after a brief onboarding you are given your first task. It’s a simple one — you need to display an additional input field on a page.

After some digging you find out that most pages use the same generic component to display forms.

“That’s easy” — you say — “I can just add another parameter to it”

Then you open the file and you see that the four engineers before you had done the exact same thing. Multiple times. …

What do we mean when we say that something is complex? A system, a module, a class — they can all have that quality. When we talk about software architecture we say that certain practices raise complexity. This argument is usually given as a warning that a decision needs to be reconsidered.

Developers take pride in solving obscure problems and challenging puzzles. Yet, keeping a project simple is considered a virtue. But faced with a complicated business problem, is this even an option? Is there a difference between complicated and complex?

The Nature of Complexity

In “A Philosophy of Software Design”, John Ousterhout defines…

The choice between being a specialist or a generalist is debated by many engineers. Nowadays, the industry may need something in between.


As the saying goes, “A jack of all trades, but a master of none”. If you decide to go the path of the generalist your skills will grow horizontally. You will enjoy learning new concepts and will be able to satisfy your curiosity by working with different tools and languages.

However, mastering anything will be hard. In order to become proficient with a technology you need to dedicate massive amounts of time to it. …

I don’t remember when I found out about the timeless debate on tabs and spaces. I’m a self taught developer and I’ve missed some of the common arguments that occur in an academic environment.

My first job was quite forgiving for the uninitiated — no one was overzealous on engineering topics. After that I freelanced and worked for small startups. In that environment no time or energy could be spent on philosophical debates.

I think it was at my first real office job when I understood the gravity of the indentation topic. I casually joked that no one actually cares…

Technical debt — a tool used to negotiate a refactor for the mess you made 6 months ago.

It is often mentioned in the company of other negatively loaded terms, such as Legacy code, bugs and anti-patterns. Does that mean that legacy code is technical debt? Is badly written code considered that as well?

Even though all the terms are used to express the faults in a piece of software, there are big differences between them.

The term technical debt was first used by Ward Cunningham. He used it to explain the importance of refactoring to his business colleagues. More…

Ah, legacy code. Two words that can strike fear in the heart of any developer.

Two words that if mentioned in front of your developer friends will immediately cause grimaces and sighs. One of them — a battle hardened veteran puts their hand on your shoulder and tells you to pull through until you get the chance to rewrite.

Therapist: “What’s the most traumatic event in your life?”
Developer: “I’ve worked on a legacy system”

Why is the general opinion about legacy software negative? Is it so bad to work on a project which is 5 to 10 years old?

Software development is considered a field ruled by logic. Every decision we make is guided by rules that we can follow and understand. Every problem has an engineering solution. Every opinion can be either true or false.

If you’ve spent some time in the software industry you know that this is not true. We make decisions in an ever-changing environment and solving them requires more than pure technical knowledge. The same opinion can be true or false depending on the situation. The most common answer to a question is — “It depends”.

We dive into endless debates on the maturity…

When I sat down in January I had quite the ambitious goals of where I want to be personally, professionally and spiritually in December. Looking back at them I could’ve gone a little lighter on the to-do list. I’m not fully satisfied with how the past 12 months went but I try to look at every failure as an opportunity to learn. This year brought me a lot of knowledge the hard way.

What went well

Moved away from pure UI engineering

I’m a big fan of front-end development and I have a soft spot when it comes to working on UIs. However, my new job moved me away…

When I wrote my first lines of code I wasn’t quite convinced that I would be able to do that for a living. For me it was something that people with extraordinary math and logical abilities could handle. Nevertheless I pressed on. I went through a bootcamp, got some projects in my portfolio and managed to land an internship at a small digital agency.

This is going to be one of those once upon a time articles so buckle up and prepare for a story.

At this point I found everything in the software world amazing so I was more…

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store