Chaos Theory In Software Delivery
Chaos Theory remains a very relevant topic years after my Astrophysics studies. Chaos is the science of surprises. It is a framework to understand nonlinear systems that are effectively impossible to predict or control.
We have all experienced different forms of chaos in life and at work. Often, chaos increases our stress level, inclination to multi-task and chances to makes mistakes. The expression ‘expect the unexpected’ accurately describes how I feel when I operate under chaos.
What can software delivery learn from Chaos Theory?
It is a fact that software delivery is not an ordered and deterministic system. Software delivery is a dynamic system that changes over time and is hard to predict. During software delivery, it is common for people to influence each other with ideas, moods, nonverbal communication and emotions.
This dynamic system implies that many projects are likely to fail from the beginning if success and failure criteria are based on linear assumptions. The need to constantly inspect and adapt to change needs to be embraced.
Chaos Theory is an important reason why software delivery using Agile methods and Lean practices makes sense. Chaotic behaviors manifest in software delivery in different patterns:
1. An event which is unpredictable or disorderly
A team member calls in sick on Monday and cannot immediately be replaced.
2. An event that renews and revitalizes the process
Defining project governance to align roles and responsibilities.
3. Small inputs leading to large changes
Showing sympathy to increase motivation.
4. Similar structures across scales
Scaling Scrum from one team to many teams.
“Software delivery is a dynamic system that changes over time and is hard to predict”Twitter this!
Although dynamic systems seem chaotic and random from a local perspective, they display global coherence and functional patterns. For example, day-to-day management can feel more random than fixed milestones that drive project execution.
Very important to Chaos Theory is the process of self-organization – the interplay between positive and negative feedback. My experience has taught me that self-organization is not process driven. Instead, self-organization is lead by team rules and cohesion, and supported by coaching and behavior management activities.
During a team’s self-organization journey, it is important to support as many positive feedback loops as possible (eg celebrate together). Negative feedbacks provide reflection, maturation, and self-regulation of the project.
We all know that business wants predictability but teams need to improvise to deliver value. This conflict of priorities many times leads to low quality products, products not accepted by users or crunch periods.
Over the years, I have learned to embrace chaotic behaviors by taking a strategic stand to avoid day-to-day fire fighting. The three principles of Elastic Tribe are my approach to embrace chaotic behaviors in software delivery:
1. People first
People deliver projects. Managing team behaviors is easier than managing projects as a system. Frequently, early in projects we skip team culture (how we communicate or collaborate) in favor of tools, tech stack, roadmaps and architectures discussions.
Tip: Create a Team Charter before development starts to formalize an identity. It will help a team come together, own a problem, find a flow, and celebrate!
2. React quickly
Chaotic unpredictability can be managed by reacting quickly. To do so, avoid organizational and process complexity. Aim to promote integration. Many times, teams are slowed down because of approvals, dependencies or personal agendas.
Tip: Teams must own their voice by winning business trust. This results in autonomous teams supported by a business that edits the vision.
3. Feedback loops
Chaotic behaviors need the adoption of a journey of learning and growth. Constant experimentation, evaluation and transparency helps that journey.
Tip: To simplify feedback loop cycle, promote over communication, collaboration, user centric design and small frequent releases. Think in terms of problems, not feature lists.
What are some examples of chaotic behaviors you have experienced?