Streamlining Developer On-boarding with Containerization
Anyone who has worked in technology for even a short period of time has heard these words: “but it worked on my machine.” One of the more painful experiences for an engineer new to a team is configuring their computer to work with the tech stack and building/running the project locally. The process of installing […]
Anyone who has worked in technology for even a short period of time has heard these words: “but it worked on my machine.” One of the more painful experiences for an engineer new to a team is configuring their computer to work with the tech stack and building/running the project locally. The process of installing software (and their correct versions), setting up databases, and figuring out how to launch the application can waste valuable time. Containerization tooling, in particular Docker and Docker Compose, can dramatically speed up on-boarding a new engineer, give them the flexibility to easily switch between projects, and ensure that development environments are the same across teams.
Let’s start with a concrete example: a simple Python/Django web application. Alongside Python and Django, a small project will likely require a web server, database, and a caching mechanism like Redis. Although it doesn’t sound too difficult to set up, the new engineer will need to configure a virtual environment with the specific Python version used and install the correct versions of the web server, database, and cache.
This may not take too much time, but if one developer is on a MacBook while another is on a Windows computer, there may be some issues downloading the same versions of each software. Compound that with the idea that the developer may need a different version of Python or Django installed for a separate project, and we start to see where some issues may arise (installing two separate versions of the same software alongside each other can be tricky). Let’s introduce a solution to this issue: Docker.
Looking at the same example above, the architecture will be very similar. Each ‘service’ will have its own container, so we will have a container for Python/Django, one for the web server, one for the database, and one for the cache. A docker-compose file will define how each container functions, and we can specify which version of the software to install in each container. Admittedly, containerizing the application will require some additional code and complexity, but this should pay off in the long run for a couple of reasons.
For one, each new engineer system will only need the appropriate versions of Docker installed on their computer (and should be able to launch the application by using only one command similar to ‘docker-compose up’). Since each version of the software needed is inside the container and not directly on the host machine, it frees the engineer from needing to manually install anything directly on their computer other than Docker.
Another reason this containerization is worth the configuration time is it allows the developer the flexibility to have multiple projects alongside each other with different software versions. In the web application example, imagine the engineer also has a legacy application that requires an older version of Python and Django. In the containerization approach, the containers with different versions of the programs needed live among side each other harmoniously with no conflicts, minimizing the time needed to switch between projects.
One final reason this should be worth the effort: the production environment can be containerized in a similar way as the local/dev instances of the application. The more similarities between the developer environment and production, hopefully the less issues that are introduced into production!
No matter the technology stack, containerization is an option worth considering. Are you spending large amounts of time on debugging local environment issues or interested in learning how containerization can empower your team and work for your project? Exelaration has the experience to containerize your application and modernize your tech stack. Learn more by emailing us at firstname.lastname@example.org!