b8c.io All articles
Engineering Strategy

Git Log Is a Crystal Ball: Reading Engineering Health Between the Commits

b8c.io
Git Log Is a Crystal Ball: Reading Engineering Health Between the Commits

Every engineering org runs retrospectives. Most have dashboards. Some even do weekly syncs where everyone says things are going well right up until they aren't. But there's one data source sitting in every repo that nobody's actually reading as a signal: the commit log.

Not for blame. Not for performance reviews. As a genuine diagnostic tool.

The patterns buried in your git history tell a story your sprint boards never will. Churn rates, commit clustering, authorship concentration—these aren't vanity stats. They're leading indicators of systemic dysfunction, and they show up weeks or months before the incident, the resignation letter, or the architecture meeting where everyone realizes the codebase has drifted into something nobody fully understands anymore.

What Code Churn Is Actually Telling You

Churn—the rate at which lines are written and then rewritten—is one of the most underutilized signals in software development. A file that's been touched 40 times in 90 days isn't necessarily being improved. It might be the epicenter of a design decision nobody fully committed to, a module that's absorbing requirements it was never meant to handle, or a component that's become everyone's dumping ground because refactoring it is too scary to schedule.

High churn in a stable, mature part of your codebase is a red flag. It means something is wrong that your team hasn't named yet. Maybe the original abstraction doesn't hold under current load. Maybe two teams are both modifying the same layer without coordinating. Maybe the requirements for that module change every two weeks because nobody upstream has made a real decision.

Tools like [git log](https://en.wikipedia.org/wiki/Git) --stat, combined with a bit of scripting, can surface the top 20 most-modified files over any time window. Run that report. Then ask why those files are at the top. The answer is almost never "because we're doing great work there."

Authorship Concentration Is a Bus Factor in Plain Sight

Every team worries about the bus factor—the number of people who need to get hit by a bus before a critical system becomes unmaintainable. Most teams assess it by feel. Git gives you actual data.

Run an authorship breakdown on your most critical services. If 70% of commits to your payment processing module come from one engineer, you have a problem that's one resignation away from becoming a crisis. If a new hire is responsible for the majority of commits in a core library after three months, something is wrong with how your team is distributing ownership—or how much senior bandwidth is available for mentorship.

Authorship concentration also reveals architectural misalignment. When a single service has commits from twelve different engineers across six teams, that's not collaboration—that's a shared resource nobody owns. It's the file system equivalent of a conference room that everyone uses and nobody cleans.

Commit Timing Patterns and the Burnout Signal

This one's a little uncomfortable to talk about, but the data is there if you look.

Commit timestamps tell you when your engineers are actually working. A sudden shift toward late-night or weekend commits from someone who previously worked normal hours is worth a quiet conversation. Not because working late is inherently wrong, but because the pattern change is a signal—something shifted for that person, and it might be deadline pressure, team dynamics, or the early stages of burnout.

Aggregate this across a team and you start to see cultural patterns. If your commit activity spikes every Thursday and Friday, your team is probably crunching to hit weekly sprint goals rather than working sustainably. If there's a dead zone every Monday morning, something about how work kicks off at the start of the week isn't working.

None of this is surveillance. It's pattern recognition. The goal isn't to catch anyone—it's to notice when the rhythm of work changes in ways that deserve attention.

Merge Frequency and the Hidden Integration Tax

How often are branches being merged? How long do they live before they land? These numbers reveal a lot about how your team actually handles integration risk.

Long-lived branches are a tax. Every day a branch sits open, it's diverging from main, accumulating merge conflicts, and deferring the moment when you find out whether the work actually fits with everything else. Teams with consistently long-lived branches often have a culture of "big bang" integration—and that culture usually stems from a CI pipeline that's too slow to run frequently, or a code review process that's become a bottleneck.

If your average branch lifetime is over a week, that's worth investigating. Not to mandate shorter branches by decree, but to understand what's making developers reluctant to integrate. The answer usually points at something fixable.

Turning the Signal Into Action

The hard part isn't finding the data—it's creating a practice around actually looking at it. A few approaches that work:

Monthly churn reports. Pull the top-churned files every month and bring them to your architecture review. Ask whether the churn is intentional improvement or symptomatic thrashing.

Ownership audits. Every quarter, run an authorship breakdown on your critical paths. If ownership has concentrated or diffused in unexpected ways, make it visible before it becomes a problem.

Trend reviews, not snapshots. Single data points don't mean much. The value is in watching metrics move over time. A file that's been in the top-10 churn list for six consecutive months is telling you something.

Git history is one of the few data sources in your org that doesn't get sanitized before it reaches you. Nobody edits their commit timestamps for optics. The log is what actually happened.

Most teams treat it as a record of the past. The smarter move is to read it as a forecast.

All Articles

Related Articles

The Dependency You Didn't Write Is the One That'll Break You

The Dependency You Didn't Write Is the One That'll Break You

Your Logs Are Lying by Omission: The Context Gap That Turns Debugging Into Archaeology

Your Logs Are Lying by Omission: The Context Gap That Turns Debugging Into Archaeology

The Kill Switch You Never Tested: Why Your Rollback Plan Is a Bedtime Story You Tell Yourself

The Kill Switch You Never Tested: Why Your Rollback Plan Is a Bedtime Story You Tell Yourself