<?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: karl-heinz reichel</title>
    <description>The latest articles on DEV Community by karl-heinz reichel (@karlheinz_reichel_7ee08d).</description>
    <link>https://dev.to/karlheinz_reichel_7ee08d</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%2F3220925%2Fbdcde349-db12-472b-a3f5-a412a65e4e6e.jpg</url>
      <title>DEV Community: karl-heinz reichel</title>
      <link>https://dev.to/karlheinz_reichel_7ee08d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karlheinz_reichel_7ee08d"/>
    <language>en</language>
    <item>
      <title>Why 'Who Last Touched This File' Is the Wrong Question</title>
      <dc:creator>karl-heinz reichel</dc:creator>
      <pubDate>Wed, 27 May 2026 19:20:47 +0000</pubDate>
      <link>https://dev.to/karlheinz_reichel_7ee08d/why-who-last-touched-this-file-is-the-wrong-question-54ii</link>
      <guid>https://dev.to/karlheinz_reichel_7ee08d/why-who-last-touched-this-file-is-the-wrong-question-54ii</guid>
      <description>&lt;p&gt;A file can have five contributors on record and still be fully owned by&lt;br&gt;
someone who left the company fourteen months ago.&lt;/p&gt;

&lt;p&gt;The commit history looks healthy. The risk is invisible.&lt;/p&gt;

&lt;p&gt;This is the gap that most repository analytics tools don't close — and&lt;br&gt;
the reason I built Calyntro around a different concept: &lt;strong&gt;temporal ownership&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem with Static Ownership Snapshots
&lt;/h2&gt;

&lt;p&gt;Standard ownership tools take a snapshot. They look at the current state&lt;br&gt;
of the repository and assign files to whoever touched them most recently,&lt;br&gt;
or most often, within a fixed window.&lt;/p&gt;

&lt;p&gt;That snapshot misses something critical: &lt;strong&gt;time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Consider a module where one developer wrote 80% of the code over a&lt;br&gt;
two-year period, then left 18 months ago. Since their departure, three&lt;br&gt;
other developers have each made small fixes. A static tool shows:&lt;br&gt;
four contributors, recent activity, looks fine.&lt;/p&gt;

&lt;p&gt;What it doesn't show: the architectural decisions, the implicit&lt;br&gt;
constraints, the edge cases that were never documented — all of that&lt;br&gt;
left with the person who built it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Temporal Ownership: A Different Question
&lt;/h2&gt;

&lt;p&gt;Calyntro tracks what we call &lt;em&gt;temporal ownership&lt;/em&gt; — who wrote the code,&lt;br&gt;
when they wrote it, whether they are still active in that module, and&lt;br&gt;
whether anyone else has built real understanding of it since.&lt;/p&gt;

&lt;p&gt;The question is not "who owns this file today?"&lt;/p&gt;

&lt;p&gt;It is: &lt;strong&gt;"who would be left holding it if the person who built it walked&lt;br&gt;
out the door tomorrow?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This distinction matters most in modules with high churn — code that&lt;br&gt;
is actively changing. A siloed module nobody touches is a known, stable&lt;br&gt;
risk. A siloed module that changes every sprint is an incident waiting&lt;br&gt;
to happen.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Looks Like in Practice: MongoDB
&lt;/h2&gt;

&lt;p&gt;We ran Calyntro against the MongoDB open-source repository — roughly&lt;br&gt;
500,000 commits, one of the most professionally maintained codebases&lt;br&gt;
in the world. Structured contribution guidelines, active code review,&lt;br&gt;
long-term maintainers.&lt;/p&gt;

&lt;p&gt;Here is what temporal ownership analysis found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;17 of 43 modules&lt;/strong&gt; show measurable knowledge risk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2 modules&lt;/strong&gt; at 100% silo ratio — one person, no meaningful backup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1 developer&lt;/strong&gt; holds exclusive knowledge of 161 files in a single module&lt;/li&gt;
&lt;li&gt;The module with the &lt;strong&gt;highest churn rate&lt;/strong&gt; carries &lt;strong&gt;38.2% silo risk&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last combination is the most dangerous: code that changes constantly,&lt;br&gt;
understood by exactly one person.&lt;/p&gt;

&lt;p&gt;This is not a startup with three engineers and no processes. If knowledge&lt;br&gt;
concentration shows up in MongoDB, it shows up everywhere.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Metrics Calyntro Uses
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Silo Ratio&lt;/strong&gt;&lt;br&gt;
The share of files in a module where a single developer holds exclusive&lt;br&gt;
knowledge. A silo ratio of 100% means one person is the sole knowledge&lt;br&gt;
holder for every file in that module.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bus Factor&lt;/strong&gt;&lt;br&gt;
The number of people whose departure would immediately create a knowledge&lt;br&gt;
gap. A bus factor of 1 is a single point of failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Churn Rate&lt;/strong&gt;&lt;br&gt;
How actively a module is changing. High churn combined with high silo&lt;br&gt;
risk is the most dangerous combination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Knowledge Risk Score&lt;/strong&gt;&lt;br&gt;
A combined metric that weights silo ratio, churn, and the activity status&lt;br&gt;
of knowledge holders. It surfaces modules that need attention — before&lt;br&gt;
a departure forces the issue.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works Technically
&lt;/h2&gt;

&lt;p&gt;Calyntro reads only Git history — not your source code.&lt;/p&gt;

&lt;p&gt;No code leaves your system. No agents. No instrumentation. The analysis&lt;br&gt;
runs against commit metadata: who committed what, when, to which files,&lt;br&gt;
how often.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend: FastAPI + DuckDB (embedded, no external database required)&lt;/li&gt;
&lt;li&gt;Frontend: React + Vite&lt;/li&gt;
&lt;li&gt;Deployment: Docker, fully self-hosted&lt;/li&gt;
&lt;li&gt;All metrics accessible via open REST API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The DuckDB approach for analytical queries over Git history was one of&lt;br&gt;
the more interesting technical decisions — it handles the time-series&lt;br&gt;
aggregations cleanly without needing a dedicated database server. Happy&lt;br&gt;
to go into detail on that in the comments if there's interest.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;Live demo running against the MongoDB repository: &lt;a href="https://demo.calyntro.com" rel="noopener noreferrer"&gt;demo.calyntro.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Self-hosting docs: &lt;a href="https://calyntro.com" rel="noopener noreferrer"&gt;calyntro.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've dealt with knowledge loss after a key engineer left — or you're&lt;br&gt;
trying to figure out which parts of your codebase are quietly becoming&lt;br&gt;
single points of failure — I'd genuinely like to hear how you're&lt;br&gt;
approaching it.&lt;/p&gt;

</description>
      <category>git</category>
      <category>devtools</category>
      <category>softwareengineering</category>
      <category>technicaldept</category>
    </item>
  </channel>
</rss>
