I gave a talk a while ago 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.