I stumbled upon this book by listening to the Maintainable podcast. If you don't listen to it, I highly recommend it. At the end of each episode the host, Robbie, asks each interviewee to recommend a non-software-related book. Several recommended "Thinking in Systems". After the fourth or fifth recommendation, I thought maybe this is worth checking out. After reading it, I can see why everyone recommends it.
I have a master's degree in Electrical Engineering (EE). All EE students are required to take a class called Signals and Systems. In fact, I taught that class for a few semesters as an adjunct at the Colorado School of Mines. When I got my masters in EE at Pitt, my concentration was on Control Systems. So I am very familiar with control systems and feedback loops and general system theory. I know how to calculate transfer functions and draw Bode plots and do PID and lead/lag control and even state-space modeling and optimization.
I was kind of shocked when I first picked up the book. Any EE student will tell you the Signals and Systems book is pretty thick and "Thinking in Systems" is a thin paperback of maybe 200 pages. I have to admit, at first I thought "What can this little book teach me about systems that I didn't learn in my many graduate classes at Pitt?" Well, I was pleasantly surprised.
The first thing I found very interesting about this book is that there's no math involved. Coming from all the classes I took as part of my master's degree that was shocking. It was very interesting how much ground the author could cover without actually bringing up the math. I had to stop myself from doing calculations in my head.
I do like the author's approach. I think it makes analyzing systems accessible to people who are intimidated by difficult math (Laplace Transforms are certainly not easy for most people). It also puts the focus on the behavior of the systems without getting too bogged down with the details. That also helps impart an intuitive sense of systems, which I found rather refreshing. I didn't need to write a ton of equations. I could just look at one of the systems in the book and easily predict what might happen.
Systems Theory Applied to People
The other thing I found very interesting about the book was the types of systems the author talks about. She starts with a thermostat and temperature controller, which is a classic control system example. It's simple, easily relatable, and easy to model even without any math.
Almost all my systems classes in college stayed in that realm - controlling inanimate objects. Very rarely were there any humans in the loop at all (except maybe to adjust the set points). Inanimate objects were just easier to model. Humans seemed kind of messy so we never really talked too much about systems involving humans. Occasionally they would appear, but usually very simplified versions. We'd talk about the time delay for a person to react to some stimulus but that was it. I remember thinking as a student: "I don't want to do the math to really model people - that has to be complicated".
This book talks very heavily about systems of people. These systems are all around us. This includes the judicial system, the legislative system, our interaction with our environment, financial markets, and international trade, just to name a few. People and their actions make up the inputs, outputs, and the various internal dynamics of these systems. There are lots of complex pieces interacting in a variety of ways to produce very interesting results. This book talks about how to analyze these systems and how to change or influence their behavior.
A Recipe For Social Change
This book is really a recipe for social change. It is about understanding all the complex systems around us and predicting and trying to influence their behavior. It talks about common problems that cause systems to misbehave or produce undesirable results. There is also a chapter on interventions and things we can do to change the outputs of systems so they better meet our needs. The author talks about applying these ideas to large systems like our criminal justice system or international trade, but they can also be applied to smaller systems in our houses or workplaces.
Applied to coding
So how can this apply to coding? I had a couple takeaways.
- I recently read the Phoenix Project That book talked about flow and looking more at the bigger picture and avoiding local optimizations, which this book also mentions. So that was a good reminder. It also talked about delays, which are a huge part of Systems Thinking.
- Another big takeaway was not to focus on single events or individuals. It's easy to blame a single event or individual when something goes wrong. Often it's not their fault, but rather a result of the system dynamics.
- The last thing was just a general appreciation for systems thinking and being able to look at the long-term trends and trying to understand what the underlying system structure and dynamics are. Most importantly having some tools to then intervene and change the behavior of the system.