Ideas appear within my mind at the most unpredictable moments, and I am left wondering what the triggers are. This evening while cycling home from work an analogy appeared in my head by which I might better describe the complexity of my work to laypeople.
Perhaps it was the turning of the pedals - the repetitive nature of cycling. Perhaps a mundane activity releases your mind from it’s dominant activity, and causes a perspective change. I never studied psychology at college, so can never surmise in such fashionable terms as some of my friends - I cannot quote Freud, Chomsky, or Goeth.
So - the analogy. I have often struggled to describe “what it’s like” to be a software developer to friends and aquaintances, and felt I have never got the point across. I shall endeavour to correct that based on the thought that - quite bizarrely - appeared in my head this evening.
Imagine a tree. It is an old oak tree that has stood proudly in it’s corn field atop a hill for generations. Our ancestors walked and sat beneath it’s bows while enjoying countless springs, summers and falls. The tree has many large bows, which each have many thousands of branches. Each branch has many hundreds of twigs, and each twig has many acorns and leaves.
Laying on your back underneath the tree, you peer up into the maze of branches, and quietly take it in. You begin by focussing on the end of one branch. You can describe at length the twigs, and the leaves that hang from that branch. Without too much trouble you can describe the relationships between the leaves - this one is bigger than it’s siblings, that one has an acorn, that one over there is a darker shade than the others. At length you begin to abstract the tree. Each branch has many twigs. Each twig has many leaves. Each leaf receives sunlight, which is passed back to the twigs, and on to the branches, the bows, the trunk, and the roots.
If you open your view, taking in the wider scene, you can see all the leaves on the end of your branch at once. You can describe them as a group. You can “see” the end of the branch, and understand it. After a few more minutes committing it to memory, you may be able to describe it’s twigs and leaves to somebody who has not seen it.
Here’s the trick. Take in the entire tree. See every leaf. Every twig. Every branch. Describe all of their relationships, all of their nuances, the individuality of every piece. Understand the big picture - not as an abstract “tree” - know each leaf. Know how each leaf works, how it came to be there, what came before it, what will come after it. Know how changes to one leaf will effect others - how changes to a root will affect every leaf.
In a roundabout way, I have described the mental gymnastics required to work on a sizeable software development project, and the reasons for my gradual downward slide over the past months. You may often work on small, isolated elements of a project (describing a leaf), but at others you may need to “imagine the tree”, and these are the times that developers fear.
Hopefully you were able to make the jump with me between the tree and software development, and with a little luck the analogy will stay with you. Perhaps we have created a new analogy for complex systems - “Imagine the tree”.