Brooks’s Law and Software Engineering Teams

Why Adding Developers to a Late Project Can Slow You Down

Patrick Karsh
5 min readSep 18, 2024

In the world of software engineering, deadlines can be as unforgiving as they are essential. Teams are constantly battling scope creep, technical debt, and tight timelines. When a project falls behind, the natural reaction might be to bring in more developers to help catch up. However, Brooks’s Law offers a warning: adding more people to a late software project often makes it even later.

What is Brooks’s Law?

Fred Brooks, in his seminal book The Mythical Man-Month (1975), coined what’s now known as Brooks’s Law:

“Adding manpower to a late software project makes it later.”

The logic behind this is straightforward. New developers require time to be onboarded, understand the codebase, and integrate into the team. During that period, existing developers have to divert time from their work to train and communicate with the new additions. Instead of speeding things up, this slows the project down further.

Why Brooks’s Law is Particularly Important for Software Teams

While Brooks originally developed his ideas from his experience managing large software projects, the core concept holds especially true for modern software engineering teams, regardless of size. Here’s why Brooks’s Law is critical to keep in mind:

1. Complexity of Software Codebases

Software projects are inherently complex. As more people are added to a team, the complexity doesn’t just increase in a linear fashion — it compounds. Every new developer brings a fresh perspective, but they also need to navigate unfamiliar code, learn the architecture, and avoid introducing bugs. This increases the likelihood of miscommunication and code conflicts, slowing the entire team.

2. Increased Communication Overhead

More team members mean more coordination is required. Each developer added to a project doesn’t just interact with the code — they also interact with every other developer. As a result, communication overhead increases exponentially. In larger teams, this can lead to “too many cooks in the kitchen,” where meetings, emails, and Slack messages become more frequent, and actual coding time becomes more fragmented.

3. Onboarding Takes Time and Effort

Even the most skilled developer needs time to ramp up on a new project. They have to familiarize themselves with the project’s architecture, tools, and workflows. Existing team members will need to invest time to help onboard them, taking away focus from their own tasks. In complex software projects, this onboarding process can significantly delay progress before the new developers become productive.

4. Lack of Parallelization in Software Development

Unlike some tasks that can be easily parallelized, most software development requires collaboration and a deep understanding of the project’s current state. Two developers cannot work on the same feature without a high degree of coordination. As such, throwing more developers at a late project doesn’t result in a proportional increase in productivity. In many cases, it can introduce bottlenecks as developers wait for others to finish their parts or resolve merge conflicts.

5. Risk of Technical Debt

In a rush to deliver quickly, there’s a risk that a larger team might focus on short-term fixes rather than sustainable solutions. This can lead to technical debt, where the focus is on immediate gains instead of long-term code quality. The more developers involved, the harder it becomes to enforce coding standards and architectural guidelines, leading to inconsistencies in the codebase.

How Software Teams Can Avoid Brooks’s Law Pitfalls

So, if adding more developers to a late project won’t help, what should software teams do when they’re facing tight deadlines? Here are a few strategies:

1. Invest in Automation and Tooling

Automating routine processes, like testing, deployment, and code quality checks, can significantly reduce the workload on your team. Instead of adding more developers, invest in tools that can streamline workflows, detect bugs earlier, and ensure consistent code quality without needing extra manpower.

2. Prioritize the Most Important Features

Rather than trying to do everything, software teams should ruthlessly prioritize. Scope reduction can often be the best way to meet deadlines. Focus on delivering the most critical features and eliminate or delay lower-priority items. A smaller, more focused team can deliver essential functionality faster than a larger team working on a bloated project.

3. Improve Internal Communication

Before adding more people to a project, ensure that your existing team is communicating effectively. Daily stand-ups, code reviews, and frequent check-ins are essential for maintaining alignment. Foster a culture of transparency, where blockers and issues can be surfaced early. Improving communication can sometimes eliminate the need for additional resources.

4. Hire Specialists, Not Generalists

When a team is truly lacking in a specific skillset — whether it’s DevOps, frontend, or database optimization — consider bringing in specialists rather than generalists. Specialists can solve problems more efficiently without requiring extensive training or adjustment. However, they should only be added when the team genuinely needs their expertise to overcome a specific bottleneck.

5. Embrace Agile Methodologies

Agile development processes, particularly those like Scrum or Kanban, encourage small, iterative progress with frequent reassessment of priorities. Agile keeps teams nimble and helps avoid the pitfalls of adding unnecessary resources. With short sprints, cross-functional teams, and constant communication, Agile ensures that everyone is moving in the same direction and reduces the need for late-stage reinforcements.

6. Focus on Code Quality and Technical Debt

Instead of adding more developers, consider refocusing the team on improving code quality and reducing technical debt. This can have a compound effect, speeding up development over the long term. Refactoring problematic sections of the codebase or addressing technical debt can reduce future bugs and make the project more maintainable.

Conclusion: The Strength of Small, Well-Coordinated Teams

Brooks’s Law is a critical concept for software engineering teams to understand. While it may be tempting to solve a late project by hiring more developers, the reality is that this often leads to more delays. The key to faster delivery lies not in the size of the team but in the team’s ability to communicate, prioritize, and focus on quality.

Before bringing in new developers, take a hard look at the root causes of the delays. Are they related to scope, tooling, or communication? Often, a smaller, highly skilled, and well-coordinated team can deliver better results than a larger one burdened by communication overhead and onboarding issues.

In software development, less is often more — especially when it comes to team size.

--

--

Patrick Karsh
Patrick Karsh

Written by Patrick Karsh

NYC-based Ruby on Rails and Javascript Engineer leveraging AI to explore Engineering. https://linktr.ee/patrickkarsh

No responses yet