The use of tools seems to have exploded in the past few years. Simple web applications take 5 tools just to build and more complex setup are even more prevalent. Add to that that we also end up configuring our tools to better suit our needs and you are faced with a big dependency problem. How do you manage those dependencies? My most recent answer is Docker.
It's not easy for developers and users to use tools
Tools were invented to make doing tasks easier. And in software we often abstract those tools further. However, making sure that everyone can use those tools is challenging. Just look at how long people spend setting up machines and every time they have a new project the mess starts again. It's not easy for developers and users to use tools.
One of the main reasons that it is not easy is because we often end up either customising our tools to best suit our purpose, or just the very matter that there is learning curve around using those tools. However, that stops developers and users from being able to quickly onboard themselves. Part of my current role is around onboarding developers, any time spent training them is both time away from what they are due to be doing and time away for the person training them. So it is critical to onboard quickly and effectively.
use Docker to control the environment and just give users the tools they want
So being able to control the environment for how you onboard developers (or users) to a project is essential. However, this is challenging with so many dependencies. What if we could use Docker to control the environment and just give users the tools they want?
What can we control?
Users/developers need a certain set of packaging tools? NPM/Composer/Ruby Gems/PIP. Why not give them the correct Docker container to be able to run. 0 setup for developers/users.
So if you want developers to use a particular coding standard, why not use a Docker container to allow them to run with that exact standard. 0 setup for developers/users.
I often run with custom Ansible playbooks and roles and combine them with open-source roles/playbooks, keys and variables. Why not bundle it all into a Docker container. 0 setup for developers/users.
Want to run image/video/media processing for everyone. Package in a Docker container. Want to share custom programs. Distribute in a Docker container. 0 setup for developers/users.
Difficulties with users running different OS or versions? If it runs Docker, it should run! 0 setup for developers/users.
Continuous Integration/Continuous Delivery Pipelines
Want to use it inside your CI/CD Pipelines or pre-commit hooks? No problem? Got Docker? 0 setup for developers/users.
Where to next?
I have already started on building Docker DevTools with a core set of tools that I use every day. And it already works. At the moment Microsoft Windows support is theoretical.
I would love comments, commits or challenges about how better to run it. I have some documentation for Docker DevTools and you can checkout the Docker DevTools aliases project on Github You might like to check out Whalebrew which does and I may look at integrating into that in the future.