There is a limit to the amount of complexity mere humans can hold within their heads. At least there certainly is in my case.
There is a limit to the amount of complexity mere humans can hold within their heads. At least there certainly is in my case. The complexity of even a small modern software application is enormous. Complexity grows non-linearly as the size of a software system increases.
The two main techniques we have for handling complexity are:
Given enough time our two friends in their garage could produce very large and complex software systems by solving one small problem after another. Adding more people to the team allows us to solve many of the small problems in parallel and deliver large systems quicker. The more people we add, the more we can do in parallel.
Here's the catch: the more people we have working in parallel, the more we are likely to bump into communication and coordination problems. If there are significant dependencies between the problems being solved, then we have to work hard at putting the right communication channels in place so everyone has the information they need at the right time.
So we are back to managing communication again.