Not too long ago I spent some time with a friend of mine visiting from a third-world country. I always enjoy our conversations. Regardless the topic, whether philosophical, theological, historical, scientific, economic, political or otherwise, we seem able to discuss multiple related, unrelated, like and opposing positions on the same topic merely to consider the merits of an idea, all without offending the other person. Many times the conversations are simply thinking, wondering and pondering out loud in the presence of the other. Often, one of us offers colour to the conversation not otherwise present when thinking alone. Fulfilling. Challenging. Some of my favourite conversations.
Because we have no expectations of the conversation or the results, discovering relationships between ideas that previously seemed unrelated is actually a great part of the fun. Starting with a blank slate and no agenda enables discovery. Discovery often yields broader and deeper understanding of a subject which leads to application of an idea.
For example, one conversation we've had in the past pondered the relationship between Maslow's hierarchy of needs at an individual level, the establishment, management and evolution of a nation-state, global economics, the military-industrial complex and very large systems with built-in checks and balances. Thematically, where we ended up was the discussion of managing populations. Like I said, we often let the conversations wander to see where they will go.
When I think about meeting the individual needs of a person, it seems achievable. When I think about meeting the individual needs of a person lost in the foreign-soil occupying military-industrial complex being used as a tool of international nation-state sovereignty and power through interdependence, it is an overwhelming and seemingly useless endeavour. Such a large system and I, being nothing more than the dot of an "i".
You and I have limited resources. We are easily capable of focusing on one individual, perhaps even multiple. However, when it comes to focusing on very large systems such as poverty, drought, genocide, war and politics, it is plausible that we'll feel overwhelmed by the enormity of the problem. How does one add value to an individual in light of the larger system? Do we even realize the size of the system? Is focusing on the individual slighting the system at large? Is focusing on the system slighting the individual?
This journey inevitably led us to a parallel conversation regarding software system sizes, complexity, testability, growth capability and the definition of health.
The questions posed included:
- "How do you know the system will always work as it grows?"
- "How do you know when the system will fault and fail well in advance of the actual events?"
As we discussed the implications of addressing this feature, that feature, that widget and this widget individually and absent the context of everything around it, the challenge of delivering new software seemed easier to address. Remember, we are more easily capable of meeting the needs of the individual over solving drought.
However, in every case we explored, discussing a feature addition absent the larger system level context created new problems. Technical debt, feature and feature-attribute duplicity leading to end-user, customer support and marketing confusion, longer build, implementation and verification timelines and unnecessarily complex infrastructure, though not in all cases did all of these things apply. While addressing an individual feature made me feel as though I accomplished something, it did not address the larger systemic complexity problems inherent with growth. As a result, addressing an individual element in the system without considering the larger system implications began to look like a lie.
Sure we can provide a laptop for one child in one family in a village and tell the world we solved literacy. The misrepresented literacy message aside, how will the laptop impact that child's security in that family and village? Perhaps not an intuitive causal relationship. Nonetheless, related to each other they are for sure.
Similarly, we can add as many individual widgets to a system as we desire. One widget at a time is easy. However, at what point must we consider the relationship of the new feature to all existing ones before the system faults and fails resultant from fragmented solutioning?
When we choose to focus on a widget, we only solve those things related to that widget. However, when we choose to explore an idea with the intent of discovering larger orthogonal relationships, our solution will more likely be systemic in nature.
We have to remember that everything is related to everything else all of the time even when, because it is easier for us individually, we only want to focus on the dot of an "i".