Rhizomatic Thinking: A General Methodology for Problem-Solving
What is a rhizome?
In their book A Thousand Plateaus, philosophers Gilles Deleuze and Felix Guattari are inspired by a phenomenon studied in botany - the rhizome. Rhizomes are characterized by a spaghetti-like system of roots that spread horizontally underground. Turmeric, ginger, asparagus, and even weeds propagate in this fashion.
Beyond the world of botany, the concept of the rhizome can be used to describe a different way of thinking that contrasts how we have historically structured our knowledge and information. Whereas our thinking is often hierarchical (tree-like, or "arborescent" as Deleuze & Guattari say), rhizomatic thinking involves "ceaselessly established connections between semiotic chains, organizations of power, and circumstances relative to the arts, sciences, and social struggles."
Although arborescent thinking can bring stability and security in its resistance to change, it can be severely limiting when trying to process new information. If our current body of knowledge is overly hierarchical, it can limit how new information is grafted into our existing knowledge. The flow of information can be slowed or outright prevented in an arborscent system.
To provide a more concrete example, consider centralized vs decentralized networks. A traditional centralized network can exert control over what types of connections can be made and what information can be transmitted. This can be useful when sensitive information is involved and security is a priority, but this means that a few central nodes must handle incoming connections for all other nodes on the network.
Contrast this with a P2P network. In a decentralized network, each node acts as both client and server, thus maximizing the total possible connections that can be made (and thus the amount of information that can be created, combined, and transmitted). Not only does this remove the bottlenecks inherent in a centralized network, but the greater degree of redundacy in the network gives it a resilience against disruption. If one path or connection to a target server is disrupted, you can simply bypass the node and go through another one until you find a way through.
Applying rhizomatic thinking
Now that we've established what a rhizome is, I'd like to talk about how powerful this concept can be when applied. I sincerely believe that to be effective at solving problems, you need to internalize rhizomatic habits of thought (whether you call it 'rhizomatic' or by some other name).
When solving a problem, you may be starting at an arbitrary point - sometimes with little to no information. You may be lucky and be given an end-goal to pursue, but sometimes your desired outcome may be fleshed out over time or may change as you gain more information.
Following the rhizome, your first step is to make as many connections as possible. In my own work, this means interacting with any entities that are related to the problem. This can mean experimenting with relevant tools or packages, discussing the problem with anyone involved (whether it be users, other people working on the project), and researching concepts and related problems & solutions.
I try to map out potential directions to go in, creating multiple hypotheses and connections that will allow me to easily switch gears whenever I hit a roadblock:
This process of mapping and information-gathering should never really end when you are solving a problem. Your understanding of the problem and the corresponding mental map you've generated in your mind should always be shifting and changing as you gain more information about the problem.
As you explore the initial connections you've made, you may find that some require too much time and effort or they do not lead to feasible solutions. This is why it's crucial to be continually mapping and creating new connections - having as many options as possible means that you can maintain your momentum and easily switch to another path if one route is not feasible.
Examining the figure below, you can see that A did not work out, B was later discovered to branch out into another option (B2), which was found to have a meaningful connection with a previous branch C. And furthermore, another option D was also discovered, giving yet another option in case B, B2, and C did not work out:
I like to imagine this rhizomatic process of continous mapping as an informal implementation of Dijkstra's algorithm - you systematically walk through the connections of all nearby nodes (and their connections with other nodes, and so on) until you find some series of connections that gets you to your target in the shortest number of steps. But when thinking rhizomatically, a 'node' in this context can be almost anything - a design pattern, a Node.js package, a coworker. In applying the rhizome in this way, you maximize your ability to create connections with people, tools, and things and can thus become aware of new, innovative solutions to your problems.