DEV Community

Cover image for Code Ownership Is Stupid — Fight Me
xxxn3m3s1sxxx
xxxn3m3s1sxxx

Posted on

Code Ownership Is Stupid — Fight Me

Code ownership is one of those practices that sounds great in theory but destroys teams in practice. Let me explain why.

What Is Code Ownership?

Code ownership is the practice of assigning specific files, modules, or components to individual developers or small teams. The idea is that these "owners" are responsible for:

  • Reviewing all changes to their code
  • Making architectural decisions
  • Maintaining quality standards
  • Being the go-to experts

Sounds reasonable, right? Wrong.

Why Code Ownership Fails

1. It Creates Silos

When Alice "owns" the authentication module and Bob "owns" the user profiles module, they stop understanding each other's code. Alice makes changes that break Bob's module because she doesn't know how it works.

This is the silo problem. Code ownership creates artificial boundaries that prevent cross-functional understanding.

2. It Encourages Gatekeeping

Ownership becomes territory. Alice starts rejecting PRs to "her" code not because they're bad, but because they're not written the way she would write them.

This is code gatekeeping, and it slows everything down.

3. It Creates Bus Factors

If Alice leaves the company, nobody knows how the authentication module works. The team is now blocked until someone reverse-engineers Alice's code.

This is the bus factor problem. One person leaves, and the entire system becomes unmaintainable.

4. It Prevents Knowledge Sharing

When you own code, you become the bottleneck. Everyone comes to you for questions, and you become the single point of failure.

This is knowledge hoarding, and it's the opposite of what healthy teams need.

5. It Encourages Large, Risky Changes

If you own a module, you're incentivized to make sweeping changes across that module. Your teammate working on a different feature also touches your module because the code is tightly coupled.

Both of you are working on different features. Both of you touch the same code. Conflict is inevitable.

What to Do Instead

1. Collective Code Ownership

Everyone owns all the code. Anyone can modify any file. This requires:

  • Comprehensive tests to catch regressions
  • Code reviews to maintain quality
  • Documentation to share knowledge

2. Feature-Based Teams

Instead of owning modules, teams own features. A feature team includes frontend, backend, and DevOps engineers who work together to deliver value.

3. Documentation Over Ownership

Instead of having owners, have documentation. Every module should have clear docs explaining:

  • What it does
  • How it works
  • How to modify it
  • Who to ask for questions

4. Regular Rotation

Rotate developers across modules regularly. This prevents knowledge silos and ensures everyone understands the entire system.

5. Code Reviews as Learning

Use code reviews as learning opportunities. When someone reviews code they don't own, they learn how that part of the system works.

The Bottom Line

Code ownership is a crutch. It's a shortcut that prevents teams from truly understanding their codebase. It creates silos, gatekeeping, and bus factors.

Instead, aim for collective ownership, documentation, and regular rotation. Your codebase will be better for it.

Do you agree or disagree? I'd love to hear your arguments for or against code ownership.

Top comments (1)

Collapse
 
xxxn3m3s1sxxx profile image
xxxn3m3s1sxxx

What's your team's approach? Do you rotate code ownership or keep it strict? I've seen both work and fail spectacularly.