The myth of software simplicity

I gave a talk recently about complexity and large-scale systems. In the discussion following the talk, one of the audience suggested that what we should be doing is making our systems simpler, not more complex.

Simplicity is one of the Holy Grails of computer science. Edsger Dijkstra, a pioneering computer scientist, emphasised the importance of simplicity in the 1960s and ever since then, the CS community has claimed that, in systems construction, the KISS principle – Keep It Simple Stupid – is the approach we should follow.

Obviously, there is much to be said for simplicity and if we can find simple rather than complex solutions to problems, then that’s the approach we should take. Simple solutions lead to simple programs that are easier to read, understand and change. What’s not to like?

Unfortunately, it ain’t that simple.

The problem is that we develop software to support what Peter Checkland, a systems engineer, called human activity systems, otherwise known as socio-technical systems. These are systems that include technology AND people and organisations. The support some human purpose – collect taxes, maintain medical records, manage traffic flows, etc. The one thing that you can be sure of when you get a number of people together is that they won’t agree with each other.

Consequently, people will disagree about both ‘the problem’ and ‘the solution’ implemented in the software. In fact, there is no such thing as ‘the problem’ – there are multiple interacting and changing problems as seen by different people in the system. Furthermore, these ‘problems’ are ill-defined and dynamic – they are changing all the time as the socio-political environment in which the system operates changes. So, it is nonsense to talk about ‘the problem’ – there are a whole range of problems that are perceived differently by different stakeholders in the system.

Another thing about human activity systems is that they are often directly governed by laws and regulations. For example, the tax collection system is limited and constrained by the tax laws of a country. I believe that there are about 12, 000 pages of tax laws, made at different times and, almost certainly, conflicting in some ways. You can’t simplify the system because that would mean simplifying the law and politicians usually prefer to avoid doing things like this.

So – human activity systems are immensely complex and we can’t simplify them without upsetting a lot of people and, in many cases, acting illegally. Consequently, the software in these systems is inevitably complex.  Simplicity is great when you have a simple technical problem – but the most interesting and challenging situations are immensely complex which means that the software has to reflect that complexity.

So when people tell you that there is always a simple solution, you can be completely confident of one thing.  They have never been involved in the development of software as part of a large socio-technical system.

2 thoughts on “The myth of software simplicity

  • October 7, 2014 at 9:41 am

    Very interesting post. I agree on the existence of multiple problems, which are ever-changing and mutually inconsistent (you can’t satisfy them all at the same time). However, I would rather say that the solution to these problems is non-trivial, but I would not necessarily state that it has to be complex. A further observation is about what it means for a solution to be complex: hard to devise? difficult to conceive? difficult to comprehend? I find the term “complex” used too often, without a real explanation of its meaning. Could it be the case that these solutions are still “complex” because we do not have adequate modularity mechanisms for socio-technical systems? Otherwise stated, is it appropriate to employ modularity mechanisms that were thought for composing merely software systems in the context of socio-technical systems?

    • October 7, 2014 at 11:59 am

      Fabiano – thanks for your comment. I’ve discussed the nature of complexity in this post:

      I agree that we need better abstractions to model socio-technical systems but I don’t think that these can completely address the issue of complexity. Much of the complexity in these systems derives from their environment e.g. complex laws govern the operation of the system, and better system representations cannot do anything to resolve this type of complexity.


Leave a Reply

Your email address will not be published. Required fields are marked *