Reading Git History Like Tree Rings
When we acquired the smaller company last year, I was handed their codebase — fifteen years old, a monolith with a settlement of services around it, and exactly one page of surviving documentation, which began “TODO: expand this.”
So I did what I’ve learned to do, and I want to write it down properly this time because two weeks in that history taught me things no living employee could have: before reading a line of their code, I read their log.
All of it — fifteen years of commits, statistically first, then closely — the way a dendrochronologist reads a trunk. I’ve said before that the file is a photograph and the log is the film; this expedition upgraded my metaphor permanently.
The log isn’t the film. The log is the weather record — and a codebase of sufficient age has rings, and the rings hold everything that ever happened to the organism, including the things everyone alive has forgotten.
The rings
Drought years. 2013, in their history, is thin — commits sparse, authors few, messages terse in the way of tired people.
You can see the funding gap in the wood before anyone tells you about it, and when I asked their last remaining founder over coffee, he blinked: “2013? That was the year we nearly died. How did you — ?” The log. The log remembers the drought.
Growth needs water; commits need salaries; the ring doesn’t lie.
Fire scars. In 2017 there’s a
Fire scars. In 2017 there’s a weekend — I can name the dates — where forty-eight commits land in fifty-one hours, two authors only, and the messages degrade in real time from full sentences (“Handle duplicate settlement records on retry”) through fragments (“handle dupes edge case”) to, by 3 a.m. Sunday, the bare repeated word: “fix”. “fix”.
“FIX”. That’s not a log anymore. That’s a black-box recorder — the cockpit audio of an incident nobody wrote up, preserved verbatim, terror legible in the message lengths.
I’ve written about postmortems; this codebase’s worst night never got one, but the wood kept the scar, and the scar told me exactly which subsystem to fear before any human thought to warn me.
Hiring rings. New growth arrives in cohorts — you can watch a 2015 style (their pattern-heavy era; every codebase has one, I’ve dated these strata before) spread outward from three new author names, and later a 2019 style arrive with four more.
Teams write in generations, and the generations are visible, and — useful beyond measure — you can identify which living authors belong to which ring, which tells you who to ask about what era. The org chart says who owns the code now.
The rings say who understands it.
The pandemic ring. 2020 is unmistakable in any codebase that lived through it, and theirs broke my heart a little: commit timestamps, clustered for a decade around 9-to-6 with a lunch dip, suddenly scatter — 6 a.m. commits, 11 p.m. commits, the lunch dip gone, replaced by a 3-to-5 p.m. crater I’d bet money was childcare.
You can see everyone’s kitchens in the timestamps.
You can see the whole year
You can see the whole year in one histogram, and no anniversary post will ever say it plainer.
Get Jiteshkumawatjpr’s stories in your inbox
Join Medium for free to get updates from this writer.
And the felling events. A beloved author’s commits — you learn to recognize beloved: the one whose messages are letters, whose fixes cluster where the pain was — just stop, one Thursday in 2021. No taper, no handover arc. Stop.
The ring after that is disturbed for months: reverts up, message tone down, the wood knitting awkwardly around an absence. I’ve written about bus factors; the log shows you what the bus looks like afterward, from the inside, in the grain.
What the rings are for
This isn’t archaeology tourism — every ring converted directly into operational knowledge I used within the month:
The fire scar told me which subsystem’s tests to trust least (the 3 a.m. “FIX” commits, unsurprisingly, carried no tests; I characterization-tested that whole region first — lights before axes, as ever).
The hiring rings gave me my interview list — I spent my second week having coffee with one living author per era, log printouts in hand, and the printouts did something I hadn’t predicted: they unlocked people.
“Oh god, the settlement rewrite — “ and
“Oh god, the settlement rewrite — “ and out would pour twenty minutes of context no document ever held, summoned by the sight of their own commits from 2016.
The log is a memory prosthetic for the whole organization.
People don’t remember what they know until you show them the wood.
And the founder — last one standing, the man from the drought — went quiet over my annotated printout of his fifteen years, the thin rings and the fire scars and the Thursday someone stopped, and said the thing I’ll keep:
That’s exactly what a log is. Nobody writes commit messages as testimony — they’re dashed off, functional, unposed (the config essay’s law applies: text with no audience never lies).
But accumulated across fifteen years, the unposed lines become the truest institutional memory the company owns: every drought, every fire, every generation, every grief, recorded by people who thought they were just saving their work.
The protocol
Workflow ending, as the format demands — my first-week protocol for any inherited codebase, in order:
Stats before code. Commit frequency by month (droughts), by author (generations, exits), by hour (the kitchens). One afternoon, mostly one clever log command, and you hold the shape of fifteen years.
Find the fire scars
Find the fire scars. Search the log for its worst weekends — density spikes, degrading messages — and treat those regions as unwritten postmortems: fear them first, test them first, ask about them first.
Interview by ring. One survivor per era, printouts in hand. The wood unlocks the witnesses.
Then, only then, read the code — which by now is no longer a stranger’s monolith but the visible present of a life you’ve read the weather for, scars and droughts and kitchens and all.
Fifteen years, one page of docs, “TODO: expand this.”
The log expanded it. The log was expanding it the whole time —
ring by ring, in the only ink that never poses:
people, saving their work, on the days it happened.
I write about what building software actually feels like. Run the histogram on your own repo tonight — hours, authors, months. Find your drought, your fire, your kitchens. Then go show a survivor the wood. Comments open for rings.









