"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened"
Douglas Adams


"Excuse me, but I am in the middle of fifteen things, all of them annoying"
Susan Ivanova, Babylon 5


"Get the cheese to sickbay"
B'Elanna Torres, Starship Voyager


"What did y'all order a dead guy for?"
Jayne Cobb, Firefly


"That don't impress me much!"
Shania Twain, Come on over


"Stop the pigeon! Stop that pigeon now!"
Sheriff of Nottingham, Sherwood Forest, The Adventures of Robin Hood


place
Complexity in Software Development
Home > SoftwareProcess > General
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:

  1. Decomposition and integration: breaking down the problem into smaller and smaller pieces until each piece can be solved easily and then putting these small solutions together to form solutions to the bigger problems until the overall solution is achieved.
  2. Abstraction: ignoring details of a problem that are not relevant to what we are currently doing to make it easier to work with the details that are. Abstraction enables us to solve a problem in simpler, more general terms first and then address specifics of the problem in detail

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.  

More about communication....