Why Version Control Exists: The Pendrive Problem
The journey from Pendrive to VCS

Introduction
Let's start with a short story, a developer named Vikas started a project, at the beginning Vikas works alone in the project, but as time went by codebase grew larger, which becomes difficult to track changes in codebase for him, but he ignore that problem at that time. Now one day, Vikas faces some issues in implementing a specific feature, so he called his developer friend Rahul, to help him in it and Rahul agrees to help him.
Now Vikas faces another issue, that how to share entire codebase with Rahul. He thinks for solutions, and come up with the idea of Pendrive. So, he put his entire codebase in Pendrive, and then he gave pendrive to Rahul. Rahul implements the feature which is requested by Vikas, and gave pendrive back to Vikas. Now, Vikas does not find that where Rahul adds the new code, this is the same changes tracking issue, which he faced earlier, but at the end he is happy beacuse that feature is implemented.
Now Vikas and Rahul both decides to collaborate in the project together with one of their common developer friend Priya. But they all faces same problem which Vikas faces earlier that how to share codebase, because by sharing codebase in pendrive, only one person will be able to work on project at a time. But they have no other option left. So, they decides, that they will share codebase with pendrive only, and entire workflow will like this Vikas make changes in codebase, he will make folder named final.zip and give to Rahul, then Rahul make changes in codebase, he will make folder named final_v2.zip and give to Priya and then at last Priya make changes in codebase, she will make folder named final_v3.zip and give back to Vikas. This process is very difficult, but this is there last option.
But after sometime, they all faces same old changes tracking issue and also by sharing and making multiple folders many times, the codebase becomes messy, and all their hard work went down the drain.
Story ends, I know I said a short story, but this is too long, sorry for that. But, after reading complete story you now understands that there are two major issues in software development:
How to track changes in codebase
How to collaborate with multiple developers
Then, here comes the hero of our story Version Control System(VCS). Version Control System is used nowadays to track the changes in codebase**.**
Before the invention of Version Control System, we faces problems in software development which i discussed above in story.
The Pendrive Analogy in Software Devlopment
Git is one of the most popular tool for version control system. Btw, you know who invented Git?
Git is invented by Linus Torvalds, legend who is the creator and lead developer of Linux Kernel.
Before tools like git exists, developers use pendrives and emails to share codebase with each other. These are the difficult methods, but yet they have no other options left. The workflow is same as I discussed above in story, developers share codebase with changes in pendrive, and every time with new folders which includes final.zip, final_v2.zip, latest_final.zip, etc and sometimes even with the email, with attached folder and message:
"This the folder with updated changes."
All beacuse they do not want to loss their existing functionalities and features.
And, as time went by, folder structure looks like this:
Project/
├── final/
├── final_v2/
├── final_v3/
├── latest_final_v3/
├── real_latest_final_v3/
└── really_real_latest_final_v3/
A complete mess.
Thus, pendrive is not effective in software development
Problems faced before Version Control System(VCS)
These are some of the problems which developers faced before Version Control System:
1. Overwritting Code
When two developers works seprately in their local machine on same codebase, then there is a possiblity that they replace existing code or feature with the new code or new feature, which could leads to conflict between developers or cause the project to crash.
Example:
Developer A adds payment feature in a specific page.
Now, Developer B is working on a older version of project in same page where Developer A adds payment feature.
After making changes in that file, Developer B copies his version from the pendrive back to the project folder, replacing Developer A's updated files.
This leads to loss of payment feature.
2. Losing Changes
This includes:
Developers make all their changes and save final changes only in pendrive, and if pendrive get lost or gets corrupted, then the complete project is lost.
If one of the developer, forgets to copy the latest file from the pendrive, and make changes in existing file, the projects might gets messy.
If the system gets corrupt just before putting latest changes in the pendrive, then the latest changes will get lost.
And many more like, deleted by mistake, formatting the pendrive, file corruption, etc
3. Issue in Collaboration history
Let's understand this with an example:
Suppose there are three developers working together in same project, now Developer A and B changes something in specific file.
Now Developer C has some issues with that changes in that file, but he does not know to contact who either Developer A or B, because they both edited that file.
4. Problem in Collaboration
This is one of the main problem, beacuse pendrive is not an effective method. Collaborating by pendrive, requires more time, more focus and unneccessary hardwork like copy latest files from pendrive, make changes in that pendrive and put final changes in that file.
And as team grows, there is next to impossible to rotate pendrive and make changes in that.
Why Version Control System becomes mandatory in Modern Sotware Sytem
The problem is same:
How to track changes
How to colloborate effectively
As pendrive is not effective, and for large team it is impossible, because in large team it is very important to:
Track changes
Who edited last in the project?
Which feature to keep or remove?
Keep all the correct code
Multiple users can collaborate at same time
For all of these we require Version Control System(VCS).
Conclusion
Pendrives can be used for software devlopment when team is small or codebase is low, beacuse in small team, developers can communicate with each other about changes, and other things and can share pendrive with each other.
But for large team and large codebases, pendrive is impossible for software development. Version Control System solved these problems by tracking changes and allow developers to collaborate in same project at same time with the help of Github.
Nowadays, git is not one of the popular tool for vcs, but it is necessary for developers andcompanies for software development. Today, We are grateful and lucky, bacause by writting only few commands, we can store our code, track our code and can collaborate with each other in same codebase effectively.
