What problem does it solve?

My experience in tech industry isn’t that big. It would be something around 5 years working as a coder. This industry moves fast, things change, new technologies emerge on daily basis. In order to do my job well I have to constantly learn something new. I enjoy that a lot. Learning is great. It allows you to look at the world differently than you did before.

Sometimes it’s exhausting and frustrating. It’s easy to be negative towards a new framework, programming language or a build system, when it’s new and alien to you. In this industry you should be sceptical. We are already drowning in a sea of a complexity, and when we can barely keep our heads above the water we tend to save ourselves by adding another layer of abstraction.

Because of that, the question you should ask yourself is What problem does it solve?. One of the technologies you might see in the wild is CMake. If you are new to it, you might be frustrated with how the whole project is poluted with those pesky CMakeLists.txt. It introduces a lot of files to keep track of and maintain. In order to use it well you have to understand it’s scripting language. There is a lot to wrap your head around and it doesn’t feel rewarding. For me it feels like maintenance…

Well then: What problem does it solve? From CMake website:

CMake is used to control the software compilation process using simple platform and compiler independent configuration files, and generate native makefiles and workspaces that can be used in the compiler environment of your choice.

How I understand CMake: you drop a lot of CMakeLists.txt into your project folder structure in order to describe your project, in such a way that CMake can generate a project which compiles on a specific OS, with a specific toolchain/compiler.

Well, that sounds reasonable. Seems like an empowering technology. If you haven’t worked on a project which targets multiple OSes or platforms, it’s not easy to understand the benefits.

Lets look at another example - Hugo, a framework for building websites. Again, What problem does it solve?.

If you haven’t designed and wrote websites, one of the biggest problems is to separate the content and the presentation. HTML and CSS are used to describe how the content is presented. You can achieve a lot of flexibility by separating the presentation from the content. If you want to write a blog post without that separation you would copy the last blog post’s .html file and just edited the post contents. After some time you have 12 blog posts. Now you’d like to update the look of your blog. That means you have to edit those 12 .html files…

Static website generators, like Hugo, make this easy. The content and the presentation is separated and Hugo combines those two to produce the website. In order to be proficient in working with Hugo you need to learn about its scripting language, since Hugo doesn’t know how to combine your blog post’s content and its graphical layout.

Big advantage of the What problem does it solve? question is that if you go back to the original problem you might realize that the solution isn’t optimal. Maybe you don’t really want to build your project for different OSes or platforms. Maybe you are ok with a minimal CSS and you don’t need the complexity of a static website generator. Maybe you don’t need to spin up that Docker container. Maybe the benefit of introducing and learning a specific technology isn’t worth the cost.

What problem does it solve? - certainly helps me. Good design is based on simplicity. The simplest solutions are usually the best. In order to find those we need to always remember what problem stands between us and the goal.