Category: Uncategorized

  • The Big O Confusion

    The Big O Confusion

    It is sometimes hard to notice, but many of the foundations of computer science and programming come from mathematics and their many branches. One example of that is the famous Big O notation, a technique so useful to evaluate an algorithm’s time and space complexity that nowadays it is part of most job interviews. The…

  • Commit As A Team

    Commit As A Team

    A couple of years ago I was working on a very challenging and interesting project, which had many features competing to go live. We had a line of internal customers ready to use our product as soon as we added the features they needed, and everything was working fine as we had a clear roadmap…

  • Intro to UML

    Intro to UML

    The traditional saying goes “An image is worth a thousand words”, and I strongly believe this applies to diagrams as well. It doesn’t matter how many words we spend trying to explain the nuances of a system: sometimes we just need a simple diagram to put all the pieces together. For many decades, there were…

  • Inverting Logical Expressions

    Inverting Logical Expressions

    Part of our day-to-day tasks is to do code refactoring. As part of this process, I’m sure that many of us have had to negate the logical expressions in if or while statements at least once. For example, we may want to change this code: into something like this: This is indeed a very simple…

  • Why Output Variables Are (Usually) a Bad Idea

    Why Output Variables Are (Usually) a Bad Idea

    One of the many things I’ve learnt from the Clean Code book is about the evils of output variables. Functions can take arguments and can return values. An output variable is one of those arguments that the function uses to give a result by changing its value instead of, or in addition to, the function’s…

  • Learning From Our Mistakes

    Learning From Our Mistakes

    Early in my career, I managed to land a great job that would allow me to work on a bunch of interesting features, with amazing people, while getting hands-on skills that I could use at other companies, and also paying a good salary: It was the whole package! After so many attempts at landing a…

  • Load Testing with Shadow Traffic

    Load Testing with Shadow Traffic

    Some time ago, I worked on a feature that would increase the load on my team’s backend service from 5 thousand to 50 million requests per day, a 10,000 times increase in traffic, and we needed to make sure that it could handle that huge grow, which was a bit daunting. In this article, I…

  • Decoupling Code With The Law Of Demeter

    Decoupling Code With The Law Of Demeter

    It is usually well understood that decoupled software helps us easily change, test, reuse, understand, and extend our code. For this reason, many of us will either advocate or hear someone promoting decoupled code when we build our systems. There are a number of techniques that we can use to do this, and today I’ll…

  • Three Reasons Why I ❤️ Ghostty

    Three Reasons Why I ❤️ Ghostty

    As a backend developer, I do a lot of my work in a terminal (although, admittedly, not as much as I used to). That is why I had no doubt about trying out Ghostty, a new terminal emulator, as soon as it was released a few months ago, late last year. Ghostty provides a number…

  • Dependency Inversion Principle

    Dependency Inversion Principle

    In one of my previous articles I made a brief introduction to the SOLID principles for Object Oriented Software Development In today’s article, I’d like to cover the Dependency Inversion Principle (DIP) in more depth, starting by explaining what it is, how it’s supposed to be used, and what are its concrete benefits. What Dependency…