I've argued many times that software projects are complex adaptive systems. This view is shared by Ken Schwaber, Jim Highsmith and many other software development experts (and agile evangelists in particular). But what are those complex adaptive systems made of?
Well, as we shall see, software projects are not comprised of requirements, features, deliverables, tools, technologies or processes…
Complex adaptive systems are, without exception, made up of large numbers of elements that […] are diverse in both form and capability […]. Think of the great array of firms in New York City, or the exquisitely tuned antibodies in the immune system. To refer to active elements without invoking specific contexts, I have borrowed the term "agent" from economics. The term is descriptive but avoids preconceptions.
In particular, the founding workshops [of the Santa Fe Institute, dealing with complex adaptive systems] made it clear that every topic of interest had at its heart a system composed of many, many "agents." These agents might be molecules or neurons or species or consumers or even corporations. But whatever their nature, the agents were constantly organizing and reorganizing themselves into larger structures through the clash of mutual accommodation and mutual rivalry. Thus, molecules would form cells, neurons would form brains, species would form ecosystems, consumers and corporations would form economies, and so on. At each level, new emergent structures would form and engage in new emergent behaviors. Complexity, in other words, was really a science of emergence.
Software Projects Are Comprised of People If we translate this to software development, we see that software projects are comprised of people that are diverse in both form and capability. These people are constantly organizing and reorganizing themselves, through accommodation and (hopefully friendly) rivalry, into project teams. At the project team level, new emergent structures form and engage in new emergent behaviors.
The "secret" of good development management is that, in software projects, only the people are agents. Requirements, features, artifacts, deliverables, tools, technologies and processes are not agents, since none of these can actively reorganize themselves, nor can they initiate interaction with any of the other project elements. It's only the people that have the capabilities of interaction and organization.
People are the 007's of software development. They are the real secret agents!
What we've learned from complexity theory is yet another indication that software projects are, in the first place, all about people. Software projects are not simply constructed from requirements. And neither are they comprised of features, deliverables, tools, technologies, or processes.
Software projects are, in the first place, systems comprised of people.