Tao Fu: The Way of The Code Monkey

AbacusI was going to write about some frustrations I had with the software development processes and functional roles used by a large multinational I was previously employed by. However just as I was about to put pen to paper, I stumbled across this ancient Chinese manuscript which managed to state the issues far better than I ever could. So here it is:

The Way of The Code Monkey

Transcribed By Bu Lian Lo Jic Circa 422 BC

The Birth of Fu

A long time ago in the remote Chinese province of Bar a young boy was born to a poor carpenter’s family on the first day of the year of the monkey. His parents in honour of this called him Fu, which in their local dialect means monkey.

Young Fu of Bar, or Fu Bar in the local cant, was an inventive child and spent his days in his fathers workshop sawing and hammering bits of wood together into useful devices that helped his parents around the house and garden. Word spread of this and soon people came from all over bar to buy his devices to help them with their daily chores.

On the first day of his twenty fourth year, once again the year of the monkey, Fu Bar had a strange dream. In the early hours of the morning he woke up suddenly and ran straight to the workshop and began sawing and hammering away. When his father came to the workshop later that morning he saw his son furiously working away and he asked what he was making that he needed to be up so early. Fu looked up at his father and said “I don’t know what it is I am building. I cannot say it in words. I cannot put it down on paper. I cannot tell you of my creation until it is created any more than you could tell people of me before I was born. All I know is that it’s in my head and that it will be done when it is done.” With that he turned back to his work and away from the mortal world forever.

For seven days and seven nights Fu worked without food or water only drinking cups of Ca Fien a local potent tea. His father sensing something great was happening did not interrupt him, and turned away all the regular visitors, leaving his son to work in peace.

At the end of the seventh night, as the full moon lit up the sky, Fu left the workshop carrying a strange device. He had a focused look on his face and walked straight past his parents as if they weren’t there. They said nothing, feeling the power of the spirit that moved within their son, and watched him as he walked out to the garden holding his strange device between his hands and sat underneath the lotus blossom tree where he had played as a child.

For another seven days and seven nights Fu sat still with only his hands moving as they went carefully back and forth across his new device. All the while he mumbled strange incoherent words while in his mind a whole new world unfolded, a world of pure logic, where divine harmonies sang in rhythmic streams of pure information, where complexity ultimately gave way to simplicity, where one and zero intertwined to became all, to became everything.

On the morning of the seventh day just before the sun rose above the distant hills, Fu rose to his feet. The silent crowd of onlookers that had now gathered inhaled expectantly, the wind died, animals stopped in their tracks in distant lands, stormy seas far away became calm and the whole world paused. Then as the Morningstar dimmed and the suns first rays fell upon the face of Fu, he achieved enlightenment and held aloft his abacus, the world’s first computer, and said aloud “Hello World”; he had written the worlds first computer program.

Then someone in the crowd said “what’s he on about, sounds like b#@lox to me”, and with that first derision he smiled and became the world’s first geek, and ascended to the heavens.

The Teachings of Fu

Over the years that followed Fu descended many times to earth from the realms of pure logic above to teach others in their search for enlightenment, and eventually he founded the Order of Fu. Sometimes known as programmers, its members are a group of elite masters who try to reveal the simplicity that lies behind the illusion of complexity. To guide them in this are the teachings of Fu or Tao Fu.

Tao Fu can mainly be understood by reading the Conversations of Fu a set of lessons that Fu gave to the initiates of his order. One such conversation is transcribed here in full.

Initiate:

Master what is the true nature of the world?

Master Fu:

The world is an endless fountain of happiness for it is a problem to be solved that can never be solved.

Initiate:

WTF?

Master Fu:

By this I mean that as a code monkey your happiness comes from attempting to solve problems. Thankfully as most people know the universe has an infinite supply of problems which means an infinite supply of happiness.

What most people don’t know however, especially code monkey employers, is that not one of these problems can truly ever be solved, and believing that it can is what causes sadness and heartache. You see every problem has an infinite amount of sub problems, and so do each of those sub-problems and so on in gloriously infinite recursion until you hit the great stack overflow.

The only way to solve a problem is to know that it can’t be solved. Thinking that you can solve a problem leads to strange behaviour such as trying to plan every step of your solution in advance, trying to estimate exactly how long it will take you, and thinking that your customer will ever be completely happy with your solution. Thinking you can solve a problem is deciding to fail before you even try.

When you are a Tao Fu master and know a problem can’t be solved you approach it differently. Knowing that that a full solution will be an infinite journey, you see the foolishness of planning too much for the unknown. You know that you will never know when it will be completed, so you only give estimates for the tiny bit that lies right in front of you. You know that the only way to solve the problem is to solve it partially. You know that on day one you should just lay into it, and keep evolving and changing your solution, not until you’re finished because that day will never come, but until your customer is happy enough with it. A solution has no end; it is a journey upon which you can travel to the end of time, should you choose to.

In the future this approach to problem solving may come to be called fancy names such as “agile development” or “extreme programming” or it may become part of “RUP” with fancy diagrams and expensive words, but in my home village we called it common f#@king sense!

Initiate:

Master that sounds great but I’m still unhappy in my job. I get to write code, but to be honest I don’t really feel like I’m solving any problems. I used to do well in my previous jobs but somehow in this job I just don’t feel like I’m contributing. I know its mainly just a support and maintenance role, but sometimes I just feel like a butt-monkey rather than the exalted code monkey I long to be.

Master Fu:

Ah So, this is a common problem. I imagine that in your job they see problem solving as something akin to an assembly line whereby they have foolishly enforced a strict division of labour with analysts, architects, and butt-monkeys like you. They may even believe that the reason developers leave is because its just a support and maintenance role. What they don’t realize is that support and maintenance has a huge amount of happiness inducing problems if only the developers were allowed to really solve them.

To attempt to solve a problem requires a holistic knowledge of the problem, and this cannot be gained when you are treated as a lowly butt-monkey ordered to implement the prescribed solutions of others, without having ever met the customer or really knowing what they do, and without having had any input into the analysis or architecture of the problem.

You see analysis, architecture, and development are three sides of the same coin (eh…emm…. we had funny coins in china). A Tao Fu master needs to wear all three hats to properly solve a problem, and thus find happiness. While in complex situations a full time business analyst with lots of developer liaison, is often required, a full time architect is never required, except perhaps at a very high level which spans multiple projects.

Architects are Tao Fu masters who have gone to the dark side. They are code-monkeys who realized that due to the structure of their companies environment they would just keep getting the crap work, so they sold out, and now they do the interesting stuff and then when they’re bored with it they cast it off to the gaggle of butt monkeys in the cage next door, many of whom fulfilled an architect role in their previous jobs and didn’t realize their new employer thought it was separate job rather than just a function of a developer. You see the butt-monkeys employers think architects are some kind of higher-level developer and that they know more than other senior developers. What all developers really know however, is that after a certain amount of experience is gained, all developers are really equals, all that really differs is domain knowledge in different technologies and that is better shared by keeping them all together rather than creating artificial hierarchies.

You see an architect is a developer who doesn’t code and a developer who doesn’t code looses touch with the realities of development, and therefore eventually becomes a bad architect. A butt-monkey is a developer who doesn’t architect, and developer who doesn’t architect, even a grad, is a developer who can’t really solve problems, and that leads to unhappiness. Ultimately an unhappy butt-monkey will become a flying butt-monkey, and fly right out of his cage and far away.

Hopefully, young padawan, you don’t have architects on your team that have gone that far, but if you do you must act now to save them. Unfortunately though, its all too likely that your employer has had many flying butt-monkeys in the past, and those that are left might sprout wings any day now, unless of course you teach your employers Tao Fu.

May the abacus be with you!

Leave a Reply