Choosing kale
Chatting with my friends about choosing developer frameworks, we accidentally arrived at this kale metaphor. It sounded witty and fun, so I’ll try to unpack it as best as I can. To begin, I will apply the value triangle lens from a while back, going over the edges of the triangle. I only need them as examples of the improbable extremes. What’s up with all the triangles in my posts lately?
A framework that favors the user/ecosystem edge will present itself as a promise of a high-minded idea, then quickly reveal a toy upon a close examination – kind of like one of those fake fruits arranged on a dinner table to spruce up the interior. As a child, yours truly once was lucky enough to taste one of those fruits and learn a valuable lesson about appearances. Yum, stale wax.
Building on the tasting metaphor, the combination of business and ecosystem value usually produces frameworks whose taste is best described as … cardboard, I guess? There’s definitely important ingredients like fiber in there, but the dietary value and enjoyment are nigh nil. Large companies tend to produce these frameworks for internal use and almost without fail, the quality of their developer experience tends to wind downward with time. These frameworks aren’t picked. They grow in place.
When a framework sits on the edge of user and business value, it usually tastes like candy. It’s downright addictive to use and makes everyone look good. Sadly, as we know from the value triangle discussion, the consequences of this sugar high are usually borne by the ecosystem – which eventually gets back to users. The long feedback loop of ecosystem effects creates a double-hook: if I only plan to stay on this team for a couple of years, there aren’t any downsides for me. I can just pick the hottest framework I like. Let the successors sweat the incurred debt.
It is my guess that when trying to find a framework that will work well for a team in the long term, the prudent choice will taste something like kale. Like the nutritious leafy vegetable, it won’t seem like an easy pick compared to other choices.
Such a framework will tend to look a bit boring compared to the other contenders, less opinionated. Instead, it will likely carefully manage its cost of opinion in relation to the underlying platform — and as a result, keep the papering over the platform's rough edges to a minimum. Expect a couple of wart-looking things here and there. Make sure they are indeed the outcome of a well-budgeted opinion. Keep in mind the cardboard extreme – a good-for-you framework doesn’t have to taste bad.
The values of a kale framework will likely point toward concerns around the larger ecosystem, rather than directly focusing on quality of the developer experience. This is usually a good kale marker: instead of promising how great the taste will be, there will be focus on long-term health. Of course, please do the due diligence of taking the framework for a spin and make sure it’s not just a decorative ornament. Give it a few bites to ensure it’s not made of wax.
The kale-like choice may also be somewhat out of alignment with the team’s current developer practices. Misalignments don’t feel great. However, if you are looking to improve how your organization ships products, a framework is a powerful way to influence the development norms within the organization. In such cases, the misalignment is actually a tilt that steers it toward desired outcomes. For example, if my team is currently stuck in the anti-pattern of erecting silos of widget hierarchies for each new app, choosing a framework that encourages shared components might seem eccentric and inefficient, but eventually lead to breaking out of stuckness.
I hope these musings will help you generate some insights in your next search for the right framework. And lest I succumb to the normative voice of a recommender, I hope you use these insights to find your own definition of what “kale” means in your environment. May you find the strength to choose it.
🔗 https://glazkov.com/2022/03/02/choosing-kale/
Awareness of interoception
Recently, I have been fascinated by the wonderful and mysterious part of being human – our interoceptive system. It’s this thing that we all have, but to which I didn’t pay any special attention. The interoceptive system is how we experience what happens inside of our body.
If we sit very quietly and try to draw our attention inside, we can start noticing that we can perceive all kinds of things going within us. If we believe Antonio Damasio, the complete set of these experiences — or what we call feelings – plays a critical role in how we experience the world outside, how we show up, and indeed who we are. Even though it takes skill for us to consciously notice our feelings as distinct experiences in various parts of our body, our mind is well-familiar with these signals, constantly and seamlessly relying on them. Things that prick our fingers feel bad, as well as things that are too hot or too cold.
What I found particularly insightful is that our memories contain these experiences as well. Remembering an event when something bad happened actually feels bad – the interoceptive track of our memories replays how we felt during that moment. This leads to a bunch of weird effects.
For example, we can be afraid of feeling fear. Let’s chew on that one together. Suppose I walked under a tree… face-first into a spider web. Yuck. I am not a fan of spiders, so my interoceptive system would immediately inform me that this is a scary experience. Next time I go near that tree, something odd will happen. I will have this inkling that maybe I don’t want to go under that tree. What’s going on? Turns out, upon seeing the tree, my memory of the encounter with the spider will helpfully pop up, and replay the dose of fear I experienced. I will probably explain it as “intuition” or “good judgment” to walk around the tree, but more honestly, I will be reacting to the experience of an interoceptive memory. I will be afraid of feeling that experience again.
Even more bizarrely, the whole thing is path-dependent: the new memory of choosing to walk around the tree will include the interoceptive experience of newly-experienced fear of feeling that first fear, and so on. This stuff can get rather gnarly and turn unproductive really fast. Maybe I shouldn't walk under any trees at all. Or staircases. Or covered porches. Spiders could be anywhere.
Of the many moments I am not proud of, there was that one time when I needed to give a colleague of mine some really uncomfortable feedback. We were sitting right across from each other, and I just needed to lean over and say: “hey, can we talk?” And I couldn’t. I just sat there, looking at my colleague’s back, paralyzed. I was overcome by the spiral of fear of feeling fear of feeling fear, folding over and over onto itself.
Another weird effect is a similar kind of vicious cycle of our minds collaborating with our body to rationalize negative feelings. If you ever woke up from a bad dream you couldn’t even remember and then had trouble going back to sleep, this will be familiar to you. The thing is, our minds are exceptionally good at association. Whenever our interoceptive system informs us that something of negative valence (that is, something that feels bad) is happening, the mind eagerly jumps into the fray, helpfully finding all the similar interoceptive experiences from our past. In doing so, those experiences are replayed, exacerbating our interoceptive state, which feeds back into our minds looking up more and more terrible entries in the great database of “crappy stuff that happened to us.”
If this resonates with you and you’re curious about how to put an end to this drama, I have both good news and bad news. I’ll start with the bad news. This stuff happens to us pretty much all the time and will continue to happen, no matter how rationally we aspire to behave. Feelings are us. The somewhat good news is that we can learn to be more aware of our interoceptive system and apply that awareness to reduce the intensity of the vicious cycles. I can’t stop my interoceptive system from blaring klaxons, but I can learn to react to them more productively. The whole awareness thing takes effort and practice, but seems to work – at least, in my experience.
🔗 https://glazkov.com/2022/03/03/awareness-of-interoception/
Polarity of intention, structure, and capacity
I keep coming back to the post from last year, where I tried to write down my understanding of the distinction between organizational states of consistency, cohesion, and coherence. It’s been a generative framing for many conversations. The thing that kept bugging me was that I laid the states out as a progression of sorts, from disorganized to coherent. A colleague insightfully pointed out that one could have coherent user experience even if it’s not consistent. This spurred an exploration into key ingredients of the state, which I present here for your perusal.
I already suggested before that the key attribute of coherence is the presence of intention. If we imagine an organization with strong intention about what it wants to accomplish, we can see how coherence will naturally emerge within it. Strong intention usually comes across as people roughly knowing where their organization is aiming and how their contributions fit into the picture. Weak intention will have a vibe of unmooredness, usually unsurmountable coordination headwinds. Both might have clearly stated missions, though in the former case, the missions will feel actionable and inspiring, and in the latter more like cartoonish slogans.
However, it didn’t occur to me until recently that cohesion also has a key attribute: structure. I am using the word “structure” in Peter Senge’s sense, as a broad descriptor for all things that comprise a functioning organization: the reporting hierarchies, the roles, the processes that make it go, and the culture that binds it all together. It’s this structure that makes the various bits and pieces that an organization produces cohesive. A team with strong structure will have the necessary means to coordinate cohesiveness of the outcomes, whereas weak structures will typically suffer from a “thousand flower bloom” phenomenon that ends in poor cohesiveness.
A similarly recent thought led to this notion that consistency’s key attribute is capacity. To define it a bit more, it’s not just the ability of doing something, but also the skill and the practice that accompanies it. It is fairly evident that the team’s consistency of product outcomes is only possible when they have enough skill and practice to apply it. If an organization’s capacity is low, its output will be at best random, occasionally striking gold – definitionally inconsistent. A high-capacity team will not have such issues. Usually, when I hear “engineering excellence,” the word “consistency” pops right next to it.
So I wonder if the three states – consistency, cohesion, and coherence – emerge from the mix of these key ingredients: capacity, structure, and intention. Though it seems like there’s a tension between them. It’s not like I can just will my product to be coherent if all I have is intention. Without capacity and structure, it’s just a bunch of grand ideas. Similarly, having the capacity is awesome, but if it’s capacity alone, the outcomes will feel like random noise. And finally, if all I have is structure, it’s an aimless zombie. I would guess that more likely, having all three ingredients, but favoring one or the other is what leads organizations toward their predestined states.
The presence of such trilemma indicates that there might not be a favored state, a static resolution of the tension. Instead, a team will likely find itself leaning from one corner of the triangle to another, experiencing a want of one of the two other states when it gets too zealous about one particular ingredient. Over-focusing on capacity brings a deficit of coherence and cohesion. Being too into structure diminishes coherence and consistency, and finally, pushing too hard on intention saps consistency and cohesion. And if polarities are hard, can you imagine navigating a three-body-problem equivalent of a polarity?
By the way, I don’t know if there’s a word for this polarity with three extremes. Is that still a trilemma?
CS Peirce famously noted that he seemed fated to think in threes, and there is the old saying that theologians think in threes and philosophers in fours (cf the 2 by 2 that consultants use). Also - on the fear of fear thing - I think this is a profound reminder that we all live in the past, too, and that it never really remains the past. Thanks for another great post!