One of the main premises of the Agile software developments methods ist that software development is a complex domain, and not an ordered, production line type of system such as automobile manufacturing. Unfortunately, the typical Agilist perception of complexity is not quite aligned with any of the main scientific definitions of the term. Agile literature abounds with romanticised, subjective interpretations of terms such as complexity, self-organisation, emergence, which can only be understood by remembering that ‘a little knowledge is often a dangerous thing’.
How can a complex system be defined? Ask ten or twenty people working on complexity and emergence to describe such a system and you will get as many answers. One of the best sets of criteria for complexity is provided by professor George Rzevski :
1. INTERACTION – A complex system consists of a large number of diverse components (Agents) engaged in rich interaction
2. AUTONOMY – Agents are largely autonomous but subject to certain laws, rules or norms; there is no central control but agent behaviour is not random
3. EMERGENCE – Global behaviour of a complex system “emerges” from the interaction of agents and is therefore unpredictable
4. FAR FROM EQUILIBRIUM – Complex systems are “far from equilibrium” because frequent occurrences of disruptive events do not allow the system to return to the equilibrium
5. NONLINEARITY – Nonlinearity occasionally causes an insignificant input to be amplified into an extreme event (butterfly effect)
6. SELF-ORGANISATION – Complex systems are capable of self-organisation in response to disruptive events
7. CO-EVOLUTION – Complex systems irreversibly co-evolve with their environments
Is software development a complex domain, and if so, why? This is the key question. At one level, the software development process seems to fulfil all of Rzevski’s criteria, but on another level there seem to be exceptions and questions. This question may not be able to be answered definitely, but as we will see, interesting things happen when we TREAT software development as complex. We might also question which other domains may benefit from this treatment.
In a study conducted over a number of years, I have run the Cynefin ‘butterfly stamping’ exercise with over 300 people involved in Agile software development, with the goal of sensitizing them to scientific definitions of complexity and related concepts, of interpreting their cognitive biases related to software development, and of understanding whether software development as a whole could be considered a complex domain. During an introductory session, the participants are asked to brainstorm and collect topics they deal with and activities they engage in as part of their work. Later, after explaining the Cynefin model, definitions of the different domains, and the sense-making process, they do the exercise by assigning to the different Cynefin domains a set of situations, themes, and subjects provided by Dave Snowden, and which the participants were agnostic about. After “warming up” with these situations, themes, and subjects, and getting an active awareness for the meaning of the different domains, the participants then make sense of the activities and topics they identified and collected themselves.
Here is a sample of typical activities provided by participants, together with their sense-making results:
Knowing when a task is done
Monitoring actual time spent
Ambitious (political) time-line
Fixing the build
Finding who to talk to
Countering a belief in magic
Arguing about coding standards
Retrospectives without consequence
Project volume too big
no release deadline
Lack of trust
Interpreting the results of the exercises led to the following realisations:
• Software development is a rich domain, with aspects and activities in all the different domains. The interactions between these aspects and activities are themselves often of a complex nature.
• Software development is a multi-level domain with self-similar characteristics, i.e., activities often tend to consist of sub-activities, each of which may be located in a different domain to the basic activity.
• The activities tend to be weighted more to the complicated and complex domains, with activities related to the coding aspect of software development landing in the complicated (or sometimes simple) domain, and activities associated with project management landing in the complex (sometimes chaotic) domain. Tasks dealing with interaction with a computer tended to be in the ordered domains, tasks dealing with interaction with other humans tended to be in the un-ordered, i.e., complex and chaotic, domains.
• The highest percentage of tasks and activities were in the complex domain. Although this is not sufficient to argue that software development as a whole is complex, it does suggest that many parts of it are amenable to analysis and treatment using complexity-based tools and techniques.
The most important thing to notice is that tasks and activities exist in all domains. Software development is a rich domain, containing many aspects, a large percentage of which can be classified as complex. The interaction between these aspects is also complex. Software development can benefit by being treated as a complex domain (and not an ordered one), and taking advantage of the toolbox of social complexity, namely the Cynefin method. The field (as well as many other fields of human endeavour) would benefit even more from a multi-ontological approach, understanding that there are multiple domains involved, taking the best techniques for the various domains, and combining them in an appropriate and flexible manner. This multi-ontological approach would also go a long way towards resolving the infighting and bickering now taking place between the “Agile” and “Lean” communities. More work is needed to reach a deeper understanding of the inter-workings of agility and complexity, and I’m happy to see that a few people have taken interest in this topic, and have started doing their own research. John McFayden (at XP2011) and Rowan Bunning and Simon Bennett (at Agile Australia) have repeated my experiments, and I’m waiting for them to publish their results.