https://rajanand.org/substack
It respects the fact that uncertainty was the raw material.
It respects the fact that uncertainty was the raw material.
Immediate risks
Over time, that container dissolves.
New data arrives. Constraints shift. Risks change shape.
The decision stays frozen — and gets judged as if uncertainty never existed.
That’s not learning.
That’s rewriting history.
Immediate risks
Over time, that container dissolves.
New data arrives. Constraints shift. Risks change shape.
The decision stays frozen — and gets judged as if uncertainty never existed.
That’s not learning.
That’s rewriting history.
This is hindsight bias disguised as rigor.
A better question isn’t “Why did we choose this?”
It’s “What conditions made this survivable at the time?”
This is hindsight bias disguised as rigor.
A better question isn’t “Why did we choose this?”
It’s “What conditions made this survivable at the time?”
That’s how reasonable decisions get labeled as failures.
Not because they were careless.
That’s how reasonable decisions get labeled as failures.
Not because they were careless.
Final piece of the puzzle: How do we keep track of all these hashes without losing our minds?
(Hint: It’s what we call "Branches").
Final piece of the puzzle: How do we keep track of all these hashes without losing our minds?
(Hint: It’s what we call "Branches").
By keeping the name separate from the data, Git can point multiple filenames to the exact same piece of data without breaking a sweat. It’s like having several shortcuts on your desktop all pointing to the same file.
By keeping the name separate from the data, Git can point multiple filenames to the exact same piece of data without breaking a sweat. It’s like having several shortcuts on your desktop all pointing to the same file.
It sees the content is identical, generates the same hash, and reuses the data.
It sees the content is identical, generates the same hash, and reuses the data.
Git doesn't bother saving those 99 files again. It just points the new "Tree" to the existing "Blobs."
Git doesn't bother saving those 99 files again. It just points the new "Tree" to the existing "Blobs."
You’d think so. But Git has a brilliant trick for staying tiny: It reuses everything it possibly can.
You’d think so. But Git has a brilliant trick for staying tiny: It reuses everything it possibly can.
But how does it do that without using up all your disk space?
But how does it do that without using up all your disk space?
1. Commit points to a Tree
2. Tree points to Blobs (files) and other Trees (folders)
3. Blobs hold the actual data.
1. Commit points to a Tree
2. Tree points to Blobs (files) and other Trees (folders)
3. Blobs hold the actual data.
It also stores the metadata: who made it, when they made it, the message ("fix typo"), and a pointer to the previous commit (the parent).
It also stores the metadata: who made it, when they made it, the message ("fix typo"), and a pointer to the previous commit (the parent).