Complexity and Complicatedness in Software Development

I would like the opinion of people from this group.  There is a lot of discussion in the Agile Software Development world about how software development is an example of a Complex Adaptive System. I believe that for the most part - developing software is a complicated activity.

I believe this is important because the CAS crowd in software development is arguing against the value of process, measurement, and good practice. I think this point goes to a significant gap in thinking about software development.

I am using Dave Snowden's definition of Complex and Complicated here.

Simple: The relationship between cause and effect is obvious to all.

Complicated: the relationship between cause and effect requires analysis or some other form of investigation and/or the application of expert knowledge. Good practice can be defined and applied here.

Complex: the relationship between cause and effect can only be perceived in retrospect, but not in advance.

First off, I believe the social aspects of organizations, including software development teams, are complex.

Checking in code, leveraging unit test frameworks, performing automated builds, structuring our projects, creating development environment, generating test code are all Simple activities. The can be defined through standard work.

However, the vast majority of work developers perform is complicated. Coding, Testing, and Design require analysis, investigation and the application of expert knowledge to solve.

We know what forms of analysis, investigation and expert knowledge will result in successful delivery of working software - even as that outcome is unfolding through the process. We can get better at analysis and investigation in a specific domain the more we perform it and are able to establish good practices that are useful as we move forward. Therefore, these are Complicated - not Complex.

Software development doesn't require discovery of a new set of skills every time we write another screen or service. Cause and effect here is clearer than many things we deal with in business - great people with expertise in specific areas build great code.

I believe there are appropriate tools for improving software development and that using the wrong solution approach is irresponsible and can be costly. Simple work can be addressed with standard work. Complicated work can be addressed with developing expertise and good practices. Complex work - the social and coordination aspects - requires simple rules, boundaries, and system level feedback.


Dennis Stevens

Replies to this Topic


Hi Peter,

By no means , do I have any right to suggest to you to stop your exploration, in fact I commend you for it. All I suggested was that the hypothesis of relative complexity needs to be defined before one tries to test it or prove it.

I will try to define state transitions as good as I can.  Of course state of systems has a lot to do with the system itself. For a non complex non-dynamic system there wouldn't be state transitions. Everything is stable or in equilibrium. I think we can best define "a system state" as a condition at time (t) representing the composition, order of elements and the relationships between elements of a system at a given time.  

Every sate produces a behavior which deviates from the behavior of the previous state. System behavior at time (t1) is an emergent behavior resulting from the state 1 at time t1 . Changes from one state to another state could be from internal mutations (call it autopoiesis  ) and/or  random  events resulting from other externalities. These mutations or random events are often treated as perturbations, at each given time (t).  The state of the system provides a summary of conditions that the system has been through (all the past perturbations). This means that the long term evolution of behavior of a system can be characterized from the entire history of the system. (i.e. how many states has it been and what were those states). This really is like a genetic marker on the system since each state influences subsequent states.

There are also many concepts of system stability that that relates to state transitions. These concepts propose existence of equilibrium around which the state transitions happen to orbit For Instance evolutionary stable concept states that the system should, over time, evolve back to the equilibrium state and that the perturbations are essentially small deviation from that equilibrium state. This is very similar to the biosphere example that you describe in your paper



Edited Fri, Jun 11, 2010 8:51 PM

Post Reply

You must be logged in and a member of this Groupsite in order to post a reply to this topic.
To post a reply, contact your group manager(s) Join this Groupsite


Organizational Complexity Network
Powered by

Visibility Public Membership By Invitation or Approved Request Default Profile Professional

Your Status Not Logged-In