Loosely Coupled and Strongly Coherent
People need space in which to evolve. In good relationships each person should have their own expectation of having space so that they can grow. If this isn’t the case and one person changes, then the whole arrangement breaks apart — which is painful. This can be applied to software engineering as well. I was so good at doing this in software and had been so bad at doing this in my life. When I rewrote my OS and apps and service stacks over the last 2.5 yrs I decided to internalize this concept and live it and be it. If you are curious to hear the story of how I managed this, then read on.
I’ve always struggled with the concept of space in interpersonal relationships (primarily because I never gave myself the space I needed, or even acknowledged my own needs in the past). On the one hand, I realize how important it is to be supported when you need help, and on the other hand, I’ve come to realize that there’s a difference between facilitating someone in doing something vs doing it for them.
I’m an engineer, an artist, a believer, a dreamer, and a fighter. However, when it comes to thinking through stuff and executing on things, I’m strongly influenced by my engineering side. And a long time ago, I came up with the core values that I hold true for good software engineering and that is “loose coupling and strong coherence”. I have been coding to this ethos for as long as I have been coding (for a quarter century as of 2015). Create stuff that works well together, and all the stuff that you build, gives the other stuff that you build room to change and evolve.
How I figured this out so early on in building software, but didn’t in managing relationships for almost 20 years eludes me.
Programming by contract #
To give you more specifics, in software engineering the touch points between components can be declared in a contract. And as long as a module can provide the underlying implementation for this contract, then another component can interface with it. And a module can be swapped out without disrupting any other modules (as long as the new module respect this contract). This is an incredibly powerful form of abstraction, encapsulation, and interconnection that can be used to create really robust codebases that are conducive to evolution. The difficult part is iterating on the design and implementation of this software to come up with really good contracts. It takes some experience and some iteration to get these right.
What if you were to apply this to relationships, what would that look like?
Well before I do that, I need to focus in on one type of interconnection between people, and that is one person helping another or providing support to another. In talking about this concept, I want to outline the difference between empowerment and enablement. Let’s say that you want to help someone, or you need help from another. What form do you expect this help to be delivered in? Do you want someone to actually do the heavy lifting for you, or actually make you stronger so that you can do the heavy lifting yourself? There’s an old adage — “give a woman a fish and you feed her for a day; teach a woman to fish and you feed her for a lifetime”. And that expresses what I’m about to breakdown next.
Empowerment #
This form of help or support assumes that the person that’s being helped can actually help themselves, and is able to do things on their own. However, they need some assistance in triggering their internal mechanism to get going. There’s a tremendous amount of respect given by the helper to the helpee — because the helper assumes that the helpee is an empowered and capable person, that just needs an assist in a way that they’re not able to generate for themselves right now. But the idea is to get their internal process started, so that they can go off and do this on their own.
Some call this “tough love”. This form of love is not easy to give or receive, because there has to be a pretty clear intention set at the get go between both helper and helpee that this is not some kind of permanent crutch or codependency situation. The helper doesn’t take on the burden of the helpee. And the helpee has to be given the room in which to make mistakes and evolve, without micromanagement from the helper. And this is almost counterintuitive. This applies to any type of help being given, whether it’s health related, finance related, work related, etc. Here are some examples:
-
An example of this is when someone sees a doctor for a condition, they look deeply into the root cause of the condition, and address that to affect a cure, rather than superficially address symptoms that don’t actually go away.
-
Another example of this in parent child relationships is where a parent gives their child some room in which to grow and make their own mistakes and learn from it, rather than trying to be overprotective of the child. Overprotection would keep the child from developing strength that will be necessary in everyday life as the child matures.
-
Yet another example in romantic relationships is where one partner doesn’t allow the negative emotions of another totally overrule their own feelings. By keeping this at bay, they are able to maintain a sense of self and calm and stability, while being empathetic towards their partner, but not getting totally washed away by their current negative state. This actually facilitates the person having the bad day to snap out of it, and come back to their center, rather than both people just nosediving into the rabbit hole.
Enablement #
This form of help is actually easier to give and receive (though it’s not as virtuous as empowerment). It feeds on the empathy that the helper feels for the helpee. This type of help takes the form of actually enabling someone to remain in the suboptimal situation that that they’re in right now, because it’s too difficult to get them to take ownership of the core issues that constitute the real problem which needs to be solved. It tends to be easier, and nicer, and kinder to simply pat someone on the back, and say that they should just keep doing what they’re doing, and just enable them to propagate their current behavior into the future. It is incredibly difficult to take a step back and look at what the real issue is, and then let go of fear and then actually push the helpee to make a significant change that they feel that they can’t make — because they are so afraid of what might happen.
-
An example of this in a parent child relationship is when a parent gives their child the benefit of their experience, without giving the child a chance to make mistakes and learn on their own and come up with their own best practices. The parent thinks that they are being really kind by saving the child from the pain they’re going to face. But in doing so, they disable the child from being able to handle learning in life.
-
Another example of this in a romantic relationship is that one partner doesn’t allow the other to overcome a fear that they have, because they can’t bear to see their partner in pain or be afraid or anxious of this thing that they’re afraid of. By allowing their partner to hide from this problem, they’re just propagating fear and insecurity in the partner, and not really help them become stronger and overcome this issue. Empowering them to overcome this issue would enhance the quality of life of the partner, and bring more peace into the relationship.
In this case, the intention to help actually propagates the helpee’s negative situation. Instead of getting better, the negative situation just keeps getting extended into the future. And the helper and helpee become intertwined in codependency. This is a pretty disempowering pattern. And it doesn’t really benefit the helper or the helpee. It usually comes about from people unwilling to face the fear of letting go, so that people can make their own mistakes, learn from them, and grow stronger from having made those mistakes and improving their situation. When the helper takes this opportunity away from the helpee, it’s disempowering and it’s very disrespectful, because it feeds the insecurity and fear of the helpee, and the helper pities the helpee, rather than respecting them.
So how do you put this together into having healthy relationships of all kinds?
Applying to self #
It all starts with self, and then it radiates out to all the other people that you interact with. Inside of yourself, you have different parts that gravitate towards different emotions. Some parts of you are brave. Others are more prone to worry and fear. And so on. In order to evolve as a person, you have to give yourself room to grow as well, and create an environment for yourself which gives you the room to take chances, fail, and learn from them and evolve.
At the same time, give yourself some stability as well, so that not everything is being disrupted all the time. This tug of war between change and stability is where loose coupling and strong coherence comes into play inside of yourself. You have to:
-
have the same goal for all of you,
-
know who you are, what you need and want,
-
orient all parts of you to this shared goal,
-
give each of the different parts of you space and room in which to shift and grow,
-
be able to absorb these internal disruptions into your entire being, and still keep moving forwards.
If you are able to start doing this inside of yourself, you are then going to be able to reflect this into all the relationships in your life (automagically). The work that you have to do is the same for self and for relationships with others. That’s the good news. The bad news is that it’s incredibly difficult to do this within yourself — which is why codependency and enablement is so easy!
Rippling outward #
Scaling this out to other relationships is very similar to the inner work you have to do. Think of how you orchestrated different parts of you, by giving them some space and orienting to some common goals and having some patience. The process is very similar for relationships with others.
You have to give yourself some space in which to evolve, and not be too strongly coupled with others in your life, such that small disruptions in yourself or in the other, fracture your relationship. If your relationships follow a pattern of codependency, that just means that they’re too strongly coupled.
And you need to replace some of these direct linkages / interconnection (implementation) with things are more abstracted (interfaces or contracts) — meaning that each person is responsible for implementing these contracts. You are not implementing the contract for the other and vice versa. This is a very empowering pattern. Because you recognize that you need some room in which to evolve, and so do they. And then you give each other this room. While being totally aligned on the goals that are important to both of you — because you know yourselves, and know what you need and want (at least the most important stuff).
The struggle #
It’s not easy to find this balance. It’s especially difficult to find this within yourself. The secret is that if you can figure this out inside of you, it will make all the other relationships much easier to form and manage and evolve. You might think that you have to work really hard and have to do things in order for some relationships to work; this is a signal that something is wrong. The work that you have to do is — just be yourself, and you have to know who you are and what you want and need. The rest takes care of itself.
Show yourself in the right light, your light, and that is the work that you do all the time — whether it’s with self, or with anyone else.
To giving ourselves (and others that we are in relationships with) this space to evolve and connect closer to self and each other!
👀 Watch Rust 🦀 live coding videos on our YouTube Channel.
📦 Install our useful Rust command line apps usingcargo install r3bl-cmdr
(they are from the r3bl-open-core project):
- 🐱
giti
: run interactive git commands with confidence in your terminal- 🦜
edi
: edit Markdown with style in your terminalgiti in action
edi in action