Are GitHub, Bitbucket, or similar tools your go-to for source control because they boost collaboration and keep developers happy? What if I told you that while these tools enhance productivity at the team level, they often create an enterprise-wide bottleneck—crippling productivity, quality, and collaboration across the organization?
If that sounds unbelievable, we understand why. But let's consider a principle from Systems Theory: optimizing subsystems (what we call "uber systems") can often make the larger system ("unter system") less efficient, crazy less efficient due to non-linear impact.
Here's an example: if everyone in the U.S. tries to become wealthy by saving more money, the economy as a whole could crash, leaving everyone collectively poorer. Similarly, if everyone in a transportation system drives faster to reach their destination sooner, traffic congestion worsens, and everyone arrives later.
This interplay between part-level efficiency and whole-system inefficiency is poorly understood by technologists and engineers, who often rely on analytical thinking. And yet, it's precisely what's happening in organizations that use modern source control management tools like GitHub and Bitbucket. These tools promote poly-repo architectures and focus on making each team more efficient—without considering the impact on the entire organization.
Intrigued , Read On and reach out to to me at [email protected] for deeper conversation.
Introduction
One of the less-discussed problems in large-scale software development that chronically and systemically hampers productivity, quality, and engineering effectiveness is the issue of Code Ownership. If you are a CTO or an executive in a technology company, I might already be losing your attention because you believe you don't have a code ownership problem. After all, everyone seems to be modifying, releasing, and deploying the necessary code. However, our guess is that your assessment might be wrong.
If you use GitHub, Bitbucket, or a similar source code management system, and unless carefully designed structures have been put in place, we believe you likely have a serious code ownership issue. This problem may be undermining productivity and quality, leading your company to deliver too few projects or products while too many engineers work excessively long hours.
Before you assume that code ownership isn't a problem simply because no engineers are complaining about it, we urge you to read this post. You might be in for a surprise—and you may come to appreciate the power of systems thinking, which is our area of expertise.
Before diving into how this invisible problem manifests, let's first understand the system of code ownership. Code ownership can be divided into Strong, Collective and Collaborative a.k.a weak ownership.
Strong Ownership
The term "strong ownership" might sound appealing, but it's a disaster for your organization. Strong ownership refers to situations where a codebase, library, folder, or module is exclusively "owned" by a specific team or individual. Only they are allowed to make changes to the code. While the code might be visible to others, any changes require queuing up with the "owner," who dictates the timeline for implementation, QA, and deployment.
In legacy systems, where code resided in monolithic repositories (e.g., ClearCase, SVN, or even early GIT), this model worked well for SCM teams and developers who valued predictability and control. If something broke in production, owners could take responsibility and avoid being blamed for others' changes. This structure, however, came at a massive hidden cost—it's a catastrophic productivity, quality, and engineering effectiveness killer.
Why Strong Ownership Creates Chaos
Traffic Jams in the System:
- In an enterprise with 20 projects, each requiring changes to 100 components, every project must queue up with 100 different teams.
- No one knows at the start how much work will be required from each component owner, making capacity planning impossible.
Unpredictable Workload:
- Software development isn't manufacturing; it's an information generation business. New work creates new information, which generates additional work across modules.
- Hiring or staffing to meet demand is impractical since predicting workloads accurately is impossible.
Integration and Synchronization Failures:
- Integration and functional testing require alignment across multiple teams. If one team prioritizes differently or is understaffed, the entire project stalls.
- This results in cascading delays, where even reducing the number of projects from 20 to 2 fails to solve the problem.
Meeting Overload:
- To manage these delays, companies host endless meetings for alignment, prioritization, and coordination. These meetings address symptoms, not the root cause: strong ownership.
Innovation Blockers:
- Strong ownership stifles innovation.
- Even when a developer can implement changes across modules to demonstrate an idea, the system prevents them from doing so. Demonstrating an innovation to leadership might require 30 people across 30 modules, which rarely happens unless VP-level intervention is involved.
Why Queues Magnify the Problem
Every approval, database change, firewall update, or ticket adds to the growing queue but those queues we all are aware of. In globally distributed teams, shared environments and gated processes exacerbate the problem, when each of hundreds of team work on thousands of repos, we create thousands of micro-queue what emerges is an invisible mega traffic jam that derails projects, kills innovation, and reduces overall organizational effectiveness. We then see people as the problem but in reality root cause is strong code ownership systems we have put in place.
The Hidden Cost of Strong Ownership
Reinertsen's book Flow dedicates a chapter to queues, but even it doesn't fully capture the magnitude of the problem caused by strong ownership. This model creates bottlenecks at every stage, turning organizations into productivity and innovation graveyards.
The Solution
Removing strong ownership can increase productivity, quality, and engineering effectiveness by 300–400% may be more. By empowering developers to make changes across modules and focusing on system-wide collaboration, organizations can eliminate queues, streamline workflows, and foster innovation.If your company has strong ownership practices, understand this: your productivity and innovation aren't just suboptimal—they're trapped in a traffic nightmare. The solution to Strong Ownership was Collective Ownership
Collective Ownership
Collective ownership emerged as a response to the strong ownership systems that companies—particularly developers and managers—put in place to ensure no one breaks their code in production. While these strong systems achieved their goal of preventing production issues, they also created significant bottlenecks. Long queues formed, requiring countless program and project managers to coordinate and bring people together. Unfortunately, these queues couldn't be resolved by simply adding more "traffic managers."
As part of Extreme Programming (XP), Kent Beck and others popularized the idea of collective ownership, along with many other innovative practices. Collective ownership allows everyone access to all the code, enabling anyone to make changes and use automated build-and-deploy pipelines. This approach virtually eliminated queues. The only remaining bottlenecks occurred when someone needed help modifying a codebase outside their expertise, requiring assistance from another developer. In most cases, no tickets or formal processes were necessary.
The innovation unleashed by collective ownership was remarkable. Two or even one developers could modify any codebase, create a demo project, and showcase a working prototype—even with mock or fake components—something nearly impossible under the rigid social systems created by strong ownership practices.
However, collective ownership thrived only with small codebases. As the codebase grew to millions of lines of code, fear set in, and developers and management began holding each other accountable for production issues. At this point, organizations faced two options:
- Return to strong ownership: Reinstate rules that only owners could modify their code, which is what most organizations did. Many organizations did that.
- Evolve collective ownership: A few exceptionally intuitive individuals—though not necessarily informed by queuing theory—recognized the nightmares of strong ownership. They developed new approaches to extend collaborative ownership effectively, which we'll describe next.
Collaborative Ownership: The Best of Both Worlds
In a collaborative ownership model, a team or group of people act as guardians or stewards of a code module or folder. While they oversee and maintain the code, they cannot prevent others from modifying it. At first glance, this might seem risky—how do we balance control with flexibility?
Here's how it works:
- Code owners retain direct access to make changes to their modules.
- Other developers can submit code change requests, which the code owners review and approve.
- If the changes meet criteria after review, they are accepted and merged.
The Key Difference: Speeding Up Queues
In this model, developers can independently build, test, and verify their changes in their local and QA environments. Once everything is ready, they submit a change request for review. This shifts the traditional ticket-based modification queue into a code review queue, which is far faster and more manageable for code owners.
The key insight is that code review queues are much more predictable and manageable than modification queues. Code owners can review changes at their own pace, and developers aren't blocked waiting for approval to start working. This creates a more efficient workflow where parallel development becomes possible.
Benefits of Collaborative Ownership
- Eliminates Bottlenecks: No more waiting for owners to implement changes—developers can work independently.
- Faster Innovation: Prototypes and demos can be built quickly without coordination overhead.
- Better Code Quality: Multiple eyes on code changes improve quality and catch issues early.
- Reduced Meeting Overload: Less need for coordination meetings since developers can work autonomously.
- Scalable Architecture: Works well with large codebases and distributed teams.
The GitHub Problem
Now, let's address the elephant in the room: GitHub and similar tools often promote the very problems we're trying to solve.
How GitHub Encourages Strong Ownership
- Repository Fragmentation: GitHub's design encourages creating separate repositories for different components, which naturally leads to ownership silos.
- Access Control: GitHub's permission system makes it easy to restrict access to specific repositories, reinforcing ownership boundaries.
- Fork-Based Workflows: While forks can enable collaboration, they often create parallel development paths that are hard to merge.
- Pull Request Bottlenecks: The PR review process can become a bottleneck when owners are overwhelmed or unavailable.
The Poly-Repo Trap
Many organizations fall into what we call the "poly-repo trap":
- Each team gets their own repository
- Teams become protective of "their" code
- Changes require coordination across multiple repos
- Integration becomes increasingly complex
- The system becomes harder to understand and maintain
This creates the exact opposite of what GitHub promises: instead of fostering collaboration, it creates fragmentation and ownership silos.
Solutions and Best Practices
1. Monorepo Approach
Consider consolidating related code into a single repository:
- Easier Coordination: All related code in one place
- Simplified Dependencies: No need to manage cross-repo dependencies
- Better Visibility: Easier to see the impact of changes across the system
- Faster Integration: Changes can be made atomically across multiple components
2. Clear Ownership Guidelines
Establish clear but flexible ownership rules:
- Stewardship, Not Control: Owners are stewards, not gatekeepers
- Review, Don't Block: Focus on code quality, not preventing changes
- Documentation: Clear guidelines on how to contribute to "owned" modules
- Escalation Paths: Clear process for resolving conflicts
3. Automated Quality Gates
Replace human gatekeeping with automated quality checks:
- Automated Testing: Comprehensive test suites that run on every change
- Code Quality Tools: Linters, formatters, and static analysis
- Performance Monitoring: Automated performance regression detection
- Security Scanning: Automated security vulnerability detection
4. Cultural Shift
The most important change is cultural:
- Trust Over Control: Trust developers to make good decisions
- Learning Over Blame: Focus on learning from mistakes, not assigning blame
- Collaboration Over Ownership: Emphasize collective responsibility
- Systems Thinking: Understand the impact of decisions on the whole system
Measuring Success
How do you know if your collaborative ownership approach is working?
Key Metrics
- Lead Time: Time from idea to production
- Deployment Frequency: How often you can deploy changes
- Change Failure Rate: Percentage of changes that cause production issues
- Recovery Time: How quickly you can recover from failures
- Developer Productivity: Lines of code, features delivered, or other relevant metrics
Warning Signs
Watch out for these red flags:
- Increasing Backlog: Growing list of pending changes
- Long Review Times: PRs sitting for days or weeks
- Coordination Overhead: Too many meetings to coordinate changes
- Blame Culture: Teams pointing fingers at each other
- Slow Innovation: Prototypes and demos taking too long to build
Conclusion
The irony is clear: tools designed to foster collaboration can actually kill it when used without understanding the underlying systems. GitHub, Bitbucket, and similar tools are powerful, but they're not a panacea for collaboration problems.
The real solution lies in understanding and designing your code ownership system thoughtfully. Strong ownership creates bottlenecks, collective ownership can be chaotic, but collaborative ownership—when properly implemented—provides the best of both worlds.
Key Takeaways
- Ownership Models Matter: The way you structure code ownership has massive impact on productivity and innovation.
- Systems Thinking Required: You need to understand how your tools affect the entire system, not just individual teams.
- Culture Trumps Tools: The right tools with the wrong culture will still fail.
- Continuous Improvement: Regularly assess and improve your ownership model.
- Measure What Matters: Track metrics that indicate system health, not just team performance.
Next Steps
If you're experiencing the symptoms described in this post:
- Assess Your Current State: What ownership model are you currently using?
- Identify Bottlenecks: Where are the queues building up?
- Design Your Target State: What would collaborative ownership look like in your organization?
- Plan the Transition: How will you move from where you are to where you want to be?
- Measure and Iterate: Track progress and continuously improve.
Remember: The goal isn't to eliminate ownership—it's to design ownership that enables collaboration rather than blocking it.
The tools you use matter, but how you use them matters more. With the right approach, you can turn GitHub from a collaboration killer into a collaboration enabler.
For more insights on systems thinking and organizational design, reach out to us at SystemsWay. We help organizations design systems that work the way they want them to work.