Complexity In Context – Co-Evolution

This is the 1st in a series of posts drawing out the ideas in Dave Snowden’s State Of The Net 2013 Keynote “How Not to Manage Complexity” in an attempt to get my head around complexity. Today I look at…


I’ll start with the idea that had the biggest impact on me with regards to software development. That idea is Co-evolution (introduced at 10:00 minutes).

Co-evolution is where the system & the agents in the system are constantly modifying each other over time; the system constrains the agents behaviour, the agents modify the system as they interact with it. Consequently the same thing will never happen again the same way twice.

It’s application to software development

Dave argues that we never get a greenfield project to work on – there are always learnings from past experience that we bring to the project. This means that even we were to try & write the same software as before with the same people the system would still be different due to the fact we would have learned from from the previous project & we’d likely bring those learnings to this new project.

(A a side, Liz Keogh makes a great comment in her work on complexity along the lines of we shouldn’t make the same stuff, with the same technology and the same people as the value of that project is probably lower than the cost to implement it.)

Diving in deeper, what do you think Co-evolution means for software testing?

For me, I see it is another underlying reason why purely scripted does not work, for example:

  • The person writing the scripts will likely be different to the person executing it (different agents)
  • The system in which the script was written will likely be different from the environment it will be executed in (scripts written against requirements…?)
  • The system between each execution of the script is likely to be different (e.g. do you check for available RAM before executing?)
  • Different people may be executing the script (different past experiences, using their judgement – damn them!)
  • If the same person does execute the script repeatedly, they are unlikely to execute it the same way twice (2 more cups of coffee, new baby…)