The onboarding nightmare
Gary was the new junior developer who joined the team today. It was a big hassle.
First, when Gary got his laptop, he had to install various IDEs and the database server locally. He followed the setup document - but the document was wrong.
After installing everything, Gary tried to start the application locally (the one he were supposed to work on) - but it wouldn’t start up, because he hadn't setup the database connection properly locally (he had to manually change the database connection string, but this wasn’t mentioned in the docs as it was seen as “assumed knowledge”).
One problem after another
Or the app wouldn’t start up because the software was calling some external systems which were accessible by VPN but he didn't have the access. Also, Gary had the wrong version of the JDK installed because the documentation wasn't updated.
So Gary had to go around asking teammates, find out what JDK version they were using… Everyone was annoyed but had to help him, because he was blocked.
Even after sorting out the JDK, the app still wouldn’t start because the database needed certain tables. Gary had to ask around again, and then found out that he had to manually run SQL scripts to create the tables on their machine. However, when he ran those SQL scripts, the scripts had failures, as the scripts weren’t up to date either, so he ended up taking a database dump from his colleagues.
The next problem was with RabbitMQ - he had to manually create the queue, but the instructions document had a spelling mistake. So then he had to dig inside the source code to find the correct spelling.
The solution: Docker
John, the Tech Lead, realized that this was a wake-up call. The problem wasn’t with Gary. Rather the problem was with their process of working.
John introduced Dockerization to the team - the team added Dockerfiles and was running Docker Compose. Now, nobody needed to install a specific database nor RabbitMQ locally. Then just needed to run Docker Compose
and the whole app would be up-and-running.
With Docker, there was no longer a need to manage setup document.
A new team member could just come, clone the project, and run Docker Compose, eliminating the problem of “it works on my machine.”
No more hassling teammates just to get started!
Is it easy for developers who've never used Docker to get used to it?
I'd prefer something like Flyway to keep database schema and code in sync. But Docker for sure avoids the hazzle of installing and updating database and middleware. Your build system should pick the correct version of the compiler.
The should be no procedure other than getting the software from the repository , almost.
Documents get outdated. Period.