Why I stopped working with docker


There are two reasons of the action. First one is from customer point of view, and the other is from developer point of view.

From customer point of view, they pay for what we do to bring values to them, not for what we do to bring values to us.  In [What is Lean?] from Lean Institute, the core idea of lean is to maximize customer value while minimizing waste. With that in mind, value mapping process separates activities to three categories, value added, non-value added but necessary, non-value added at all.  By "customer", I mean who will be using end product, including software.

Obviously, tasks related to docker are not in first category. They do not bring any benefit to customer. They only help developers to develop and deploy applications.

From developer point of view, when working on something, I need to find reasons why the thing is being used.  For docker, and especially multi-container, I came across the blog [Why Docker, Creating a Multi-Container]. There are two reasons but from [5 Whys] analysis, one is caused by the other.

The first reason, "Maintaining consistent environments is hard", is caused by second one "Installing application dependencies on local machine takes time". When there is not much time to install, we usually skip some tasks, those look like time consuming but are important to repeat the installation to other environments. They are tasks to log installation steps.

But then, instead of continue the [5 Why] analysis, we end up using a solution that create more tasks, named docker. Now, besides managing dependencies for application being developed, we also have to managing dependencies for docker images/repository. It is kind of double works.

Now, continue with the second cause, why the installation takes time? Because we don't have script to automate it. Why we don't have script to automate?  Because we don't have time to write it. So, why we have time to learn and build docker images but we don't have time to write simple scripts to install dependencies? By developing scripts, not only we ease our life, System Administrators will thank us because we ease their life. Another benefit is that, suppose we maintain a set of scripts for each target environment, we will know exact condition we will deploy our shining application to, development, testing, staging, production.

So, instead of depending on a technology that creates more tasks for me, I continue my practice to maintain sets of scripts to install dependencies.  I also prefer Python's way of managing application environment. It is easy to create new virtual environment and install all of dependencies for new application. With separated environments, we will never have conflict.

[What is Lean?]: https://www.lean.org/whatslean/
[5 Whys]: https://www.lean.org/lexicon/five-whys
[Why Docker, Creating a Multi-Container]: https://dev.to/abiodunjames/why-docker-creating-a-multi-container-application-with-docker--1gpb