Does Software Understand Complexity?
Reflections from ICCS2018
This past week I was at a conference with some wonderful talks, but I also enjoy the hallway track - the conversations you have with people during breaks. You trade experiences and eventually you get to the question: “what do you do?” My answer started with one word: software. The people I met had a range of reactions but often they spoke about the software they used daily and their frustrations with it. Then they described the programming that they do as part of their research and how engaging it can be.
It was interesting to have those conversations there. I was at ICCS2018, a complex systems conference. After years of reading about the field I wanted to meet the people, learn more, and also get myself out of a rut. I go to quite a few software development conferences, but this was a completely different crowd. The attendees were primarily researchers from universities and institutions. The range of subjects discussed was extremely broad: sociology, economics, physics, biology, statistics, and networks. But there was a unifying thread that held it all together: understanding systems well enough to deal with them in the world at all levels - from awareness to design to policy. This might sound too abstract or wide to be useful, but it wasn’t. The talks and papers were solid research, backed with math and methodology. It was interesting to see the same patterns emerge across areas as diverse as knowledge transfer in economic development and the propagation of mutation and variation in biological systems.
I was surprised that there was very little discussion of cross-disciplinary concepts at the conference. I can think of a number of reasons why. One is the focus of academic research. Science proceeds in small steps. If there’s theory to be found uniting phenomena around a set of concepts it might be constrained to the common mathematics used across the fields. I just found it interesting to see strikingly similar patterns across various different talks. Natalia Komorova’s talk about population dynamics of mutation in cancer and how it is affected by dimensionality seemed to have similarity to Cesar Hidalgo’s talk on the Principle of Relatedness and economic geography. Different substrate, similar patterns. Larger theories might just be premature. The two prominent exceptions I noticed were the talks and work of Nassim Taleb and Stephen Wolfram . Both of them are at least partially outside of academia, and it seems they are able to work in the space of knitting concepts together and finding the commonalities without the laser-like topic focus that research publication and funding often impose.
The other surprise I had at the conference was that I was alone. There were very few people from software development there. This is especially striking because our entire field is pretty much about managing complexity. I’ve long thought that as we add code and dependencies to systems we approach biological levels of complexity. Every developer has had the experience of changing one thing and discovering that some seemingly unrelated thing fails due to hidden coupling. Every organism has that sort of coupling. In medicine, that type of coupling is the central problem of drug research: it's hard to target one condition without causing side effects and it's hard to know what they will be.
There are likely many things we can learn from complexity researchers. One session I wanted to attend, but was unable to, consisted of talks on cascading failure in systems . It’s not much of a reach to guess that some of that might be applicable to operations in software. Likewise, it didn’t seem that many of the people I spoke to knew of concepts like Postel’s Law, Conway’s Law, or the Law of Leaky Abstractions, all of which are observations from software development that have application outside of our field.
If there is one thing that keeps many people in software from engaging this community, I think it’s the mathematics involved. CS education biases heavily toward discrete math, but one thing that complexity shows is that as discrete pieces aggregate you need continuous tools to understand the resulting behavior. At scale, digital becomes analog. We might find that our field could benefit from mining math related to mechanical and electrical engineering. Feedback and control theory, in particular, looks like it could have some utility.
There's a lot of knowledge outside our field that could be applicable to us - different ways of seeing problems and different frames we can apply to them.
I'm glad I went to the conference. I hope to see more people from our field at the next one.