Constraining the complexity game
When I was preparing my talk for Lean Agile Scotland last week I searched for ways of describing complex adaptive systems and constraints. In previous versions of the talk I had played with a cut down variant of Dave Snowdens’ children’s party story. However given the audience I decided that was a risky strategy and looked for another option. It struck me that a game of football would make for a nice example. So, what I aim to do with this post is describe complex adaptive systems as I see it and how they can be guided with constraints.
So first off, what is a system? Donnella Meadows would describe a system as:
An interconnected set of elements which is coherently organised in a way that achieves something
Or more simply put, parts that interact to meet a purpose. In the football example I’d suggest that the parts are the players, the referee, ball, pitch, goals, lines etc. Interactions would be passes, tackles, refereeing decisions etc and purpose would, of course, be to win… or entertain the fans depending on your point of you.
Complex Adaptive Systems
Complex adaptive systems are systems whose parts co-evolve. The interaction of the parts produce emergent behaviours which in turn change the subsequent behaviour of the parts themselves. This means complex adaptive systems are inherently uncertain, the cause and effect of the interactions is non linear so can only be known in retrospect. However, they are disposed to evolve in a particular way.
So with our football example the players actions coevolve as they learn the strengths and weaknesses of their opponents, the result emerges, the referee’s actions take effect etc. Given the players and their respective abilities, experiences, physical condition and team formations the results is disposed to emerge in a particular way. Manchester United versus Bournemouth is disposed to being a victory for the former but that’s not guaranteed, it’s uncertain.
What makes football the game we love (or don’t care less about depending on your perspective) is the constraints. Constraints that guide the interactions. Think about it for a second, imagine a game with no constraints. No lines, as many players and balls as you like, no referee, no rules, no set formations etc… what would that look like? Not a pretty spectacle I imagine. It would still be complex in nature but it would be disposed to evolve in an entirely different way to what we see on a Saturday afternoon. Constraints give the game the boundaries it needs to guide the parts and their interactions it in a particular way.
So what about software development, is it disposed to being complex? (sorry for the meta question). If (some of) the parts of a software development system are people then that makes it a social system and therefore complex. When we interact we learn, which in turn changes our behaviours and, potentially, the outcome of our efforts.
So what are the constraints that help guide software development? They could be technology choices, processes, working environment etc. The more I think about it the more I can come up with...
Let’s take Kanban as an example. With Kanban we introduce constraints like visualisation, wip limits and explicit policies. The aim of these constraints is to help us better understand the flow of work and to identify things that impede flow.
I’ll follow up with more detail around context free and context sensitive enabling constraints in another post.