Home > Articles > Software Development & Management > Agile

  • Print
  • + Share This
From the author of


There's a limit to the amount of complexity that mere humans can hold within their heads. As the size of a software system grows, the complexity of that software system grows "at least as fast as the square of the size of the program" and quickly outstrips the relatively fixed capacity of a human brain. Gerald Weinberg calls this law of software development the "size/complexity dynamic."

The best strategy we have for dealing with such large problems is decomposition. We break down the problem into smaller and smaller problems until we've reduced the size of the problem to something we can manage. We then go about solving each small problem, integrating the solutions to form the solution for the bigger problem. Given enough time, our two friends in the 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 faster. 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, we have to work hard at putting the right communications channels into place so that everyone has the information they need at the right time.

So we're back to managing communications again.

  • + Share This
  • 🔖 Save To Your Account