What seems to be the problem?

Today, I was consulted wether it might be a good idea to adopt or investigate a certain technology. First I thought that I don't have a comment as I did not know the technology, but I remembered how one of my colleague always asks "what problem does it solve". That is pretty revealing question. Soon it became evident that technology is a must because others are using it. I think that is not a good reason to do anything. I am not sure, if my insight was valued… but later in the evening, I realized that I have an actual real life example about hype and if one should adopt it or not.

Microservices are (over) hyped architectural approach and Docker rides this wave well. In my previous workplace, we started to implement microservices before we even know that they were supposed to be called with that name. We called them "one thread miracles". We had realized that complexity of software spirals out of control pretty easily. When one uses data sharing between threads, catastrophe is almost evident. On the contrary single isolated thread is easy to follow and reason. Yes, there are books about these problems, but it seems that people learn by mistakes better.

Of course in reality our applications had multiple threads, but they were implemented such way that developer had only worry about single thread at a time. The end of this gradual process was small applications deployed in Docker containers which used ZeroMQ and MessagePack to communicate with each others. It was neat and simple, but what is most important: every new technology or approach that we introduced solved some actual problem we had.

At my current work place there has been discussions to start using Docker, because it is a modern technology. Docker was pretty cool last time I used it. Many new employees seem to think that way too. However in this particular time and place, I am mildly against it usage. Why? Docker like any other technology solves particular set of problems. There is little reason to use it, if those problems are not the ones you need to solve at the moment.

Technologies list the problems they solve, but it is like reading medical books: one starts to feel symptoms of every disease one reads about. Like those symptoms, the problems are likely not to be real if you notice them only after reading about the new technology. On the other hand every technology brings its own problems to the mix. ZeroMQ brought dependency to native library to a Java application. Docker forced us to duplicate services as the docker host crashed time to time. There were bugs and so on. But we had the disease that required these cures, the benefits were bigger than the problems. In different time and place this might not be the case.

So, should one start using some technology because others are using it? Absolutely no. But if the technology solves the biggest problem at hand, then it might be worthy of consideration.

Panu Wetterstrand