Simplicity considered harmful (sometimes)
Ian Sommerville, University of St Andrews, UK (retired)Abstract | Biography | Homepage | Twitter |
The notion of simple software is a beguiling one. We all have experience of bloated products where we only use 20% of the features. Who wouldn’t want a simpler system? Simple software is easier to learn and use and is potentially, easier to create and maintain.
However, in this talk, I will argue that for some types of software, simplicity can be a siren song that is luring us into designing software that only displaces complexity to elsewhere in the overall system. Drawing on examples from complex, socio-technical systems that we have studied, I will highlight a number of situations where simplicity was not the answer. I suggest that a focus on simplicity can lead to brittle software that does not meet the real needs of its stakeholders. The software may be simpler but the overall system is less useful and less resilient.
To create the resilient systems that we need to run future cities, healthcare and government, I will suggest that we need holistic approaches to requirements engineering that consider organisational as well as technical issues. These approaches should reveal the inherent complexity of these systems and help engineers make decisions about how to manage that complexity and so define a socio-technical system that can cope with technical and human failure.
Ian Sommerville wrote his first program in 1970 and has been involved in software engineering teaching and research since 1979. Since 1990, his research has been concerned with socio-technical systems with a particular focus on how ethnographic field studies of these systems can be used as part of the requirements engineering and systems design processes. He was Professor of Software Engineering at the Universities of Lancaster and St Andrews and is the author of a widely used textbook on software engineering. Since retiring in 2014, he has rediscovered the fun of programming and now develops small-scale software systems in Python.