Lean software development is an adaptation of lean manufacturing (derived from Toyota Production System) to software development. I’ll delve into some of its principles based on my experience.


Eliminating waste (the first lean principle) is about maximizing the amount of work not done. This doesn’t mean being lazy or neglecting tasks; it only means doing the minimum necessary to get the job done.

There are multiple levels where you can tackle waste: in the processes, in system…

What’s the minimum you should know about digital product design and why should you care?

Photo by UX Store on Unsplash

My main goal is to call out the attention to the product designer’s role. The main targets are developers and product managers. Let’s start with why.


Isn’t product design for designers? Product design is all about solving users’ problems and that’s hopefully a team concern. Nobody is telling you to…

Using the Testcontainers library is one of the ways to test your app’s data layer (in JVM languages). Let’s see a basic example.

Before starting, let’s clear out two assumptions:

  • You want to test a data layer of a JVM application (I’ll use Kotlin and Gradle).
  • You have Docker installed in your local environment. Ideally, you have it also in the deployment environment, to run the same exact tests that run locally.
Photo by CHUTTERSNAP on Unsplash


Technology can be put at our service as a means to make us feel psychologically safer in the team and the company. “Move fast and break things” is only unleashed if technology provides us with the necessary safety net.

This is the continuation of my previous article:

Since we’re talking about software development, technology is surely fundamental in fear and risk management. Confidence in the system equals increases psychological safety as you feel safer to make mistakes. In other words, we put technology at our service to reduce or…

Sharing code is overrated and it’s abused as the solution to code repetition. What’s the alternative? The answer is related to cohesion, code hotspots, and the law of proximity.


Cohesion refers to the degree to which the elements inside a module (e.g. a class) belong together. High cohesion means all the code in a module is related; low cohesion means that the module contains unrelated pieces of code.


Modules with low cohesion can lead to code hotspots — they’re…

I feel a bit lost when I look at a project and all I see is technology. Technology is the enabler of business goals, but it’s only a detail. This looks like a paradox so bear with me.

In fact, Apple didn’t introduce the iPod until twenty two months after Creative’s entry into the market. […] The problem was, they advertised their product as a “5GB mp3 player.” It is exactly the same message as Apple’s “1,000 songs in your pocket.” The difference is Creative told us WHAT…

Feeling in a safe environment is a prerequisite for a happy and productive team. I’ll mention a software team as an example but it could be applied to other teams.

Checkout Dear Intern

Maslow’s hierarchy of needs is a structured pyramid of human needs.

Notice that personal security lies within the safety needs, just above the physiological needs. If we don’t satisfy those lower-level needs, how can we unleash the ones above, where creativity and innovation can happen? If you’re…

In most cases, if you rely on comments to explain code, you’re doing it wrong. I’ll show you some ways to achieve self-documenting code. No, it’s not utopic.

This is not a case against code comments. This is a case in favor of self-documenting code — reducing the reliance on code comments is a consequence of it.

Photo by Artur Shamsutdinov on Unsplash

In my case, the “code-needs-comments” myth comes from the university. However, the rule to make your code self-explanatory rather than using…


Clean and hexagonal architectures can be complex topics. Let’s break them down using an iterative learning model.

Image by Rishabh Dutta via WallpaperUse Copyright-free

Why another article about domain-centric architectures? I recall struggling to understand them, so I decided to write my own explanation. I did it by resorting to evolving models thus resembling the way we learn.


I built a utility app to control Yeelight/Xiaomi LED Lights. It can be accessed from the Windows system tray.

I’m a fan of Xiaomi/Yeelight LEDs, especially because they can be used as smart home devices. …

Luís Soares

full-stack developer

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