The Commit That Broke Everything


It’s 2 a.m. A critical bug has brought the system to its knees, and you’re the unlucky developer on call. You’ve traced the problem to a change made six months ago. With a sigh of relief, you pull up the version control history, ready to understand the logic behind the change and figure out how to fix it. You find the commit. And there it is, the message that’s supposed to be a breadcrumb trail left by a thoughtful colleague, a message in a bottle from the past. It reads, in its entirety: fix bug.
Your heart sinks. Which bug? Why this fix? What was the developer thinking? There’s no ticket number, no explanation, no context. Nothing. That one, single, lazy commit message has just transformed a five-minute fix into a five-hour forensic investigation. You’re not just debugging code anymore; you’re excavating the ghost of a forgotten decision. This isn’t just a frustrating moment; it’s a direct encounter with one of the most insidious and overlooked forms of documentation debt.
We often think of documentation as the big stuff: the user guides, the API references, the internal wikis. But the most granular, and arguably most critical, form of documentation is written every single day, dozens of times a day, by every developer on your team. It’s the commit message. And when it’s done poorly, it creates a mountain of debt that grinds productivity to a halt.
The Thousand Tiny Cuts of Bad Commits
Technical debt is a well-understood concept: it’s the implied cost of rework caused by choosing an easy, limited solution now instead of using a better approach that would take longer (IBM). Documentation debt is its close cousin, and it’s just as costly. It’s the accumulated interest you pay for every time someone said, “I’ll document that later,” or in this case, “This is good enough.”
A bad commit message is a loan taken out against your team’s future productivity. A message like updates or WIP or the classic asdfasdf is a conscious decision to defer the work of explaining a change. That debt comes due when another developer—or, more often than not, your future self—has to waste precious time and mental energy trying to decipher what happened. It’s a tax on maintenance, a barrier to onboarding, and a killer of momentum.
This isn’t just a theoretical problem. It has a measurable impact. A 2023 study presented at the IEEE/ACM International Conference on Software Engineering found a direct correlation between the quality of commit messages and the number of software defects. Poorly documented commits were associated with more bugs down the line (Li & Ahmed, 2023). The study also revealed a fascinating, and worrying, psychological insight: developers consistently believe their commit messages are getting better over time, when in reality, the quality often declines. We are accumulating debt without even realizing it.
When you zoom out, these thousands of tiny papercuts add up to a massive financial wound. The cost of poor communication in the workplace is staggering, with some reports estimating it in the tens of billions of dollars annually in lost productivity (Inc., 2018). Every hour a developer spends archeologizing a vague commit history is an hour they aren’t spending building new features or solving new problems. It’s a direct, tangible cost to the business.
How to Write a Commit Message That Pays Dividends
So, what does a good commit message look like? It’s not about writing a novel. It’s about clarity, context, and consistency. The community has converged on a set of best practices that turn commit messages from a liability into an asset.
1. Follow the 50/72 Rule.
The unofficial standard is to keep the subject line of your commit message to 50 characters or less. This forces you to be concise and makes the log history easy to scan. If you need more space, add a blank line and then a more detailed body, with each line wrapped at 72 characters. This formatting isn’t arbitrary; it’s designed to be readable in a wide variety of Git tools and terminal windows (GitKraken).
2. Write in the Imperative Mood.
Write your subject line as if you are giving a command. Use “Fix bug” not “Fixed bug” or “Fixes bug.” This sounds like a small thing, but it’s a powerful convention. It keeps messages consistent, and it aligns with the language used by Git itself (e.g., when you merge, the default message is “Merge branch ‘X’”). A simple trick is to frame the message as completing the sentence: “If applied, this commit will…”
If applied, this commit will… Add user authentication endpoint.
3. Explain the Why, Not Just the What.
The code itself shows what changed. The commit message is your chance to explain why. Was this change necessary to fix a specific bug? Was it to improve performance? Was it to support a new feature? The body of the commit message is the perfect place to provide this context. Link to the relevant issue in your tracking system. Explain the reasoning behind your solution, especially if you chose a less obvious approach. Your future self will thank you.
4. Embrace Conventional Commits.
To take your commit hygiene to the next level, adopt a specification like Conventional Commits (Conventional Commits, 2020). This is a simple set of rules for your commit messages that makes them machine-readable. Each message is prefixed with a type, such as feat (for a new feature), fix (for a bug fix), docs (for documentation changes), or perf (for a performance improvement).
feat: Allow users to reset their password
fix: Prevent race condition in the user session cache
This simple structure is revolutionary. It allows you to automatically generate changelogs, intelligently version your software, and immediately understand the nature of a change just by looking at the commit history. It turns your commit log from a messy diary into a structured, queryable database of every change ever made to the project.
Paying Down Your Debt with an AI Teammate
Establishing these habits is crucial, but enforcing them across a busy team can be a challenge. Developers are focused on solving complex problems, and taking the time to craft the perfect commit message can feel like a distraction. This is where an AI writing teammate like Doc Holiday can be transformative.
Instead of acting as a style guide police force, Doc Holiday works alongside your developers. It can be configured to understand your team’s commit conventions, whether you’re using Conventional Commits or your own internal standard. When a developer writes a vague message like updated code, Doc Holiday can gently prompt them with a suggestion that is more descriptive and compliant, perhaps by analyzing the code changes and suggesting a message like refactor: Simplify the user authentication logic.
This isn’t about taking control away from the developer. It’s about reducing cognitive load. The AI provides a high-quality first draft, and the developer gives it the final approval, adding any crucial context the AI might have missed. It makes doing the right thing the easiest thing. It helps you start paying down your documentation debt with every single commit, turning a source of friction and frustration into a valuable, long-term asset.
Your Commit History Is Your Legacy
The next time you’re about to type git commit -m "stuff", take a moment. Think about the developer six months from now, at 2 a.m., trying to solve a critical problem. That developer might be a new hire, a colleague, or it might be you. Your commit message is a letter to that person. Make it a helpful one.
A clean, descriptive commit history is more than just a technical best practice. It’s a sign of a healthy, professional engineering culture. It’s a living document that tells the story of your product, one change at a time. It’s the legacy you leave behind. Don’t let it be the thing that breaks everything.

