One of the primary drives programmers have is to uncover and use the right abstractions. That’s also one of the things that draws people to functional programming: the abstractions we use in FP are fundamental, atomic and based on maths and logic.
The main reason we seek abstractions like this are so that we can decrease cognitive overhead by Chunking knowledge into composable, related concepts.
What if you could use the same principle, and even some of the same abstractions, to reason about people and teams delivering software?
So what might some fundamental abstractions look like for teams and the process of shipping code? What we’re looking for here are some mental models 1
What makes a good abstraction?
Before we dive into this I want to take just a short detour to put some constraints around what benefits we want to accrue from the mental tools we choose.
Good abstractions should be:
It’s no good building a mental tool set that isn’t cohesive. You want reasoning tools that accumulate utility as you add them together - not trip over each other. This is one of the reasons I really love the Haskell programming language by the way.
We also want abstractions that are useful in as many different domains as possible.
The principle of strategy is having one thing, to know ten thousand things
The OODA loop
Col. John Boyd’s OODA loop is one abstraction that fits the bill:
OODA Stands for Observe, Orient, Decide act. Although it’s often superficially described as such, it’s not really a loop. It’s more of fractal hierarchy of processes that are navigated to make decisions and take actions.
When building an understanding of the OODA loop and how to apply it, we have to pay particular attention to the Feed Forward, Feed Back and Implicit guidance & Control lines.
Patterns of Conflict
Survive, survive on own terms, or improve our capacity for independent action.
The competition for limited resources to satisfy these desires may force one to:
Diminish adversary’s capacity for independent action, or deny him the opportunity to survive on his terms, or make it impossible for him to survive at all.
Observation is the part of our interaction where we become aware of changes in the environment. This sounds simple enough, but in reality there’s a lot we have to consider. Nothing enters our awareness without having been filtered. This is where the Feed Back and IG&C lines are so essential.
Our current focus (both what we’re acting on now and our implicit cognitive biases) have a huge bearing on what bubbles up to our conscious attention. So bear in mind that what we observe isn’t necessarily the whole story of what’s actually happening.
Orient means to make sense of what we observe and put it into the context of what we already know or believe.
This is another huge opportunity for inaccuracy and bias. It’s also where you really need to start thinking about the hierarchy inherent in the OODA loop. Many of the things that enter our conscious attention don’t need to spend a lot of time here. If you’re working on something familiar, which you’ve practised a lot and don’t encounter and real novelty, this part of the OODA loop is pretty straightforward.
Picture this a bit like a comet passing a planet at a distance - it’s not going to be pulled too far off course by the planet’s gravity well.
It’s only when you encounter something novel, or something that is at odds with your existing model of the world where the fun really starts. This process is a bit more like a comet being pulled into an energy well. Depending how deep it goes it might be get whirled around a few times and spat back out, or even crash into the planet, changing its structure.
This is where one of Boyd’s most overlooked pieces of work comes in.
Destruction and Creation
To comprehend and cope with our environment we develop mental patterns or concepts of meaning. The purpose of this paper is to sketch out how we destroy and create these patterns to permit us to both shape and be shaped by a changing environment.
Destruction and Creation
D&C was a paper Boyd wrote in 1976 as he was figuring out what it really means to orient, and change mental models on encountering new information. It’s only 7 pages long, so I highly recommend reading it here: Destruction and Creation
I’ll write another article on D&C another time as it’s a fascinating work with a huge amount of depth.
Suffice to say for now that Orient is a hierarchy you travel up and down to varying degrees based on the novelty and impact of what you observe. If you’ve read Jeff Hinton’s description of Cortical Columns in On Intelligence you’ll have a pretty good idea what’s going on here.
Obviously the more fluid your mental models, the better you will be able to re-orient.
After we’ve Oriented on our observations of the world we need to decide what if anything to do about it. Again the temptation here is to view this as a linear predictable process. It’s not. Orientation could result in no decisions, or many. Decisions could even arise from the combination of many observations that cross over some kind of tipping point.
Equally, if you’re engaged in something that you know well, you can essentially skip decision (at least conscious decision) altogether and jump straight to action. This is where people who are exceptional in a field find themselves: flowing from observation to action without any friction in between.
Action is where we take what we’ve learned and try to effect a change in our environment. Again, this looks like a linear process, where it’s really not. Action can also be considered the start of OODA loop as some models of cognition hold that it’s the action that’s essential to start generating differences between our mental models and reality.
Whichever way round you think about the relation with the environment action is absolutely critical!
There are a couple of takeaways here which are important.
It’s not just about speed
Many descriptions of OODA talk about “doing it faster” that one’s opponent. This isn’t really what Boyd was talking about at (at least not completely) when he talked about getting inside an OODA loop. What I believe is more important is the process of making traversal of the loop more accurate and better quality. This is sometimes called Double Loop Learning 2 or meta cognition.
Contact with the environment is critical
What Boyd actually means about collapsing an opponent’s OODA loop is cutting them off from the outside world, and trapping them in an ineffectual orient-decide downward spiral.
Anyone who’s practised a combat art like Brazilian Jiu-Jitsu will know what this feels like. When you roll with someone better than you, every action you take (when you’re able to take one at all) becomes progressively less effective as you’re manoeuvred into a worse and worse position. They have access to a much higher fidelity stream of information due to their years of practice, and it’s translated directly into the right action without them having to think about it.
This is also what many companies do to themselves as they grow. People’s bandwidth is consumed with inward looking busy work and the company’s internal model is divorced more and more from reality. Blockbuster and Kodak are just two big names that allowed this to happen to themselves.