<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Amir Zilber</title>
    <description>The latest articles on DEV Community by Amir Zilber (@amir_zilber_1012c9a3594a0).</description>
    <link>https://dev.to/amir_zilber_1012c9a3594a0</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3974915%2F8ea5a4de-677e-4421-994d-6ede49b0c31c.jpg</url>
      <title>DEV Community: Amir Zilber</title>
      <link>https://dev.to/amir_zilber_1012c9a3594a0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amir_zilber_1012c9a3594a0"/>
    <language>en</language>
    <item>
      <title>I built a tool that reads your git history and tells you a story</title>
      <dc:creator>Amir Zilber</dc:creator>
      <pubDate>Mon, 08 Jun 2026 22:53:14 +0000</pubDate>
      <link>https://dev.to/amir_zilber_1012c9a3594a0/i-built-a-tool-that-reads-your-git-history-and-tells-you-a-story-5h5</link>
      <guid>https://dev.to/amir_zilber_1012c9a3594a0/i-built-a-tool-that-reads-your-git-history-and-tells-you-a-story-5h5</guid>
      <description>&lt;p&gt;Every codebase has a story buried in its git history.&lt;/p&gt;

&lt;p&gt;Who really owns what. Which areas are dying quietly. Whether the team is building new things or just putting out fires. Which files will become a black box if one person leaves tomorrow.&lt;/p&gt;

&lt;p&gt;The problem: nobody reads git log. It's thousands of dry lines that nobody has time for.&lt;/p&gt;

&lt;p&gt;So I built git-story. One command. Ten seconds. A complete narrative.&lt;/p&gt;

&lt;p&gt;What it looks like&lt;br&gt;
┌────────────────────────── git-story ──────────────────────────┐&lt;br&gt;
│ flask · 3,812 commits · 662 files · 856 authors · 16y 1m      │&lt;br&gt;
└───────────────────────────────────────────────────────────────┘&lt;br&gt;
!! STORY&lt;br&gt;
  -&amp;gt; . is the heart of this repo (1,249 commits, 204 authors)&lt;br&gt;
  -&amp;gt; examples/minitwit/static/style.css hasn't been touched&lt;br&gt;
     in 16.2 years — possible dead code&lt;br&gt;
  -&amp;gt; .github/workflows/pre-commit.yaml and zizmor.yaml change&lt;br&gt;
     together 100% of the time — they might want to be one module&lt;br&gt;
  -&amp;gt; This repo is 16 years old — it has a story worth reading&lt;br&gt;
The part I find most interesting: MOOD&lt;br&gt;
It classifies every commit message into one of four categories:&lt;/p&gt;

&lt;p&gt;BUILDING — add, implement, feature, create&lt;br&gt;
FIXING — fix, bug, patch, revert&lt;br&gt;
CLEANUP — refactor, remove, rename, simplify&lt;br&gt;
MAINTENANCE — update, bump, upgrade, docs&lt;br&gt;
Then it charts how that's changed over time:&lt;/p&gt;

&lt;p&gt;~~ MOOD — what kind of work dominates over time&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;+ + + x x x x x x o o
+=BUILD  x=FIXIN  ~=CLEAN  o=MAINT
This project is currently in maintenance mode.
It shifted from building to maintenance over time.
Flask's story: heavy feature building from 2009–2016, then a gradual shift into maintenance and stewardship. Exactly what you'd expect from a mature, stable framework — but now you can see it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DRIFT: where is the energy going?&lt;br&gt;
Compares the last 6 months vs. the prior 6 months for every directory:&lt;/p&gt;

&lt;p&gt;// DRIFT — last 6mo vs prior 6mo&lt;br&gt;
  .github/workflows    ^   +150%   gaining — something is being hardened&lt;br&gt;
  src/flask            ~   +12%    stable&lt;br&gt;
  docs/tutorial        vv  -60%    fading&lt;br&gt;
  src/flask/json       DEAD        went completely silent — possibly retired&lt;br&gt;
src/flask/json going DEAD makes sense — JSON handling moved to Python's stdlib. The tool found it from commit patterns alone, without reading a line of code.&lt;/p&gt;

&lt;p&gt;SILOS: the real bus-factor risk&lt;br&gt;
This is the one that surprises people most.&lt;/p&gt;

&lt;p&gt;Not "one person wrote 50% of commits" — that's too abstract. Instead: which specific files has only one human ever touched?&lt;/p&gt;

&lt;p&gt;!! SILOS — files only one person has ever touched&lt;br&gt;
  302 of 662 files (46%) are single-owner.  High risk.&lt;br&gt;
  David Lord  (124 files)&lt;br&gt;
    uv.lock — 19 commits, last touched 20 days ago&lt;br&gt;
    .github/workflows/pre-commit.yaml — 16 commits&lt;br&gt;
    requirements/build.txt — 16 commits&lt;br&gt;
    ... and 119 more&lt;br&gt;
  Armin Ronacher  (82 files)&lt;br&gt;
    docs/_themes/flasky/static/flasky.css_t — untouched since 2010&lt;br&gt;
    docs/patterns.rst — untouched since 2010&lt;br&gt;
    ... and 77 more&lt;br&gt;
46% of Flask's files are known only to one person. If David Lord left tomorrow, the entire CI infrastructure would become a black box. That's a real organizational risk, visible in 10 seconds.&lt;/p&gt;

&lt;p&gt;How to run it&lt;br&gt;
pip install rich&lt;br&gt;
curl -O &lt;a href="https://raw.githubusercontent.com/amirzilber/git-story/main/git_story.py" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/amirzilber/git-story/main/git_story.py&lt;/a&gt;&lt;br&gt;
python git_story.py path/to/your/repo&lt;br&gt;
No other dependencies. Works on any git repository in any language.&lt;/p&gt;

&lt;h1&gt;
  
  
  Adjust drift window
&lt;/h1&gt;

&lt;p&gt;python git_story.py . --window 3    # quarter vs quarter&lt;br&gt;
python git_story.py . --window 12   # year vs year&lt;/p&gt;

&lt;h1&gt;
  
  
  Show more results
&lt;/h1&gt;

&lt;p&gt;python git_story.py . --top 20&lt;br&gt;
What's next&lt;br&gt;
I want to add:&lt;/p&gt;

&lt;p&gt;HTML export for shareable reports&lt;br&gt;
A web version — paste a GitHub URL, get the story&lt;br&gt;
Weekly digest: automatic diff of this week vs last week&lt;br&gt;
The GitHub repo is at github.com/amirzilber/git-story. Would love to hear what "story signals" other people wish they had when joining a new codebase.&lt;/p&gt;

&lt;p&gt;What's the first thing you try to figure out when you join a new project?&lt;/p&gt;

</description>
      <category>git</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
