It is baffling that some teams and companies still do not know how to use version control systems, but it is even more baffling to see that some development teams do know about version control systems but decide not to use them. For example, some prefer to store source code on each of the team members’ workstations and then join the code and work from there. The problems that this “approach” brings are many and very grave. For example, one developer could use code dependencies and libraries that are not needed by the rest of the team, or have a disparity of versions of said dependencies.
I have seen such basic and easily avoidable problems like a team member writing her part of the project in one programming language and the rest of the team writing their parts in another language. These kind of mistakes are not even acceptable from students.
The version control systems were created by developers for developers because they came to the conclusion that the source code (their main and most important deliverable) needs to be properly stored and organized. Trough the years, many different VCS have been created, with different characteristics between them. This proves that most developers know the importance of VCS, since they are willing to spend time tweaking and enhancing them.
For those developers that still do not believe in how useful VCS are, here is a list of their advantages:
- Accessibility. By having the code in a shared server, it is easy for the development team to synchronize and update the code independently of the geographic location of the team.
- Backups. As the name implies, VCS are very useful for permanent storage of all the versions of each file, including current and previous versions.
- Collaboration. The team can collaborate by sharing files (see the first point), but control version systems can also help to easily conduct code reviews, approvals, revisions, updates and rollbacks.
- Troubleshooting. By having quick and easy access to previous versions of the source code, it is much easier to identify when a change caused problems, who caused it, and exactly when and how the problem was caused. This is very useful for post-mortem investigations in production environments, as well as for the developers’ learning process.
- Flexibility. VCS are not only used for handling code, they are also used by non-developers. I have seen examples of this by technical writers, who use a VCS for collaboration in the writing, preparation and edition of documents and books. People who support applications use it for storage and handling of tutorials, memorandums, guides and even binary files. In the near future, VCS will be used by other disciplines like architecture, medicine, and graphic design.
- Popularity. Every company that handles software seriously is using some kind of VCS. Even companies that only write software for maintaining another kind of operations and have a revenue stream other than software, have seen the advantages that having a good control of their source code means. This is an advantage for the developers and IT professionals that pursue working for them. Experience and knowledge in VCS can be a decisive advantage in interviews with this kind of companies.