BUSFACTOR.TECH
Bus Factor

Code Ownership Models: Who Actually Owns This File?

Knowledge risk

WHO OWNS THIS FILE?

Hover or focus to flip ↻
The short version

Strong, weak, and collective code ownership each trade quality against bus factor. What the research shows, and which model fails your team slowest.

3 receipts in this article ↓

TL;DR: Every team runs a code ownership model, usually by accident. Strong ownership (one owner per module) buys quality - Microsoft's research on Windows found components with many low-expertise contributors failed more - but manufactures bus factor 1 by design. Collective ownership buys resilience and risks nobody being responsible. The defensible middle is weak ownership: named owners, open doors, and a deliberate second person per critical area. The model you think you run and what git history shows are rarely the same.

Ask "who owns this file?" in most codebases and you get one of three answers: a name delivered instantly, a shrug, or - worst - a name delivered instantly by everyone except the person named, who left last spring. Whichever answer you got, your team is running a code ownership model. The only question is whether anyone chose it.

What are the code ownership models?

The standard taxonomy comes from Martin Fowler's Code Ownership, and it has three tiers:

  • Strong ownership. The codebase is split into modules, each assigned to one developer. Only the owner changes their modules; everyone else files a request and waits.
  • Weak ownership. Modules still have named owners, but anyone may change any module. The owner keeps watch over what happens in their area and stays accountable for its health.
  • Collective ownership. No individual owns anything; the team owns everything, and anyone changes anything. The Extreme Programming default.

Most real teams run an undeclared blend: collective in theory, strong in practice, with the de facto owners visible only in the review queue. That gap between declared and actual is where the risk hides. More on that below.

Does code ownership actually affect quality?

Yes, and the evidence points in a direction that makes the bus-factor crowd uncomfortable: concentration correlates with quality. In "Don't Touch My Code!", Bird, Nagappan, Murphy, Gall, and Devanbu examined Windows Vista and Windows 7 and found that ownership measures (the number of low-expertise "minor" contributors to a component, and the proportion of ownership held by the top contributor) were related to both pre-release faults and post-release failures. Components touched by many low-expertise contributors failed more; components where the top owner held a larger share of the contributions failed less. Drive-by commits from people without context are, statistically, how defects arrive.

So strong ownership wins? Not so fast. The same concentration that protects quality is the risk measured by bus factor: Avelino et al. found 34% of 133 popular GitHub projects at a truck factor of exactly 1: one departure from an orphaned system. A component with one dominant, high-expertise owner is simultaneously your lowest-defect component and your single point of failure. Both findings are true. That's the actual tradeoff, and pretending either half away is how teams pick a model that fails them later.

The consequences view: a fire-drill set-piece showing which areas go dark if given people leave.The consequences view: a fire-drill set-piece showing which areas go dark if given people leave.
The fire drill - what goes dark when people leaveLive product · fictional demo org

The tradeoffs of each model

Strong ownership maximizes expertise-per-change and accountability. It also manufactures SPOFs by design: one owner means one qualified reviewer, one queue, and a bus factor of 1 as policy. Fowler's own criticism is the day-to-day version: any change that crosses module boundaries - even a rename - stalls at every border, waiting on every owner. Quality now, paid for with fragility and coordination tax later.

Collective ownership maximizes resilience and flow: no queues at boundaries, no orphaned modules when someone leaves. Its failure mode is the Windows finding wearing a team-size costume, where everybody owning everything decays into nobody owning anything and no one accountable when a subsystem rots.

It also doesn't happen by declaration. A team that says collective but routes every hard change to the same two people is running strong ownership with extra steps.

Weak ownership is the defensible middle for most teams past about eight engineers: named owners for accountability and coherence, open doors for flow, with the owner reviewing changes into their area. It converts the quality mechanism from "only the expert types" to "the expert always reads," which keeps the low-expertise defect channel guarded while knowledge actually moves. Done deliberately, the review conversation becomes your cheapest knowledge transfer channel rather than a gate.

Who actually owns this file?

Not necessarily who CODEOWNERS says. Declared ownership (the file, the wiki table, the team chart) drifts from actual ownership every time someone changes teams or quietly becomes the person a subsystem routes to. Actual ownership is an empirical fact sitting in git history: who authors the meaningful changes in each area, and who reviews them, over a recent window. (The honest way to weight that, authorship rather than raw commit counts, is the same machinery as calculating bus factor.)

The audit worth running is the diff between the two. Files whose declared owner hasn't touched them in a year. Areas with a confident CODEOWNERS entry and one actual contributor who isn't in it. Modules that are collectively owned on paper and single-owned in fact. All of these are knowledge silos wearing an organizational disguise, and a continuously computed ownership map - declared vs. actual, per area, refreshed as the code moves - is exactly what Busfactor's knowledge view builds from the history you already have.

The documentation-health view grading doc coverage and freshness per code area, showing which areas changed without their docs following.The documentation-health view grading doc coverage and freshness per code area, showing which areas changed without their docs following.
Docs health - which docs the code outranLive product · fictional demo org

Choosing a model on purpose

Pick weak ownership deliberately, then tune it per area, and write the tuning down:

  1. Name an owner for every area that matters. Accountability needs a face. But pair every critical area with a deliberate second: a rotating co-reviewer earning real context, so quality concentration never rides on a single head.
  2. Guard the minor-contributor channel with review, not walls. Anyone can change anything; the owner (or their second) reads everything. That's the Bird et al. defect evidence honored without the strong-ownership fragility.
  3. Keep the map honest. Re-derive actual ownership from git on a schedule and reconcile CODEOWNERS to reality, including the documentation inside each owned area, which rots fastest exactly where ownership is fiction.

One closing note on framing, because it matters: ownership models are system design, not performance review. The engineer who "owns too much" is almost always the one who kept saying yes when nobody else would. The model failed them by never assigning a second. The fix is redundancy behind your experts; suspicion of them fixes nothing.

Frequently asked

What are the main code ownership models?

Three, per Martin Fowler's classic taxonomy: strong ownership (each module has one owner, only the owner changes it), weak ownership (modules have owners but anyone can change them, with the owner keeping watch), and collective ownership (the whole team owns everything, anyone changes anything).

Does code ownership improve software quality?

The evidence says concentration correlates with quality: Bird et al. studied Windows Vista and Windows 7 and found components with many low-expertise contributors had more pre-release faults and post-release failures, while a higher ownership share for the top contributor was associated with fewer.

What is the problem with strong code ownership?

It manufactures single points of failure. One owner per module means one qualified reviewer, one queue, and a bus factor of 1 by design. The quality benefit is real, but it's borrowed against the day the owner leaves, and cross-cutting changes stall at every ownership boundary.

What is the difference between CODEOWNERS and actual ownership?

CODEOWNERS declares who is supposed to review; git history shows who actually authors and reviews. The two drift apart as teams change. Actual ownership, measurable from commits and reviews, is what determines both your quality exposure and your bus factor, whatever the file says.

Receipts

Keep reading