DEV Community

Cover image for Why Version Control Exists: The Pendrive Problem
Pratham
Pratham

Posted on • Edited on

Why Version Control Exists: The Pendrive Problem

Have you ever wondered why modern-day developers can't work without Git?

Let me tell you a story about Piyush, a developer building a simple
e-commerce website.

Here's what his Desktop looks like:

Desktop/
  ├── EcommerceProject/
  ├── EcommerceProject_Backup_Monday/
  ├── EcommerceProject_Backup_Wednesday/
  ├── EcommerceProject_Working_Version/
  ├── EcommerceProject_FINAL/
  ├── EcommerceProject_FINAL_v2/
  └── EcommerceProject_ACTUAL_FINAL_USE_THIS/
Enter fullscreen mode Exit fullscreen mode

Sound familiar?

Let's see what happens when things get real.


Problem 1: You Can't Go Back in Time

Monday, 10:00 AM — Piyush writes a shopping cart feature.

File: cart.js

function addToCart(item) {
  let cart = [];
  cart.push(item);
  console.log("Item added!");
  return cart;
}
Enter fullscreen mode Exit fullscreen mode

He tests it. It works perfectly.

Tuesday, 2:00 PM — Piyush thinks, "Let me make this better."

He rewrites the entire function:

function addToCart(item) {
  let cart = getCartFromDatabase();
  cart.push(item);
  saveCartToDatabase(cart);
  updateCartIcon();
  console.log("Enhanced cart updated!");
  return cart;
}
Enter fullscreen mode Exit fullscreen mode

He saves the file.

The old code? Gone. Just... deleted from existence.

Thursday, 11:00 AM — The tester reports:

"Cart was working fine on Monday. Now it's acting weird."

Piyush's problem:

He needs Monday's code back. But it doesn't exist anymore.
It's not in the Recycle Bin. It's not saved anywhere.
It's just... gone forever.

This is the first big problem:

You can't travel back in time to see what your code looked like before.
Once you hit save, the old version disappears.


The "Solution": The Final Naming Disaster

Okay, Piyush learns his lesson. He starts making backups by copying the entire project folder every evening.

EcommerceProject_Dec12_Before_Cart_Changes/
EcommerceProject_Dec13_Cart_Working/
EcommerceProject_Dec14_BROKEN_Dont_Use/
EcommerceProject_Dec15_Fixed_Cart/
EcommerceProject_Dec16_FINAL/
EcommerceProject_Dec17_FINAL_FINAL/
EcommerceProject_Dec18_FINAL_REAL_THIS_TIME/
Enter fullscreen mode Exit fullscreen mode

Diagram : The "Final" Folder Naming Chaos

📊 THE "FINAL" NAMING DISASTER
════════════════════════════════════════════════════════════════

Piyush's Desktop After 3 Months:
┌────────────────────────────────────────────────────────────┐
│  📁 Desktop                                               │
│    ├── 📁 EcommerceProject                                │
│    ├── 📁 EcommerceProject_Backup_Monday                  │
│    ├── 📁 EcommerceProject_Backup_Wednesday               │
│    ├── 📁 EcommerceProject_Working_Version                │
│    ├── 📁 EcommerceProject_FINAL                ← Which   │
│    ├── 📁 EcommerceProject_FINAL_v2             ← one     │
│    ├── 📁 EcommerceProject_FINAL_FINAL          ← is      │
│    ├── 📁 EcommerceProject_FINAL_REAL           ← the     │
│    ├── 📁 EcommerceProject_ACTUAL_FINAL         ← actual  │
│    ├── 📁 EcommerceProject_FINAL_USE_THIS       ← final?  │
│    ├── 📁 EcommerceProject_Oct3_Working         ← ???     │
│    ├── 📁 EcommerceProject_STABLE_VERSION                 │
│    ├── 📁 EcommerceProject_DONT_DELETE                    │
│    ├── 📁 EcommerceProject_Before_Big_Change              │
│    ├── 📁 EcommerceProject_Working_Good                   │
│    ├── 📁 EcommerceProject_Latest_Working                 │
│    ├── 📁 EcommerceProject_TESTED_VERSION                 │
│    ├── 📁 EcommerceProject_Dec15_Backup                   │
│    ├── 📁 EcommerceProject_PRODUCTION_COPY                │
│    ├── 📁 EcommerceProject_DO_NOT_USE                     │
│    ├── 📁 EcommerceProject_BROKEN                         │
│    ├── 📁 EcommerceProject_FIXED                          │
│    └── 📁 EcommerceProject_THIS_ONE_WORKS        ⬅ 🤔    │
└────────────────────────────────────────────────────────────┘

PROBLEMS:
─────────
❓ Which folder has the working cart feature?
❓ Which folder should be deployed to production?
❓ Which folder has the bug fix from 2 weeks ago?
❓ What's the difference between "FINAL" and "ACTUAL_FINAL"?
❓ Why are there 3 folders with "WORKING" in the name?

RESULT:
───────
⏱️  Wastes 3 hours searching through folders
😰 Tests 23 different versions
❌ Still not sure which one is correct
💾 Wastes 15 GB of disk space on duplicates


WITH VERSION CONTROL (Git):
═══════════════════════════

Desktop/
  └── 📁 EcommerceProject/          ← Just ONE folder!
        └── .git/                   ← All history stored here
            ├── commit abc123: "Added cart feature"
            ├── commit def456: "Fixed login bug"
            ├── commit ghi789: "Added payment validation"
            └── commit jkl012: "Optimized database queries"

✅ One folder
✅ Complete history
✅ Clear descriptions of what changed
✅ Can see exactly what was done in each version
✅ Can roll back to any version instantly
Enter fullscreen mode Exit fullscreen mode

Six months later, a bug appears.

"I fixed this bug before," Piyush thinks. "But which folder was it in?"

He opens 23 folders.
Tests 23 versions.
Wastes 3 hours.

Finally finds it buried in EcommerceProject_Oct3_Working_Version_Good/.

The problem?

Folder names are written by humans.
Humans lie. Humans forget.
And humans use the word "final" way too many times.

You know what Piyush really needed?

A system that automatically tracks versions with meaningful descriptions,
not random folder names.


Diagram : Timeline - File Versions Getting Lost

📊 TIMELINE: How File Versions Get Lost Over Time
═════════════════════════════════════════════════════════════════

❌ WITHOUT VERSION CONTROL:

Monday       Tuesday      Wednesday    Thursday     Friday
  │             │             │            │           │
  v             v             v            v           v
┌─────┐      ┌─────┐      ┌─────┐      ┌─────┐      ┌─────┐
│v1.0 │─────>│v2.0 │─────>│v3.0 │──X──>│v4.0 │─────>│v5.0 │
│     │ Save │     │ Save │     │FORGOT│     │ Save │     │
│Added│ over │Added│ over │Fixed│  TO  │Added│ over │Added│
│login│      │cart │      │ bug │BACKUP│search      │ UI  │
└─────┘      └─────┘      └─────┘      └─────┘      └─────┘
  ✅            ✅           ❌           ✅          ✅
Available   Available      LOST!     Available   Available

PROBLEM ON FRIDAY:
─────────────────
Bug appears that was fixed on Wednesday
❌ Wednesday's code is GONE
❌ No way to recover it
❌ Must recreate the fix from memory
❌ Waste hours debugging again


✅ WITH VERSION CONTROL (Git):

Monday       Tuesday      Wednesday    Thursday     Friday
  │             │             │            │           │
  v             v             v            v           v
┌─────┐      ┌─────┐      ┌─────┐      ┌─────┐      ┌─────┐
│v1.0 │─────>│v2.0 │─────>│v3.0 │─────>│v4.0 │─────>│v5.0 │
│     │commit│     │commit│     │commit│     │commit│     │
│Added│─────>│Added│─────>│Fixed│─────>│Added│─────>│Added│
│login│      │cart │      │ bug │      │search      │ UI  │
└─────┘      └─────┘      └─────┘      └─────┘      └─────┘
  ✅            ✅           ✅           ✅          ✅
  │             │            │            │           │
  └─────────────┴────────────┴────────────┴───────────┘
           ALL VERSIONS PRESERVED FOREVER
                   Can go back to ANY point in time!

BENEFIT:
────────
✅ All versions saved automatically
✅ Can see exactly what changed and when
✅ Can roll back to Wednesday's fix instantly
✅ Complete history with descriptions
Enter fullscreen mode Exit fullscreen mode

When the Team Grows: The Real Chaos Begins

Problem 2: The Illusion of Parallel Speed

Hitesh joins Piyush's team.

They're building a Netflix clone together.
After the initial setup, they want to avoid the "overwrite disaster."

But before they write a single line of code, Hitesh freezes.

He runs a detailed simulation in his head
of what will happen if they both work tomorrow:

  1. The Starting Point (9:00 AM):
    "We both copy the project to our laptops. We are in sync."

  2. The Divergence (12:00 PM):
    "You change login.js on your laptop. I change home.js on my laptop."
    The Reality: "I am now working on an outdated version of the project without knowing it."

  3. Piyush Updates the Pendrive (4:00 PM):
    "You finish first. You copy your new login.js to the pendrive. The pendrive is now updated and correct."

  4. The Collision (5:00 PM):
    "I finish my work. My folder has my new home.js, BUT it still has the old login.js from the morning (because I never got your update)."

  5. The Disaster (Overwrite):
    "I plug in the pendrive and paste my folder. The computer asks: 'Replace files?' I click 'Yes' to add my changes."
    The Result: My old login.js overwrites your new one on the pendrive. Your 4 hours of work are deleted instantly.

  6. The Alternative (Manual Merge):
    "To avoid this, we would have to open every single file and compare them line-by-line every day. That will take hours."

The Realization:

"If we work at the same time, we either accidentally delete each other's code
(Overwrite) or we waste hours comparing files (Merge).

We can't do this."

Sunday Night - Safety Rule:

Piyush: "We need a system. Let's not work at the same time.
         One person works, updates the pendrive, then the other."

Hitesh: "Good idea! Avoids overwrites. Who goes first?"

Piyush: "I'll work Mon-Wed on login feature.
         You work Thu-Fri on watchlist feature."

Hitesh: "Perfect! We'll pass the pendrive Wednesday evening."
Enter fullscreen mode Exit fullscreen mode

Week 1: The "Take Turns" Approach

Monday-Wednesday: Piyush's Turn

  • Piyush works on login feature
  • Updates the pendrive each day
  • Hitesh waits (can't work - pendrive is with Piyush)

Wednesday Evening: The Handoff

  • They meet at office
  • Piyush gives the pendrive to Hitesh
  • Hitesh copies the latest code to his laptop

Thursday-Friday: Hitesh's Turn

  • Hitesh works on watchlist feature
  • Updates the pendrive each day
  • Piyush waits (can't work - pendrive is with Hitesh)

Friday Evening: Success!

  • Both features complete
  • No overwrites! ✅
  • No merge conflicts! ✅
  • Everyone happy! ✅

The Problem: It's Too Slow

Friday night reflection:

Manager: "Good job! Can you add 2 more features next week?"

Piyush: "Umm... that'll take 2 weeks.
         I work 3 days, Hitesh works 3 days.
         We can only do 2 features per week like this."

Manager: "But you're a 2-person team! Can't you work together?"

Hitesh: "If we work at the same time, we'll have merge conflicts."

Manager: "Then figure out how to merge! Deadline is in 2 weeks."
Enter fullscreen mode Exit fullscreen mode

Time breakdown:

  • 5 working days
  • Piyush works: 3 days
  • Hitesh works: 2 days
  • Total productivity: 5 developer-days BUT only 2 features
  • With parallel work: Could be 10 developer-days = 4 features

Week 2: Trying Parallel Work

Sunday Night - New Plan:

Piyush: "We need to work in parallel to meet the deadline."

Hitesh: "But what about merge conflicts?"

Piyush: "We'll work on different features, then manually merge.
         I'll do user profiles. You do notifications."

Hitesh: "Different features = different files. Should work!"
Enter fullscreen mode Exit fullscreen mode

Here is the timeline:

Day 0 (Sunday - Initial Setup)

  • What happened: They meet at a coffee shop to start the project.
  • Action: Piyush has ONE pendrive - this is their "Project Chest" (the official source of truth).
  • Setup: They copy the initial project (NetflixClone_v1.0) onto this shared pendrive.
  • Agreement: "Whoever has the pendrive has the latest code. Always update the pendrive before passing it."
  • Status: Both copy Version 1.0 to their laptops from the pendrive.
  • Pendrive goes home with: Piyush (he lives closer to office)
  • Why this works: They have a single source of truth - the pendrive.

Monday-Tuesday: Both Work in Parallel

Piyush (at home):

  • Builds user profiles feature
  • Files changed: profile.js, settings.js, homepage.html
  • Updates the pendrive daily with his changes
  • Version 2.1 (has profiles, NO notifications)

Hitesh (at home):

  • Builds notifications feature
  • Files changed: notifications.js, alerts.js, homepage.html
  • Works from his laptop (last week's code)
  • Version 2.2 (has notifications, NO profiles)

The conflict: Both edited homepage.html (Piyush added profile menu, Hitesh added notification bell)


  • What happened: They meet at office, excited but nervous about combining their work.

  • The conversation:

  Piyush: "Wait, Let's be systematic and make a checklist. 
           Which files did you change and which files did I change 
           to merge them carefully to reduce the chance 
           of loss of code due to blind overwriting."

  Hitesh: "watchlist.js, storage.js, and homepage.html."

  Piyush: "OK. I changed login.js, auth.js, and also homepage.html."

  Hitesh: "So homepage.html is the conflict.
           Let's merge that manually.
           For the other files, we just keep both versions."

  Piyush: "Smart! Let's do this carefully."
Enter fullscreen mode Exit fullscreen mode
  • Their systematic approach (10:00 AM - 12:30 PM):

Step 1: Copy non-conflicting files (30 min)

  • Piyush copies Hitesh's watchlist.js and storage.js → Works fine ✅
  • Hitesh copies Piyush's login.js and auth.js → Works fine ✅

Step 2: Manual merge of homepage.html (2 hours!)

  • Open Piyush's version in one window
  • Open Hitesh's version in another window
  • Open Notepad for the merged version
  • Compare line by line:

    Line 1-45: Same in both → Copy once ✅
    Line 46-52: Piyush added login button → Keep it ✅
    Line 53-60: Hitesh added watchlist button → Keep it ✅
    Line 61-120: Same in both → Copy once ✅
    Line 121: Piyush's CSS class "user-menu" vs Hitesh's "nav-items"
        ↳ Discussion: Which one? Compromise: Use both
    Line 122-200: More conflicts... more discussions...
    

Their process:

  1. Read Piyush's line 46
  2. Read Hitesh's line 46
  3. Are they same? → No → Discuss which to keep
  4. Type it into merged file
  5. Repeat 200+ times

The result after 2.5 hours:

  • Time spent: 2.5 hours for ONE file
  • 😵 Mental exhaustion: Extremely drained from comparing 200+ lines
  • 😰 Piyush: "My brain hurts. We only merged ONE file."

But the real nightmare was hidden.

They thought they were careful. But in line 150, they made a mistake:

  1. Piyush's code: Checks if user is logged in. If not, redirects to login page immediately.
  2. Hitesh's code: Shows a "Welcome! Get 10% Off" popup to new visitors (to increase signups).

The Merge Error:
Because they were tired, they pasted Hitesh's popup code after Piyush's redirect code.

// The Merged Code:
if (!user.isLoggedIn) {
  window.location.href = "/login"; // <--- REDIRECTS INSTANTLY
}

// Technical Fact: When the browser sees a redirect, it stops
// processing the current page immediately.
showWelcomePopup(); // <--- UNREACHABLE!
Enter fullscreen mode Exit fullscreen mode

The Consequence:
The "Welcome" feature was completely broken. No one noticed because the code "looked" correct. It took 3 days for a customer to report it.

The Irony:
The 10% discount was meant for NEW (logged-out) users to encourage them to sign up. But because of the redirect, new users are kicked out before they see it. The popup only shows to users who are already logged in!

The Double Failure:

  1. Efficiency Fail: They wasted 2.5 hours merging.
  2. Quality Fail: They introduced a bug that basic copy-pasting couldn't catch.

The real problem:

It's not that they CAN'T merge manually. They can.

But it's painfully slow, error-prone, and doesn't scale.

This is a 2-person team on day 3.
Imagine a 10-person team after 6 months.


Diagram : The Parallel Work Merge Problem (Week 2)

📊 WEEK 2: PARALLEL WORK WITH MANUAL MERGE
═══════════════════════════════════════════════════════════════════

STARTING POINT - SUNDAY (END OF WEEK 1)
────────────────────────────────────────
Week 1 complete (login + watchlist working via sequential method).
Now trying PARALLEL work to increase speed.

    ┌──────────────────┐                      ┌──────────────────┐
    │  Piyush's Laptop │       Pendrive       │ Hitesh's Laptop  │
    │   Version 2.0    │◄───── (v2.0) ──────► │   Version 2.0    │
    │                  │   (Shared Pendrive)  │                  │
    │  [+] Homepage    │                      │  [+] Homepage    │
    │  [+] Login       │   Stays with Piyush  │  [+] Login       │
    │  [+] Watchlist   │                      │  [+] Watchlist   │
    │  [-] Profiles    │                      │  [-] Profiles    │
    │  [-]Notifications│                      │  [-]Notifications│
    └──────────────────┘                      └──────────────────┘

WHY THIS IS FINE: Everyone starts Week 2 from the same code (v2.0).


MONDAY-TUESDAY: BOTH WORK IN PARALLEL
──────────────────────────────────────
Piyush works on PROFILES. Hitesh works on NOTIFICATIONS.
Both are at home. Both working simultaneously.

    ┌──────────────────┐                      ┌──────────────────┐
    │  Piyush's Laptop │      Pendrive        │ Hitesh's Laptop  │
    │   Version 2.1    │──► (v2.1 UPDATED)    │   Version 2.2    │
    │  (Working on     │  At Piyush's house   │  (Working on     │
    │   profiles)      │                      │   notifications) │
    │                  │                      │                  │
    │  [+] Homepage    │                      │  [+] Homepage    │
    │  [+] Login       │                      │  [+] Login       │
    │  [+] Watchlist   │                      │  [+] Watchlist   │
    │  [+] Profiles    │                      │  [-] Profiles    │
    │  [+] profile.js  │                      │  [+] Notifs      │
    │  [+] settings.js │                      │  [+] notifs.js   │
    │  [EDITED]        │                      │  [EDITED]        │
    │  homepage.html   │                      │  homepage.html   │
    │  (profile menu)  │                      │  (notif bell)    │
    └──────────────────┘                      └──────────────────┘

THE COLLISION: Both edited `homepage.html`!
- Piyush added: Profile dropdown menu
- Hitesh added: Notification bell icon
- Different features, SAME FILE = CONFLICT incoming!


WEDNESDAY - THE MANUAL MERGE MARATHON
──────────────────────────────────────
They meet at office.
Now they must manually merge v2.1(profiles) and v2.2(notifications).

    ┌───────────────────┐                    ┌──────────────────┐
    │  Piyush's Laptop  │      Pendrive      │ Hitesh's Laptop  │
    │   Version 2.1     │      (v2.1)        │   Version 2.2    │
    │  [+] Profiles     │   At office now    │ [+] Notifications│
    │  [-] Notifications│                    │ [-] Profiles     │
    └───────────────────┘                    └──────────────────┘
                                  │
                                  v
                         ⏰ 2.5 HOURS OF
                         MANUAL MERGING
                         (homepage.html)
                                  │
                                  v
┌───────────────────────────────────────────────────────────────┐
│ {X} THE BROKEN MERGED FILE (homepage.html / script.js)        │
├───────────────────────────────────────────────────────────────┤
│ function initializeHomepage() {                               │
│    loadResources();                                           │
│                                                               │
│    // 1. Piyush's Code (Security Check)                       │
│    // Checks login status. If false, forces redirect.         │
│    redirectIfLoggedOut();  ═══╬═══► login page                │
│                               ║  (Browser redirects)          │
│    // ---------------------   ║ ----------------------        │
│    //   THE "DEAD ZONE"       ║                               │
│    //   (User already left)   ║                               │
│    // ---------------------   ║ ----------------------        │
│                                                               │
│    // 2. Hitesh's Code (New Feature)                          │
│    // Code might run, but user is already navigating away.    │
│    // They NEVER see the popup.                               │
│    showWelcomePopup();                                        │
│ }                                                             │
│                                                               │
│ {x} STATUS: SILENT BUG                                        │
│    The popup feature is dead code.                            │
│    (New visitors never see the 10% discount.                  │
│     Only signed-up users see it!)                             │
└───────────────────────────────────────────────────────────────┘


WHY THIS HAPPENS:
─────────────────
• Manual merging is blind to logic flow
• No tool to warn about unreachable code
• Exhaustion leads to ordering mistakes
• Working from old code → divergent versions
• Doesn't scale (what if 5 files? 20 files?)

WITH VERSION CONTROL (Git):
════════════════════════════
✅ No physical pendrive needed - code is on a server
✅ Both can sync anytime: `git pull` (2 seconds)
✅ Both work on latest code automatically
✅ Git auto-merges in 5 seconds
✅ No 2.5-hour manual merge sessions
Enter fullscreen mode Exit fullscreen mode

The "WhatsApp Before Coding" Fix

After the 2.5-hour merge marathon and the hidden "Discount Bug" disaster, Hitesh puts his foot down.

"No more merging. Ever. It's too dangerous."

To ensure they never edit the same file at the same time again (and avoid merging entirely), they create a strict new rule:

"Message on WhatsApp BEFORE editing any file, and AFTER you're done."

They're disciplined about it. Here's a typical day:

9:00 AM - Piyush: "Working on cart.js now"
9:05 AM - Hitesh: "OK, I'll work on homepage.js"
...
11:05 AM - Piyush: "Wait, let me check if I need product.js..."
11:07 AM - Piyush: "No, go ahead"
...
1:32 PM - Piyush: "Can I work on product.js?"
[Waits 10 minutes... Hitesh at lunch]
1:45 PM - Piyush: "@Hitesh you there?"
1:50 PM - Hitesh: "Yeah, product.js is free, go ahead!"
Enter fullscreen mode Exit fullscreen mode

Total messages that day: 18

Average response wait time: 5-10 minutes


Does this system WORK?

Yes! ✅ No conflicts. No lost code.

But at what cost?

The Hidden Cost of Coordination Overhead

Time Breakdown for Monday:

Activity Time Spent
Actual coding 5 hours
Typing WhatsApp messages 15 minutes
Waiting for responses 45 minutes
Context switching (stop coding to check WhatsApp) 30 minutes
Mental overhead ("Can I edit this file? Let me check") Constant

Total time lost to coordination: ~1.5 hours per day


The psychological impact:

  • 💔 Flow state destroyed: You start coding, get focused, then stop to ask permission
  • 😰 Constant anxiety: "Did Hitesh finish with that file? Should I ask again?"
  • 📱 Phone interruptions: 15-20 WhatsApp notifications per day during work
  • Artificial waiting: You want to code NOW, but have to wait for a reply
  • 🧠 Mental burden: Constantly tracking "who's editing what"

Real conversation after 2 weeks:

Piyush: "This is exhausting. We spend more time coordinating than coding."

Hitesh: "Yeah. I had an idea for a feature yesterday, but you were
         editing 3 files I needed, so I just... waited."

Piyush: "I feel guilty every time I take more than 30 minutes on a file.
         Like I'm blocking you."

Hitesh: "Same. It's like we're taking turns instead of working in parallel."
Enter fullscreen mode Exit fullscreen mode

Why this happens DESPITE perfect discipline:

  • ✅ They message before AND after editing
  • ✅ They respond quickly (within 5-10 minutes)
  • ✅ They never edit the same file simultaneously
  • The system works as intended
  • But it kills productivity and flow
  • Creates artificial bottlenecks (waiting for replies)
  • Destroys parallel work (taking turns instead)
  • Mental exhaustion from constant coordination

The real problem:

Human coordination overhead doesn't scale.

With 2 people, it's 15-20 messages/day.
With 5 people? 100+ messages/day.
With 10 people? The system collapses.


The File Ownership Strategy

"The notification sounds are driving them crazy."

After 2 weeks of constant WhatsApp pings ("Can I edit?"), they realize they are spending more time chatting than coding. They need a way to work in parallel without asking for permission every 5 minutes.

The New Plan: Divide the territory.

"Each person owns specific files. Never touch the other person's files."

Piyush owns:
   cart.js
   checkout.js
   payment.js

Hitesh owns:
   homepage.js
   products.js
   search.js
Enter fullscreen mode Exit fullscreen mode

This actually works! They can code in parallel without stepping on each other's toes.

Monday:

  • Piyush edits cart.js → No problem
  • Hitesh edits products.js → No problem
  • End of day: They share the pendrive
  • No conflicts!

They're productive. They're happy.


When File Ownership Falls Apart

Then a bug report arrives: "Add to cart button doesn't work on product page"

The problem needs fixes in:

  • products.js (Hitesh's file) — where the button lives
  • cart.js (Piyush's file) — where the cart function lives

Who fixes it?

Option 1: Piyush fixes it

  • ❌ Can't touch products.js (that's Hitesh's file)
  • Has to explain to Hitesh what changes to make
  • Waits for Hitesh to make the changes
  • Tests it
  • Doesn't work
  • More back-and-forth explanations
  • More waiting

Option 2: Hitesh fixes it

  • ❌ Can't touch cart.js (that's Piyush's file)
  • Same painful dance

Option 3: Both fix their parts separately

  • Each person edits their own file
  • ❌ Their changes must work together perfectly
  • ❌ They're coding based on assumptions about what the other person will do
  • ❌ Often doesn't work on the first try
  • ❌ Debugging takes forever because they can't see each other's changes

What should take 30 minutes ends up taking 4 hours.

The file ownership strategy breaks whenever real work crosses file boundaries — which happens all the time in real projects.


Three Developers: When Things Get Truly Impossible

The Three-Way Collision

Anirudh joins the team. Now there are three developers.

Since strict "File Ownership" failed (because work always crosses files), they abandon it. They realize they must edit the same files to be productive.

The New Strategy: Extreme Bureaucracy.

"If we are going to edit the same files," Piyush says, "We need to track every single line. No more guessing."

Monday, 8:30 AM - The Spreadsheet System:

Piyush: "Team meeting! We are all editing payment.js today."

Hitesh: "That's risky."

Piyush: "Not if we use THE SPREADSHEET.
         We log every line we change. Then we merge at 5 PM."

Anirudh: "Okay. I'll add email notifications."
Hitesh: "I'll add validation."
Piyush: "I'll add formatting."
Enter fullscreen mode Exit fullscreen mode

Their coordination spreadsheet:

Developer Feature Lines Changed Start Time End Time
Piyush Add dollar sign Line 2 9:00 AM 11:00 AM
Hitesh Add validation Lines 1-6 10:00 AM 12:00 PM
Anirudh Add email notification Line 3 11:00 AM 1:00 PM

File: payment.js (starting version, 9:00 AM)

function processPayment(amount) {
  console.log("Processing: " + amount);
  return true;
}
Enter fullscreen mode Exit fullscreen mode

Piyush's version (works 9:00 AM - 11:00 AM):

function processPayment(amount) {
  console.log("Processing: $" + amount); // Added dollar sign
  return true;
}
Enter fullscreen mode Exit fullscreen mode

Copies to pendrive. Updates spreadsheet. Done for the day.


Hitesh's version (works 10:00 AM - 12:00 PM):

function processPayment(amount) {
  if (amount > 0) {
    // Added validation
    console.log("Processing: " + amount);
    return true;
  }
  return false;
}
Enter fullscreen mode Exit fullscreen mode

Copies to pendrive. Updates spreadsheet. Done for the day.


Anirudh's version (works 11:00 AM - 1:00 PM):

function processPayment(amount) {
  console.log("Payment processing started"); // Changed message
  sendEmailNotification(); // Added email feature
  return true;
}
Enter fullscreen mode Exit fullscreen mode

Copies to pendrive. Updates spreadsheet. Done for the day.


The 3-Way Merge Horror

5:00 PM — They meet on Google Meet to combine their code:

Piyush: "OK team, I have the 3 versions. Let me start merging."

Hitesh: "Want help?"

Piyush: "No, I got this. I'll share my screen."
Enter fullscreen mode Exit fullscreen mode

Piyush's mental process (visible on screen):

  1. Opens 4 windows:

    • Original version
    • His version (dollar sign)
    • Hitesh's version (validation)
    • Anirudh's version (email notification)
  2. Opens a 5th window: payment_MERGED.js

  3. Starts merging line by line:

Line 1 - Function declaration:

  • All 3 versions: Same ✅
  • Merged: function processPayment(amount) {

Line 2 - The console.log:

  • Piyush: console.log("Processing: $" + amount);
  • Hitesh: console.log("Processing: " + amount); (inside if-statement)
  • Anirudh: console.log("Payment processing started");
  • Piyush's brain: "Wait... which message? And does it need the dollar sign? And where does it go - inside or outside the if?"
  • Decision: Combine all: "Payment processing started: $" + amount
  • But where? Inside Hitesh's if-statement

Line 3 - Validation vs Email:

  • Hitesh: Has if (amount > 0) { starting here
  • Anirudh: Has sendEmailNotification(); here
  • Piyush's brain: "Email should only send if validation passes. So put it inside the if-statement."

Line 4-6 - Return statements:

  • Hitesh: Has return true; then return false; outside if
  • Others: Just return true;
  • Piyush's brain: "Keep Hitesh's validation logic."
  1. After 1.5 hours, final merged code:
function processPayment(amount) {
  if (amount > 0) {
    console.log("Payment processing started: $" + amount);
    sendEmailNotification();
    return true;
  }
  return false;
}
Enter fullscreen mode Exit fullscreen mode
  1. Team review:
   Piyush: "Done! Does this look right?"

   Hitesh: "Looks good! ✅"

   Anirudh: "Perfect! ✅"

   All: "Great teamwork!"
Enter fullscreen mode Exit fullscreen mode

Thursday, 10:00 AM - Bug Report:

Client: "We're missing payment attempt notifications!
         Customers only get emails for successful payments,
         but not when their $0 payment fails!"
Enter fullscreen mode Exit fullscreen mode

The team investigates:

// Their merged code:
function processPayment(amount) {
  if (amount > 0) {
    console.log("Payment processing started: $" + amount);
    sendEmailNotification(); // ✅ Only sends if amount > 0
    return true;
  }
  return false; // ❌ Returns false, but...
}
Enter fullscreen mode Exit fullscreen mode

Anirudh: "Wait, my original code sent emails ALWAYS, not just on success. I wanted to notify about the payment ATTEMPT!"

Piyush: "Oh no. I assumed emails should only go out for successful payments. I misunderstood your intent."

The correct merge should have been:

function processPayment(amount) {
  console.log("Payment processing started: $" + amount); // Anirudh's message + Piyush's $
  sendEmailNotification(); // Anirudh's email (before validation)

  if (amount > 0) {
    // Hitesh's validation
    return true;
  }
  return false;
}
Enter fullscreen mode Exit fullscreen mode

What went wrong:

  • Piyush assumed email = success notification
  • He couldn't read Anirudh's mind about the business logic
  • The spreadsheet tracked WHAT changed, not WHY
  • Even looking at all 3 versions, the INTENT wasn't clear

Diagram : Three Developers - The Three-Way Collision

📊 THE SPREADSHEET FAILURE: Multiple Developers, Same File
════════════════════════════════════════════════════════

MONDAY 9:00 AM - Everyone starts with same code:

                   ┌─────────────────────┐
                   │   payment.js v1.0   │
                   │                     │
                   │ function process    │
                   │ Payment(amount) {   │
                   │   console.log(...); │
                   │   return true;      │
                   │ }                   │
                   └──────────┬──────────┘
                              │
            ┌─────────────────┼─────────────────┐
            │                 │                 │
            │                 │                 │
      ┌─────▼───────┐    ┌────▼───────┐    ┌─────▼──────┐
      │  Piyush     │    │ Hitesh     │    │ Anirudh    │
      │ (Formatting)│    │(Validation)│    │ (Email)    │
      └─────┬───────┘    └────┬───────┘    └─────┬──────┘
            │                 │                  │
            │                 │                  │
      Logs line 2     Logs lines 1-6       Logs line 3
     in spreadsheet   in spreadsheet      in spreadsheet
            │                │                 │
            v                v                 v
  ┌──────────────────┐ ┌──────────────┐ ┌──────────────────┐
  │  payment.js v2a  │ │payment.js v2b│ │ payment.js v2c   │
  │                  │ │              │ │                  │
  │ console.log      │ │ if(amount>0) │ │ console.log      │
  │ ("...$"+amount); │ │   ...        │ │ ("Payment...");  │
  │                  │ │ return false │ │ sendEmail();     │
  └──────────────────┘ └──────────────┘ └──────────────────┘
            │                │                 │
            │                │                 │
            └────────────────┼─────────────────┘
                             │
                             v
                    ┌────────────────┐
                    │  5:00 PM       │
                    │  THE MERGE     │
                    │  (Using Sheet) │
                    └────────┬───────┘
                             │
                             v
                  ┌──────────────────────┐
                  │    [X] RESULT:       │
                  │                      │
                  │ The code compiles,   │
                  │ but the LOGIC is     │
                  │ wrong.               │
                  │                      │
                  │ Why? The sheet tracks│
                  │ LINES, not INTENT.   │
                  └──────────────────────┘
Enter fullscreen mode Exit fullscreen mode

The Manual Merge Process (Real Painful Steps)

Anirudh volunteers to merge (rookie mistake).

His process:

  1. Opens Notepad
  2. Opens Piyush's file in one window
  3. Opens Hitesh's file in a second window
  4. Opens his own file in a third window
  5. Creates a fourth window: payment_MERGED.js
  6. Manually reads all three versions and types out the combined version:
function processPayment(amount) {
  if (amount > 0) {
    // From Hitesh
    console.log("Payment processing started: $" + amount); // Combined all three
    sendEmailNotification(); // From Anirudh
    return true;
  }
  return false; // From Hitesh
}
Enter fullscreen mode Exit fullscreen mode
  1. Time taken: 45 minutes
  2. Mistakes made: 3 typos (found later during testing)
  3. Features lost: None (he got lucky this time)

This works for ONE file.

Their project has 247 files.

And this happened on just ONE day.

Imagine doing this every single day, for every file that multiple people touched. It's exhausting, error-prone, and just doesn't scale.


The Experiment Nightmare

When You Want to Try Something New

Real scenario:

Anirudh: "I want to try a new payment gateway. But it's risky—might break everything."

His options with the pendrive system:

Option 1: Work in the main code

  • ❌ If it breaks, the entire team is blocked
  • ❌ Team can't work while he experiments
  • ❌ Too risky

Option 2: Copy the entire project

He creates:

MainProject/              ← Team works here
ExperimentalProject/      ← Anirudh works here
Enter fullscreen mode Exit fullscreen mode

What happens over 2 weeks:

Week 1:

  • Anirudh codes in ExperimentalProject/
  • Piyush and Hitesh code in MainProject/
  • The projects start drifting apart

MainProject changes (by the team):

 Fixed login bug
 Added search feature
 Optimized database queries
 Updated 47 files
Enter fullscreen mode Exit fullscreen mode

ExperimentalProject changes (by Anirudh):

 Integrated new payment gateway
 Modified 23 files
 Created 5 new files
Enter fullscreen mode Exit fullscreen mode

Week 2 — Anirudh's experiment works!

Anirudh: "The new payment gateway is perfect! Let's add it to the main project!"

The nightmare begins:

Files changed in BOTH projects:

  • payment.js ← Changed by Anirudh AND the team
  • checkout.js ← Changed by Anirudh AND the team
  • database.js ← Changed by the team
  • config.js ← Changed by Anirudh AND the team

Anirudh must now:

  1. Open MainProject/payment.js
  2. Open ExperimentalProject/payment.js
  3. Compare them line by line
  4. Manually copy his changes
  5. Make sure not to delete the team's changes
  6. Test everything
  7. Fix the bugs
  8. Repeat for 12 more files

Time to merge the experiment back: 3 full days

Bugs introduced during merge: 8

Anirudh's stress level: Through the roof

Anirudh's conclusion:

"Next time I'll just not experiment. It's not worth the pain."

The real cost?

Innovation dies.
Developers stop trying new things
because merging experiments back is too painful.


When Reality Hits: The Production Disaster

The "Website is Down" Nightmare

Friday, 4:45 PM

Piyush is packing his bag to leave. It's been a good week. The team shipped 3 new features.

Then his phone rings.

Client (panicking): "THE WEBSITE IS COMPLETELY BROKEN! 
                     Customers can't checkout! 
                     We're losing sales every minute!"

Piyush: "What?! It was working an hour ago!"

Client: "FIX IT NOW! We've already lost $5,000 in sales!"
Enter fullscreen mode Exit fullscreen mode

Piyush calls an emergency team meeting:

Piyush: "Emergency! Production is down. What was the last change?"

Hitesh: "I updated checkout.js yesterday morning..."

Anirudh: "I changed payment.js today around 2 PM..."

Piyush: "I modified database.js this morning..."

[Long silence]

Hitesh: "Wait... which version is on production?"

Anirudh: "Wasn't it EcommerceProject_PRODUCTION_COPY?"

Piyush: "No, that's from last week. I think we deployed 
         EcommerceProject_FINAL_v3... or was it v4?"
Enter fullscreen mode Exit fullscreen mode

The Panic Search Begins

5:00 PM - They try to find the working version:

Desktop/
  ├── 📁 EcommerceProject_PRODUCTION_COPY        ← Is this it?
  ├── 📁 EcommerceProject_Nov15_Backup          ← This one?
  ├── 📁 EcommerceProject_Before_Payment_Update  ← Maybe this?
  ├── 📁 EcommerceProject_WORKING_STABLE         ← Or this?
  └── 📁 EcommerceProject_TESTED_VERSION         ← This looks promising!
Enter fullscreen mode Exit fullscreen mode

2 hours later: They test 5 different backup folders. Finally find the working one in TESTED_VERSION.


The Deployment Scramble

7:00 PM - They deploy TESTED_VERSION to production

7:05 PM - Website is back online!

But now the questions begin:

Piyush: "Okay, it's fixed. But... what did we just lose?"

Hitesh: "The version we deployed is from Tuesday. 
         We lost 3 days of work."

Anirudh: "Wait, what?! I spent all of Wednesday 
          adding email notifications!"

Piyush: "And I added the wishlist feature on Thursday!"

Hitesh: "Those are gone now. We'll have to redo them."
Enter fullscreen mode Exit fullscreen mode

The Aftermath

Time wasted:

  • 2 hours finding the working version
  • 3 days of work lost (has to be redone)
  • $5,000 in lost sales
  • Client trust damaged

What they still don't know:

  • Which specific change broke production
  • Who made that change
  • When it was made
  • How to prevent it from happening again

With Git: The Same Scenario

Friday, 4:45 PM - Client calls: "Website is broken!"

Piyush's response:

# Step 1: Check recent changes (10 seconds)
git log --oneline -5

# Output:
abc123 Added wishlist feature (Piyush, 2 hours ago)
def456 Updated email notifications (Anirudh, 1 day ago)
ghi789 Modified payment validation (Hitesh, 2 days ago)
jkl012 Fixed checkout bug (Piyush, 3 days ago)
mno345 Added search feature (Hitesh, 4 days ago)
Enter fullscreen mode Exit fullscreen mode

4:46 PM - Piyush identifies the problem:

# The wishlist feature was added 2 hours ago
# That's when the site broke!

# Step 2: Rollback instantly (30 seconds)
git revert abc123
git push production

# Done!
Enter fullscreen mode Exit fullscreen mode

4:47 PM - Website is back online!

Total time: 2 minutes

Work lost: Zero (the wishlist code is still in Git, just reverted)

Lost sales: Maybe $50 (2 minutes of downtime vs 2 hours)


The Remote Work Revolution

March 2020 - The lockdown announcement

"Everyone works from home. No exceptions. Deadline is still in 2 weeks."

"Wait... but... the pendrive?"

Attempt 1: Email → 47 MB project exceeds 25 MB Gmail limit. Split into 3 parts. Part 2 stuck in spam. 3 hours wasted before anyone wrote code.

Attempt 2: Google Drive → Same chaos, just in the cloud:

Google Drive / EcommerceProject /
  ├── 📁 EcommerceProject_March24_Morning/
  ├── 📁 EcommerceProject_March24_MyChanges/
  ├── 📁 EcommerceProject_March24_Latest/
  ├── 📁 EcommerceProject_March24_FINAL/
  └── 📁 EcommerceProject_March25_v2/
Enter fullscreen mode Exit fullscreen mode

The reality:

Without version control,
remote work with multiple developers is essentially impossible.

With Git:

git clone https://github.com/team/ecommerce.git
git pull   # Get latest
# ... work ...
git push   # Share with team
Enter fullscreen mode Exit fullscreen mode

✅ No email limits ✅ No version confusion ✅ Automatic sync from anywhere


The Onboarding Nightmare

Month 3 - Nisha joins the team

Day 1:

Nisha: "Can someone share the codebase?"

Piyush: "Is it EcommerceProject_LATEST or PRODUCTION_COPY?"

Hitesh: "I think we're using April12 now."

Anirudh: "Wait, I thought April15 was latest?"

Nisha receives EcommerceProject_April12.zip. Discovers it's missing features Anirudh added 2 weeks ago. Gets a new version. Files are completely different. Nobody remembers what changed.

Day 2-3:

  • Assigned a bug → "Which version of checkout.js is correct?"
  • "Who wrote this?" → "I think I did? Maybe Anirudh?"
  • "Can I see the previous version?" → "We don't have that."

Nisha's first week:

  • Day 1-4: 15 hours wasted on wrong versions, no history, no context
  • Day 5: Frustrated, considering quitting
  • Productive coding: Maybe 2 hours

With Git: Onboarding in 30 Minutes

git clone https://github.com/team/ecommerce.git  # 2 min
git log --oneline  # See complete history
git blame payment.js  # Who wrote each line, when, why
git show def456  # See any change in detail
Enter fullscreen mode Exit fullscreen mode

Result: Complete codebase + full history + accountability. Productive by end of Day 1.


Team Scaling: When 6 Becomes Impossible

Month 4 - The Team Doubles

Three more developers join:

  • Priya (frontend specialist)
  • Rahul (backend expert)
  • Sneha (DevOps engineer)

Now they're 6 people total.


The WhatsApp Explosion

With 2 people: 18 messages/day

With 6 people:

9:00 AM - 3 people announce files they're working on
9:05 AM - Priya: "Need homepage.js" → Hitesh: "Wait, using it"
9:15 AM - Rahul: "Need database.js" → Piyush: "Maybe after lunch?"
9:30 AM - Sneha: "Need config.js" → Anirudh: "Give me 30 mins"
10:00 AM - Priya: "@Hitesh done yet?" → [15 min wait]
10:30 AM - Rahul done → Piyush takes it → Sneha: "Wait, I need it too!"
[... continues all day ...]
Enter fullscreen mode Exit fullscreen mode

Result:

  • 127 messages/day (vs 18 with 2 people)
  • 25 min average wait (vs 5-10 min)
  • 40% of time files blocked by someone

Tuesday standup:

"We're spending half our time on WhatsApp." — Piyush

"Every file I needed was locked." — Priya

"With 2 people, we could manage. With 6, it's impossible." — Hitesh

"Something like... version control?" — Nisha


The Final Comparison

Coordination Overhead by Team Size

┌─────────────┬──────────────┬──────────────┬──────────────┐
│  TEAM SIZE  │   MESSAGES   │  WAIT TIME   │  PRODUCTIVITY│
│             │   PER DAY    │  PER PERSON  │   IMPACT     │
├─────────────┼──────────────┼──────────────┼──────────────┤
│   2 people  │      18      │  45 minutes  │    -10%      │
│   3 people  │      45      │  90 minutes  │    -25%      │
│   6 people  │     127      │ 180 minutes  │    -50%      │
│  10 people  │     300+     │ 4-5 hours    │    -75%      │
│  20 people  │  IMPOSSIBLE  │  ALL DAY     │  PARALYZED   │
└─────────────┴──────────────┴──────────────┴──────────────┘

THE MATHEMATICAL REALITY:
═══════════════════════════
Coordination overhead grows EXPONENTIALLY with team size.

With 2 people: 1 communication channel
With 3 people: 3 communication channels
With 6 people: 15 communication channels
With 10 people: 45 communication channels
With 20 people: 190 communication channels

THIS IS WHY THE PENDRIVE ERA COULDN'T SCALE.
Enter fullscreen mode Exit fullscreen mode

All the Problems in One Place

Let me summarize every problem developers faced in the pendrive era:

1. No Time Travel

Once you save over your code, the old version is gone forever.
Can't go back to see what worked before.

2. No Change History

You don't know:

  • What changed between versions
  • Who made the change
  • When it was changed
  • Why it was changed

3. Silent Overwrites

Work gets deleted without warning.
You copy someone's folder, it overwrites yours,
and you don't even notice until it's too late.

4. Lost Work from Parallel Editing

Two people edit the same file.
One person's work gets completely erased when they share the pendrive.

5. Communication Overhead

You need to constantly message each other:
"I'm editing this file," "Are you done yet?" "Can I edit now?"
It's exhausting.

6. File Ownership Rigidity

Strict ownership rules help prevent conflicts,
but they break down when work crosses file boundaries
(which is most of the time).

7. Manual Merging Hell (and Silent Bugs)

Combining changes from multiple people is not just slow—it's dangerous.

  • The Efficiency Problem: It takes hours to compare files line-by-line.
  • The Safety Problem: You can't see the logical flow. You might paste code in the wrong order (like the "Discount Bug"), creating silent errors that break business logic without crashing.

8. The "Which Version Is Latest?" Mystery

When you have multiple copies with names like FINAL, FINAL_v2,
FINAL_ACTUAL, nobody knows which one is actually the latest.

9. Can't Experiment Safely

Trying new ideas means creating a separate copy of the entire project.
Merging it back is so painful that people stop experimenting.

10. No Code Review

Code goes straight from one person's computer to the main project.
No review step. No discussion. No quality check.

11. No Accountability

When a bug appears, you can't trace it back to who wrote that code
or why they wrote it that way.

12. Can't Roll Back

Critical bug in production?
Good luck finding the right backup folder to roll back to.
You'll waste hours just trying to find it.


Why Teams Used This System Anyway

Before we judge too harshly, let's be honest: this was the best developers could do with the tools available at the time.

It worked (barely) for:

  • Solo developers working alone
  • Tiny teams (2-3 people) with strict discipline
  • Projects that changed slowly
  • Short-term projects

It completely broke down with:

  • Teams larger than 3 people
  • Fast-moving projects with daily changes
  • Any kind of experimentation
  • Cross-file changes (which is 90% of real work)

The Temporary Fixes (And Why They All Failed)

Solution What It Solved What It Couldn't Solve Why It Failed
Manual backups Going back in time (sometimes) Can't see what changed, wastes disk space You forget to backup, or can't find the right backup
Clever folder names Organization (maybe) Names lie, humans forget FINAL_v47 is meaningless
WhatsApp coordination Basic awareness Doesn't scale, depends on everyone being online Humans forget to message
File ownership Prevents some conflicts Breaks for cross-file work Real work crosses boundaries
Manual merging Combining changes (slowly) Doesn't scale, error-prone Takes too long, introduces bugs

The Moment of Realization

Every team that grew beyond 2-3 people eventually hit the same wall:

"We're spending more time managing code than writing code."

Developers were exhausted from:

  • Manually merging files for hours
  • Losing work to silent overwrites
  • Debugging bugs that came from merge mistakes
  • Arguing about who edited which file
  • Digging through dozens of backup folders
  • Explaining to each other what changes they made

That's when version control stopped being optional.

It became a necessity for survival.


What This Taught Us

The pendrive era taught developers one critical lesson:

When humans must manually track changes across multiple people,
time, and files — humans will fail. Always.

We're good at writing code.

We're terrible at:

  • Remembering what we changed yesterday
  • Manually merging complex changes
  • Coordinating perfectly with teammates
  • Never forgetting to communicate
  • Always making perfect backups

We needed a system that could:

  • Automatically track every change
  • Intelligently merge parallel work
  • Let everyone work simultaneously without conflicts
  • Provide a complete, searchable history
  • Allow safe experimentation
  • Make rolling back effortless
  • Tell us exactly who changed what and why

That system is Git.


What Comes Next?

Now you understand the pain.
You know why version control exists.

It wasn't created because developers were lazy
or wanted fancy tools.

It was created out of desperate necessity.

In the next article, I'll show you how Git solves
every single one of these problems.

How it gives you time travel, safe parallel work,
intelligent merging, and most importantly:

The freedom to code without fear of losing your work.


The pendrive era is over.

But understanding why it failed helps us appreciate what Git gives us:

The ability to collaborate without chaos.


Have you experienced any of these pendrive nightmares? Share your stories in the comments! I'd love to hear them.


Diagram: Comparison Table - Pendrive vs Version Control

📊 THE COMPLETE COMPARISON: Pendrive Era vs Version Control
═══════════════════════════════════════════════════════════════════════

┌─────────────────────┬──────────────────────┬────────────────────────┐
│     SCENARIO        │   PENDRIVE METHOD    │   VERSION CONTROL (Git)│
├─────────────────────┼──────────────────────┼────────────────────────┤
│ Going back to       │ [X] Hope you made a  │ [+] git checkout       │
│ yesterday's code    │    backup and can    │    Instant time travel │
│                     │    find it (3 hrs)   │    (2 seconds)         │
├─────────────────────┼──────────────────────┼────────────────────────┤
│ See what changed    │ [X] Open 2 files,    │ [+] git diff           │
│                     │    compare manually  │    Shows exact changes │
│                     │    (20 minutes)      │    (2 seconds)         │
├─────────────────────┼──────────────────────┼────────────────────────┤
│ Two people edit     │ [X] Last person wins │ [+] Git intelligently  │
│ same file           │    (data loss) OR    │    merges both         │
│                     │    Silent Logic Bugs │    (no data loss)      │
├─────────────────────┼──────────────────────┼────────────────────────┤
│ Who broke the code? │ [X] "I don't know"   │ [+] git blame          │
│                     │    No way to tell    │    Shows exact person  │
│                     │    (impossible)      │    and when            │
├─────────────────────┼──────────────────────┼────────────────────────┤
│ Work from home      │ [X] Manual pendrive  │ [+] git pull/push      │
│                     │    transfer, or      │    Automatic sync      │
│                     │    huge email files  │    from anywhere       │
├─────────────────────┼──────────────────────┼────────────────────────┤
│ Experiment safely   │ [X] Copy entire      │ [+] git branch         │
│                     │    project, merge    │    Work in isolation,  │
│                     │    back = 3 days     │    merge = 5 minutes   │
├─────────────────────┼──────────────────────┼────────────────────────┤
│ Rollback to         │ [X] Find backup      │ [+] git revert         │
│ production          │    folder, test,     │    Instant rollback    │
│                     │    hope it works     │    to any version      │
│                     │    (2-4 hours)       │    (30 seconds)        │
├─────────────────────┼──────────────────────┼────────────────────────┤
│ Code review         │ [X] Not possible     │ [+] Pull requests      │
│                     │    Code goes direct  │    Review before merge │
│                     │    to production     │    Catch bugs early    │
├─────────────────────┼──────────────────────┼────────────────────────┤
│ Track who did what  │ [X] Ask everyone,    │ [+] Complete history   │
│                     │    check timestamps, │    with author, date,  │
│                     │    guess (1 hour)    │    and reason          │
├─────────────────────┼──────────────────────┼────────────────────────┤
│ Disk space used     │ [X] 23 copies =      │ [+] One folder +       │
│                     │    15 GB wasted      │    compressed history  │
│                     │                      │    = 200 MB            │
└─────────────────────┴──────────────────────┴────────────────────────┘


TIME SPENT PER WEEK:
════════════════════

PENDRIVE METHOD:
────────────────
⏱️  Merging files manually:      6 hours
⏱️  Finding right version:        3 hours
⏱️  Recreating lost work:         4 hours
⏱️  Coordinating with team:       2 hours
⏱️  Debugging merge mistakes:     3 hours
────────────────────────────────────────
📊 TOTAL TIME WASTED:           18 hours/week
💰 COST: Writing 50% less code

VERSION CONTROL (Git):
──────────────────────
⏱️  Learning Git:                 1 hour (one time)
⏱️  Daily operations:             30 minutes/week
────────────────────────────────────────
📊 TOTAL TIME SPENT:            30 minutes/week
💰 BENEFIT: Focus on actual coding
Enter fullscreen mode Exit fullscreen mode

Top comments (0)