idea
There is an optimal size for a team after which adding more manpower yields diminishing improvements, then negative results.
There are several empirical rules, such as two pizza teams, scrum sizes, etc.
A more scientific approach is to apply the USL[1] to organizations. The USL theorizes the capacity depending on the number of workers n in a system, based on the contention factor α (lowered effectiveness due to constraints on shared resources) and coherence factor β (overhead of synchronizing work).
The capacity \(C(n)\) is:
$$C(n) = \frac{n}{(1 + α \times (n-1) + β \times n \times (n-1)}$$
Impact is:
- reducing n lowers the impact of and coherence factors. This can be done through hierarchy[2].
- reducing contention factor is done through cross-functional teams and isolating architecture such as containerization and computing, team ownership rather than shared, individual pipelines…
- reducing coherence factor is done through delegation framework, decoupling architectures, self service architecture, public API's…
Interestingly, what you want is as little collaboration as you can get away with
links
references
Brooks' Law, from Mythical Man-month
Adding people to a late project makes it later
[1]: Universal Scalability for Orgs, Jonathan T. Moore - Describes the application of the universal law of scalability to software teams (in ref)
How to Quantify Scalability - The Universal Scalability Law , N. J. Gunther (saved in ref) - A formula describing impact on a system's throughout to add new workers
[2]: a comment on hacker news re: Universal Scalability for Orgs
Since communication overhead increases proportionally the square of the number of people on the team—a fact illuminated by Brooks in the 1970s—what you actually want is as little collaboration as you can get away with.
It's an important point that warrants repeating. It comes from an observation that if there are N people communicating directly with each other, every one has to communicate with N-1 other people, which leads to \(N \times \frac{N-1}{2}\) simultaneously open bidirectional communication channels, which is O(N^2).
I think this point plays a crucial role in why hierarchies form, both in teams/companies and societies. A hierarchy is what lets you turn an O(N^2) relationship into O(N) one, at the expense of creating O(log n) hops.