# Understanding the Need for Version Control: Solving the Pendrive Problem ![Cover image for Understanding the Need for Version Control: Solving the Pendrive Problem](https://prod-files-secure.s3.us-west-2.amazonaws.com/1daf8d7b-bd6a-4278-9213-f77aa4198ce5/8c6090f8-70de-468a-8dd4-dbdd65be6b08/6b168918-e197-40d0-bd04-bd31cf7a2cf7.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466WZXNRY45%2F20261101%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261101T133314Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJr%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJIMEYCIQC%2BSLfZcjl%2BoqZe23%2FiZEpOCkxgyjsiytOGz2LPou628wIhAKn3duT3qUP31xURCT3R3OvNfA8Q4KvZEQpCeWXFWbSCKv8DCGMQABoMNjM3NDIzMTgzODA1Igyq7KpJuCnbvN8QCHoq3ANw2a0HiFp32f3BtcSeD0vXe85fDxrZAFj4KrPF1Utr%2FeqJgSCwa4QjMr%2B54mYqF9hwo%2BnjfrW7nQPphEbn37l5DwGzXxN1BMBVyijVf%2FQ98dwFRrd%2FYRxejE64hGdtMzskdOc6fKD520O4m7QjIrucUYYyWTPxNvG9PrGp%2F0KuA0gZIm2qz%2BC4GxcMj%2FHpm8lLXgJln3LhxPlnjNqyGfXKAEKpZsxG50tnEdeco32tYmHp8laqqa7INCdlRS%2BUnU8Na1Qz0zGyaDnDAcYIDXx5g1kpsokLSODnGRHs9WJhIbdUT5jCEEbCnjSBZwsknEDJ905uJrrjymnvML1cOh8ICkK08vAICG32R%2FD7ciXjxk4F5hzgPNpZMynIAHMy6bB%2FHXpzbPYdMl1OlRTFYUDDqzzubE6dVDUDoHr84Z0%2Fnz3Hvwn%2BYe3bsC2XoyvhOzvs5QYe1hO8pr9T0nvya0GSmH6JO5ch34GrDK7Jx0Wc6WUbxebgxXPH1WPhNr%2BI1gxgUnfl4Q0uV3ggLher2N4X40oifN0CKpoS4x7mJ0KTyej7jkrl9OmDxn6zcKdNV3EAlQwFk%2FlxYAivU0in%2FSibVuUrQaH2DtCy2arCUZNHV0U2PivcI2YeF5V%2FkTCqlJzXBjqkARr6oFit89lJliFa%2B%2FGIfl%2F4w%2FtsD7fOsOaVaUnS8lX6ptyVRft2jgns6ry7VRQQEXtFBImHxFB%2BQaAeQCjQvT1kLCT1Auk7w9zz9gHSFufzuoqwF0OTOCL7ofvRuliJeu3aELQnYsTCNfav%2F7jntY0hGEmLp3XvGSlxT5WL5i3ceKb2Y5HVdGufDIT78Rryvpg4GVnAQNlNARbQX1GzsqjJIX74&X-Amz-Signature=41a5485174367593e50a360f46606393222d0421e5fad63f3013e544b0bb5679&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) ## The Pre–Version Control Era Let’s go back to a time before Git, before GitHub — even before good internet. You and your teammate, Sid, are working on your dream project. Both of you live a few kilometres apart, and there is no internet connection. You write your part of the code, zip the project folder, copy it to a pendrive, and travel to Sid’s place so he can work on it. Sid opens the folder, writes his part, saves the changes, and gives the pendrive back. You come home, plug it in, and open the project. There are changes. But you can’t tell what changed, where it changed, or who changed it. You ignore it for now because the project still works. The next day, a bug appears. You try to find what caused it — but there is no way to know which one of you changed what. If you fix the bug, you might accidentally overwrite Sid’s work. If Sid fixes something tomorrow, he might overwrite yours. And this is where the real pain begins… ![Illustration accompanying: The Pre–Version Control Era](https://prod-files-secure.s3.us-west-2.amazonaws.com/1daf8d7b-bd6a-4278-9213-f77aa4198ce5/e5c5bcbc-5de5-476f-89a3-455c511e36a0/version-control-pendrive-illustration.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466WZXNRY45%2F20261101%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261101T133314Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJr%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJIMEYCIQC%2BSLfZcjl%2BoqZe23%2FiZEpOCkxgyjsiytOGz2LPou628wIhAKn3duT3qUP31xURCT3R3OvNfA8Q4KvZEQpCeWXFWbSCKv8DCGMQABoMNjM3NDIzMTgzODA1Igyq7KpJuCnbvN8QCHoq3ANw2a0HiFp32f3BtcSeD0vXe85fDxrZAFj4KrPF1Utr%2FeqJgSCwa4QjMr%2B54mYqF9hwo%2BnjfrW7nQPphEbn37l5DwGzXxN1BMBVyijVf%2FQ98dwFRrd%2FYRxejE64hGdtMzskdOc6fKD520O4m7QjIrucUYYyWTPxNvG9PrGp%2F0KuA0gZIm2qz%2BC4GxcMj%2FHpm8lLXgJln3LhxPlnjNqyGfXKAEKpZsxG50tnEdeco32tYmHp8laqqa7INCdlRS%2BUnU8Na1Qz0zGyaDnDAcYIDXx5g1kpsokLSODnGRHs9WJhIbdUT5jCEEbCnjSBZwsknEDJ905uJrrjymnvML1cOh8ICkK08vAICG32R%2FD7ciXjxk4F5hzgPNpZMynIAHMy6bB%2FHXpzbPYdMl1OlRTFYUDDqzzubE6dVDUDoHr84Z0%2Fnz3Hvwn%2BYe3bsC2XoyvhOzvs5QYe1hO8pr9T0nvya0GSmH6JO5ch34GrDK7Jx0Wc6WUbxebgxXPH1WPhNr%2BI1gxgUnfl4Q0uV3ggLher2N4X40oifN0CKpoS4x7mJ0KTyej7jkrl9OmDxn6zcKdNV3EAlQwFk%2FlxYAivU0in%2FSibVuUrQaH2DtCy2arCUZNHV0U2PivcI2YeF5V%2FkTCqlJzXBjqkARr6oFit89lJliFa%2B%2FGIfl%2F4w%2FtsD7fOsOaVaUnS8lX6ptyVRft2jgns6ry7VRQQEXtFBImHxFB%2BQaAeQCjQvT1kLCT1Auk7w9zz9gHSFufzuoqwF0OTOCL7ofvRuliJeu3aELQnYsTCNfav%2F7jntY0hGEmLp3XvGSlxT5WL5i3ceKb2Y5HVdGufDIT78Rryvpg4GVnAQNlNARbQX1GzsqjJIX74&X-Amz-Signature=79755c87d61daadd4495d5d838371bda85d989f75b73f8f3e38add416fbd41b9&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) ## The 'Brilliant' Solution You and Sid Came Up Since both you and Sid are smart, you try to solve the problem yourselves. You create new folders every time you make changes: ![Illustration accompanying: The 'Brilliant' Solution You and Sid Came Up](https://prod-files-secure.s3.us-west-2.amazonaws.com/1daf8d7b-bd6a-4278-9213-f77aa4198ce5/cc5e592c-4912-4019-b2f1-1440cdfe1b7c/63383e6b-c2eb-4663-9325-8d13b590d05d.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466WZXNRY45%2F20261101%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261101T133314Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJr%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJIMEYCIQC%2BSLfZcjl%2BoqZe23%2FiZEpOCkxgyjsiytOGz2LPou628wIhAKn3duT3qUP31xURCT3R3OvNfA8Q4KvZEQpCeWXFWbSCKv8DCGMQABoMNjM3NDIzMTgzODA1Igyq7KpJuCnbvN8QCHoq3ANw2a0HiFp32f3BtcSeD0vXe85fDxrZAFj4KrPF1Utr%2FeqJgSCwa4QjMr%2B54mYqF9hwo%2BnjfrW7nQPphEbn37l5DwGzXxN1BMBVyijVf%2FQ98dwFRrd%2FYRxejE64hGdtMzskdOc6fKD520O4m7QjIrucUYYyWTPxNvG9PrGp%2F0KuA0gZIm2qz%2BC4GxcMj%2FHpm8lLXgJln3LhxPlnjNqyGfXKAEKpZsxG50tnEdeco32tYmHp8laqqa7INCdlRS%2BUnU8Na1Qz0zGyaDnDAcYIDXx5g1kpsokLSODnGRHs9WJhIbdUT5jCEEbCnjSBZwsknEDJ905uJrrjymnvML1cOh8ICkK08vAICG32R%2FD7ciXjxk4F5hzgPNpZMynIAHMy6bB%2FHXpzbPYdMl1OlRTFYUDDqzzubE6dVDUDoHr84Z0%2Fnz3Hvwn%2BYe3bsC2XoyvhOzvs5QYe1hO8pr9T0nvya0GSmH6JO5ch34GrDK7Jx0Wc6WUbxebgxXPH1WPhNr%2BI1gxgUnfl4Q0uV3ggLher2N4X40oifN0CKpoS4x7mJ0KTyej7jkrl9OmDxn6zcKdNV3EAlQwFk%2FlxYAivU0in%2FSibVuUrQaH2DtCy2arCUZNHV0U2PivcI2YeF5V%2FkTCqlJzXBjqkARr6oFit89lJliFa%2B%2FGIfl%2F4w%2FtsD7fOsOaVaUnS8lX6ptyVRft2jgns6ry7VRQQEXtFBImHxFB%2BQaAeQCjQvT1kLCT1Auk7w9zz9gHSFufzuoqwF0OTOCL7ofvRuliJeu3aELQnYsTCNfav%2F7jntY0hGEmLp3XvGSlxT5WL5i3ceKb2Y5HVdGufDIT78Rryvpg4GVnAQNlNARbQX1GzsqjJIX74&X-Amz-Signature=4fbcd0a53cbf831e27de424fa0b543fde28af439fb56cca957c40f746bf93404&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) This feels clever at first. But very soon: - The project size grows uncontrollably - You lose track of which folder contains which change - Both of you edit different copies at the same time - Merging work becomes impossible - Adding even one more teammate breaks everything The system collapses the moment more than one person works simultaneously. ## What were the problems with this system ? ### 1. No way to track changes You couldn’t see what changed, when it changed, or who changed it. ### 2. No reliable history If someone introduced a bug, there was no clean way to go back to a previous working version. ### 3. High chances of overwriting Your changes could delete Sid’s changes — and the opposite — without anyone noticing until the project broke. ### 4. Zero collaboration Only one person could work safely at a time. Any parallel work guaranteed conflicts. ### 5. Slow development When everyone waits for everyone else, progress collapses. This was not a “small problem.” It was a fundamental blocker to writing software as a team. ## Trying to Imagine a Better System Developers started thinking: > “What if we had a system that tracked changes the same way a time tracker records start and end times?” A system that: - Records every change - Knows who made the change - Allows going back in time - Prevents overwriting someone else’s work - Allows multiple people to collaborate simultaneously But then more questions appeared: ### How do we store these changes? Maybe in a file… maybe in a custom database… something that remembers differences. ### What about trust? What if someone modifies the history? We could restrict manual editing and allow changes only through specific commands. ### How do we solve remote collaboration? Host this “change tracker” online so teams across the world can share and sync work. This idea — the idea of a system that tracks, stores, and organizes changes — eventually became… ## What is Version Control Systems (VCS) ? Version Control is simply: > Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. ~ https://git-scm.com/ Tools like Git, Subversion, Mercurial, and Perforce all implement this idea in different ways. At their core, they are just trackers — but extremely smart ones. They solve the exact problems the pendrive workflow created: - lost changes - overwritten code - no history - no collaboration ![Illustration accompanying: What is Version Control Systems (VCS) ?](https://prod-files-secure.s3.us-west-2.amazonaws.com/1daf8d7b-bd6a-4278-9213-f77aa4198ce5/b9f0088a-1947-46ee-813c-60118a783706/f4c5116e-6f2c-4c55-b4be-2e6f87306dcc.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466WZXNRY45%2F20261101%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261101T133315Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJr%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJIMEYCIQC%2BSLfZcjl%2BoqZe23%2FiZEpOCkxgyjsiytOGz2LPou628wIhAKn3duT3qUP31xURCT3R3OvNfA8Q4KvZEQpCeWXFWbSCKv8DCGMQABoMNjM3NDIzMTgzODA1Igyq7KpJuCnbvN8QCHoq3ANw2a0HiFp32f3BtcSeD0vXe85fDxrZAFj4KrPF1Utr%2FeqJgSCwa4QjMr%2B54mYqF9hwo%2BnjfrW7nQPphEbn37l5DwGzXxN1BMBVyijVf%2FQ98dwFRrd%2FYRxejE64hGdtMzskdOc6fKD520O4m7QjIrucUYYyWTPxNvG9PrGp%2F0KuA0gZIm2qz%2BC4GxcMj%2FHpm8lLXgJln3LhxPlnjNqyGfXKAEKpZsxG50tnEdeco32tYmHp8laqqa7INCdlRS%2BUnU8Na1Qz0zGyaDnDAcYIDXx5g1kpsokLSODnGRHs9WJhIbdUT5jCEEbCnjSBZwsknEDJ905uJrrjymnvML1cOh8ICkK08vAICG32R%2FD7ciXjxk4F5hzgPNpZMynIAHMy6bB%2FHXpzbPYdMl1OlRTFYUDDqzzubE6dVDUDoHr84Z0%2Fnz3Hvwn%2BYe3bsC2XoyvhOzvs5QYe1hO8pr9T0nvya0GSmH6JO5ch34GrDK7Jx0Wc6WUbxebgxXPH1WPhNr%2BI1gxgUnfl4Q0uV3ggLher2N4X40oifN0CKpoS4x7mJ0KTyej7jkrl9OmDxn6zcKdNV3EAlQwFk%2FlxYAivU0in%2FSibVuUrQaH2DtCy2arCUZNHV0U2PivcI2YeF5V%2FkTCqlJzXBjqkARr6oFit89lJliFa%2B%2FGIfl%2F4w%2FtsD7fOsOaVaUnS8lX6ptyVRft2jgns6ry7VRQQEXtFBImHxFB%2BQaAeQCjQvT1kLCT1Auk7w9zz9gHSFufzuoqwF0OTOCL7ofvRuliJeu3aELQnYsTCNfav%2F7jntY0hGEmLp3XvGSlxT5WL5i3ceKb2Y5HVdGufDIT78Rryvpg4GVnAQNlNARbQX1GzsqjJIX74&X-Amz-Signature=b27b58c83852428787031e008c8e49a306c63a073d88051ea215925b0d4d25d2&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) ## Why Version Control Became Essential ? Now imagine this same pendrive chaos… but happening inside a real company with 10, 50, or even hundreds of developers. Everyone is writing code, fixing bugs, adding features, and trying to move fast. If even two people overwrite each other by mistake, the whole project can break. If a bug appears and no one knows who made which change, the team can lose days trying to figure it out. Soon it became clear that the pendrive method, or the “final, final_v2, latest_final” method, could not survive modern software development. Projects were getting bigger, teams were becoming global, and changes were happening every hour. Without a proper tracking system, development simply froze. So Version control didn't become popular because developers thought it was cool. It became necessary because teams literally could not function without it. They needed a way to save every change, track every contributor, and collaborate without stepping on each other’s work. And that is exactly where tools like Git entered the picture — not as a luxury, but as the foundation of how modern software is built. ## Can you build your own VCS ? The short answer is — yes, you can. At its core, a version control system is just a tracker. It tracks changes, stores history, and knows who made which change. If you are a good programmer, you can build something similar yourself. You could use a database like PostgreSQL or even simple files to store changes. You could also host this system on your own server or on a cloud platform like AWS. In fact, that is exactly what different version control systems do. Git, Subversion, Mercurial, and others all solve the same problem — tracking changes and enabling collaboration — but each of them has its own way of storing data, managing history, and syncing changes across machines. The idea is simple. The implementation is hard. That’s why instead of reinventing the wheel, developers use mature tools like Git, which have already solved these problems efficiently and reliably. ## What next ? By now, it should be clear that version control is not a tool by itself — it is a concept. A concept built to track changes, preserve history, and help developers collaborate without overwriting each other’s work. In the next article, we’ll look at the implementation of one such widely used version control system: Git. We’ll focus only on how it implement the concepts discussed and some basic and essential Git commands — the ones you’ll actually use most of the time in real projects. We’ll talk about Git, not GitHub. GitHub is just a platform that hosts Git repositories. See you in the next one Connect with me on LinkedIn and X