Perhaps one of the few common tool types for all developers is a change control system. During my career, I have used a progression of them: SCCS RCS ClearCase CVS and SVN Serena Dimensions Git (GitLab and BitBucket) The key features of a version control system are: Keeping all versions of a file Allowing you to tag or label a set of file versions Supporting concurrent editing by multiple people It's this last item that starts a lot of very passionate points of view. You will hear statements like: "You should only develop on master" "You should/shouldn't have a branch for feature development" What you need to keep in mind is that the right answer for a particular development environment will depend on many factors. Let's talk about a few of them. Deployment size: the number of dependencies increases with deployment size. What is reasonable for a micro-service in a single language for a single deployment is not going to be t...