How agile copes with complexity?
Agile is a way to cope with complexity, when managing projects and creating new products or services.
Complexity is increased due to globalization, competitiveness, technological advance, economical and financial crisis, increased velocity in circulating information, increased number and typology of systems to connect together, increased numbers of stakeholders to involve and satisfy.
This scenario, applied to the software field, was already tackled in the nineties where agile started to make its first steps (DSDM, crystal, SCRUM, XP, etc.), and continued when Cockburn, Beck, Sutherland and all the other gurus that gathered in 2001 to write the agile manifesto. They understood that the old way of managing projects and develop software (waterfall approach) were no more functioning because changes in complex systems happen everyday and it was necessary to manage them differently, quickly and effectively.
Complex Systems
A complex system is an open system that is able to interact actively with the world outside.
Any of these complex systems, comprise many internal components that communicate on their own, one with the others, using local interactions.
These interactions could happen simultaneously, in parallel, not following a predefined sequence or logic, which make them not predictable in their behaviors.
These components use feedback as a way to stimulate new behaviors or to confirm, regulate and balance the old ones. The way they decide to operate in such a communication could be self-arranged.
The components of a single complex system can be thought as an internal network of peers.
As above mentioned, they can also communicate autonomously with external components belonging to other systems, extending the network and increasing the complexity.
This means that a single peer is not 100% certain of what will be the response to a specific stimulus it sends out through the network, because of the number of relations the other peers rely on in order to react.
Every peer,
hence,
acts, waits, and
receives feedback. Then, the component,
inspects the feedback and, finally,
adapts its behavior (do you remember the
empirical approach?) according to what is just received.
This also means, that the more your network is able to catch, analyze and adequately react to these stimulus the better you are managing the complexity around you, your projects and your systems.
What does agile has to do with it?
The main traits of agile, in my opinion, are the ones that can help you managing the complexity and they are summarized here below:
- enhance simplicity
- high feedback exposure and exploitation
- continuous process improvement
- communication effectiveness
- fond of talent and technical excellence
- clear roles and responsibilies
- keep networks connected
These are the most important of a list of most important characteristics.
Enhance Simplicity
Every process, ceremony, communication, decisional step, line of code written, should be thought and maintained as simple as possible.
High Feedback Exposure and Exploitation
In order to tackle any risk, opportunity, event not planned, any deliverable or decision must be shared with the relevant stakeholders and feedback must be requested.
This is also applied within the team: any member informs the others about progress, problems, warnings s/he is aware of.
This helps to catch any variance and to steer the project toward a safer place.
Continuous Process Improvement
The more a component is able to adjust its behavior toward the simplicity and the effectiveness in its behavior, the more the complexity can be understood and broken down in small chunks, that are much more manageable.
This approach in reducing compexity into chunks, actually scales it down into complicated “problems” (see the stacey matrix).
Communication effectiveness
As above mentioned, communication and interactions are paramount when managing complexity.
Agile wants to facilitate as much as possible the way the different components communicate and interact each other.
This is the reason why the agile manifesto tell us about the importance of individual and their interactions and the importance of direct and effective communication.
Fond of Talent and Technical Excellence
Complexity cannot be wholly centrally managed. Central decisions should be taken for the most important topics, avoiding micro-management.
This means that each peer (team members) and the relative sub-networks (teams) must be able to take the decisions that they as experts should take according to their experience.
This is the reason why any agile team should have on board talented people having the adequate technical excellence in order to choose the best way to solve problems, acting, inspecting, deciding and adapting.
Clear Roles and Responsibilies
Information can circulate faster and effectively in a network, only if the network itself knows how to manage it.
This is the reason why the agile disciplines (XP, SCRUM, DSDM, etc.) identify clear roles, responsibilities and rules in order to let the “energy flows”.
Connecting the different Networks
A disruptive behavior when facing to complexity is to let each sub-network behave as an isolated island.
When this happens information stops to flow freely and smoothly, problems don’t emerge anymore and, because of the isolation, each island finds and implements different solutions to same problems…in one word: waste.
Agile (and SCRUM particularly) to avoid such a situation, provides specific moments in which the different stakeholders involved in the project (teams interconnected and not, sponsor, managaement, customers. etc) meet together.
These moments are, for example, the release and sprint planning meeting, the daily meeting, the demo meeting.
Finally, such a complexity should be handled by smart, clever and motivated people.
Does it sound familiar? (“Build projects around motivated individuals…” one of the principles of the agile manifesto)