RE09 All articles
Engineering Culture

Dead Commits Tell No Tales: The Case for Treating Your Git History Like a Decision Log

RE09

Open up the git log on any codebase that's more than six months old and you'll probably see the same thing: a graveyard of fix bug, update styles, wip, and the ever-classic asdfgh. Nobody's proud of it. Everyone's guilty of it.

But here's the thing — that graveyard isn't just aesthetically bad. It's actively costing your team time, energy, and the kind of institutional memory that only gets appreciated the moment it's gone.

The Meeting That Shouldn't Have to Happen

Picture this: it's a Tuesday afternoon, and someone on your team wants to revisit a technical decision made eight months ago. Maybe it's why you chose REST over GraphQL for a specific endpoint. Maybe it's why a particular config flag exists. Maybe it's why that one service has a 30-second timeout instead of 10.

Without a meaningful commit history, you're calling a meeting. You're pinging people on Slack. You're digging through Notion pages that haven't been touched since the decision was made. You might even be scheduling a call with someone who has since left the company.

With a good commit history? You run git log --follow -p on the relevant file, read three paragraphs written by past-you, and you're back to building in under five minutes.

That's the actual value proposition here. It's not about being tidy. It's about not re-litigating the same arguments every six months.

Why Developers Skip It

Let's be honest about why commit messages end up the way they do. When you're deep in a flow state and you finally crack a bug at 11pm, writing a thoughtful explanation of what you changed and why feels like the least important thing in the world. The fix works. Ship it. Move on.

And in fast-moving teams — especially early-stage startups where shipping speed is survival — there's a cultural assumption that documentation is a luxury. Something you do later. Something for the team that comes after you.

The irony is that the teams who move the fastest are often the ones who can't afford not to leave good breadcrumbs. When you're iterating quickly and pivoting often, the surface area of forgotten decisions compounds fast.

What a Good Commit Message Actually Looks Like

This isn't about writing an essay every time you push. Nobody's asking for that. The bar is lower than most developers think, and way more useful.

A commit message that does its job answers three questions:

  1. What changed? (The subject line handles this.)
  2. Why did it change? (This is the part almost everyone skips.)
  3. What was considered and rejected? (This is the part that makes it genuinely valuable.)

That third one is where the real institutional memory lives. Not just what you did — but what you didn't do and why. The library you evaluated and passed on. The architecture you prototyped and scrapped. The tradeoff you made knowingly.

A commit body that says "Switched from Redis pub/sub to polling here because pub/sub introduced race conditions in tests under high load — revisit if throughput becomes a bottleneck" is worth more than a hundred tickets and three Slack threads.

The Changelog as Institutional Memory

There's a pattern emerging among developer teams that are getting serious about this: treating the changelog not as a release artifact, but as a living document of why the product is the way it is.

This is different from traditional changelogs, which are usually user-facing summaries written after the fact. What we're talking about is closer to an architectural decision record (ADR) embedded directly into the version control workflow — low friction, high signal.

Some teams are using tools like git-cliff or conventional commits to bring structure to this process without making it a burden. Others are keeping it simpler: just a norm that commit messages include a one-paragraph Why section when the change is non-trivial.

The teams doing this report something interesting: onboarding gets faster. New engineers don't have to shadow senior devs for weeks to understand the shape of the codebase. They can read the history and actually understand the reasoning behind it.

Shipping Fast Doesn't Mean Burning the Map

There's a false dichotomy in a lot of engineering culture right now between moving fast and maintaining good practices. The assumption is that rigor slows you down, so early adopters and scrappy teams skip it.

But the developers who've been at this long enough to watch codebases age will tell you: the cost of a bad commit message isn't paid on the day you write it. It's paid six months later, when someone else is staring at a function they don't understand, trying to figure out whether they can safely delete it.

The 30 seconds it takes to write a real commit message is an investment with a compounding return. Every future developer — including future-you — who reads that message and immediately understands the context gets that 30 seconds back with interest.

Making It Stick Without Making It a Rule

Mandating good commit messages rarely works. You'll get compliance without quality, which is arguably worse because it creates the illusion of documentation without the substance.

What does work is culture. Teams that read their git history out loud in retrospectives. Teams where senior engineers model the behavior consistently. Teams that actually reference old commits in PR reviews — "hey, look at what we decided here in March" — make the value visible and tangible.

It also helps to make it easy. Commit message templates, a simple team convention, a .gitmessage config in the repo — small structural nudges that reduce the friction of doing it right.

The History You Wish You Had

Every developer has had the experience of inheriting a codebase with zero context. No comments, no docs, no commit messages worth reading. Just code sitting there, daring you to touch it.

You swore you'd do it differently. Most of us don't, because the urgency of now always beats the value of later.

But the teams that actually ship consistently over time — not just in sprints, but sustainably, across years — are the ones who treat their git history like a record worth keeping. Not a chore. Not a formality. A genuine artifact of how the product became what it is.

Start there. Write the why. Leave the map.

Future-you will be grateful.

All Articles

Related Articles

Watching the Wrong Numbers: How Your Dashboard Is Quietly Stalling Your Team

Fire and Forget: The Background Job Pattern That's Quietly Burning Down Your System

Fire and Forget: The Background Job Pattern That's Quietly Burning Down Your System

Package.json Is Lying to You: The Silent Debt Hiding in Your Dependencies