Software Development = Growing an Organism

In college I had a wonderful art teacher named Jewett Campbell. He was a modernist painter, and he taught us to see our paintings as visions that emerged from the canvas. At every step of the way, we were told that our paintings must always have a kind of architectural solidity – a compositional wholeness.

We were told to start a painting with the most important macro-features, and gradually fill-in the details, catching the basic overall scheme within the first few strokes. And we were taught to appreciate the techniques of post-impressionist Paul Cézanne.


Cézanne would often stop a painting, leaving large areas of the canvas empty. Apparently, he could stop working on a painting at any time, and the integrity of the composition would be solid; balanced. The composition would hold up. Leaving so much raw canvas was Cézanne’s way of inviting the viewer’s inner eye to fill-in the rest.

Little did I know after studying Cézanne that…decades later…I would see software development in the same way.

Meditate on the Organic Whole

Kidney transplantI don’t know about you, but as a developer, I really hate it when a software project gets pulled apart, with large components being rendered inoperable, while key parts are re-written. Would a surgeon kill a patient in order to do a kidney transplant?

Cézanne would never neglect one part of the canvas in order to obsess on another part. The big picture was always kept in his mind. Like a Cézanne painting, a body of software should be seen as a living being – a whole.

Now, let’s talk about chickens.

How is Cézanne Like a Chicken?

You see: a painting by Cézanne is like a an organism whose genes – whose full potential – is present from the very start.

Consider the way an embryo grows into an adult. The embryo of…say…a chicken, is a living thing; a moving, functioning, eating, breathing animal. At every stage of its growth, all of its genes are present. By the time it hatches from the egg, pretty much all of its internal organs exist in some rudimentary form.


(BTW – the picture above is actually a penguin. I think it’s kinda cute, don’t you?)

Usually, when I start a new project, or work with a team to decide on how to get a project started from scratch, I try to get a sense of what the main components will be.


Sometimes, a key component is sketched-in as a stub, like a splotch of gray-blue in a Cézanne painting that shows where an important cloud will be filled-in later. This cloud’s looming presence will set the mood and provide a compositional counter-weight to the mountain on the other side of the scene.

Oops – I forgot. We’re talking about chickens.

So, what if we considered the vital components of a software system to be the organs of an animal?


Are there other people who like to use biological metaphors when talking about software development? You bet:

Biological Metaphors in the Design of Complex Software Systems

Structural biology metaphors applied to the design of a distributed object system

Biological Inspiration for Computing

Here’s a piece on the Organic Metaphor, where the author says, “Industry pundits have taken to calling the process of software design “system architecture.” They borrow, of course, from the ancient and time honored tradition of construction.”

Later, the author says, “My experience is that the best programs aren’t designed. They evolve.”


600px-FallingwaterWrightLike building architecture, the organic paradigm is the most resilient, most evolvable, most sustainable way to ensure growth and longevity in software systems.


Organism = “Organ” + “ism”

“Modules” in biology are described by [Raff, R. A. 1996] as having…

  1. discrete genetic specification
  2. hierarchical organization
  3. interactions with other modules
  4. a particular physical location within a developing organism
  5. the ability to undergo transformations on both developmental and evolutionary time scales

Let’s look at these five requirements in terms of software development:

1. discrete genetic specification:

I’m tempted to compare this to Design. However, software rarely begins with a known genetic code. Perhaps “the evolution of a new species” is a better metaphor than “the development of an individual”.

In other words: the genetic blueprint of a software organism is pretty much guaranteed to evolve. And programmers are better off letting that evolve through prototyping, design iteration, unit testing, and user-testing  – especially in the early stages of its life.  

2. hierarchical organization:

Classes, Encapsulation, Method-calling, Inheritance. OOP OOP a DOOP.

Earth’s Biosphere invented Object-Oriented Programming before we came along and gave it a name.

My liver performs certain functions, and those functions are different than the functions that my kidneys perform. My organs communicate with each other using arrays of biochemicals. 

3. interactions with other modules:

Data Flow, API’s, Interfaces

4. a particular physical location within a developing organism

This may only apply to visual code editing and file directory access. Software is made of bits, not atoms. We have to make it appear that it occupies space and time in order to bring it into existence. 

If the software gets deployed in a distributed physical environment (a spacecraft, a smart house, or among an internet of things), then physical location does indeed apply. In this case, we’re not just talking about software anymore.

5. the ability to undergo transformations on both developmental and evolutionary time scales

Amen Brother!

That last one is the punch line. Besides having a healthy birth, how do we design software to scale across the development cycle? How do we make it evolve organically as teams of programmers come and go, or even as companies and open-source communities merge and transform?


I think mother nature has many more clues.


By the way, you may prefer to think of a body of software as behaving more like an ecosystem than an individual organism. Although, I would suggest (being a fan of Gaia Theory) that ecosystems are really just super-organisms.


Software is the most versatile, plastic, and evolvable brainchild of Homo sapiens. It will probably not go away, and it may even outlast us. In fact, software could even eventually become a new living layer on Gaia. It might have to be put to use to monitor and manage the health of the planet (as well as continuing to help people find funny cat videos).

An era of autonomous, evolvable software is predicted by Hillis, Kelly, Koza, and many others. But fully sustainable software – as a new digital species – won’t come about for a long time. Software is in its adolescence. It is still in its growing pains.

Immortality: Can Humans Attain Eternal Youth And NOT Destroy the Planet?

Why are humans so obsessed with immortality?

Can humans ultimately achieve immortality?

And can immortality be achieved while still maintaining the health of the planet? In other words: can we avoid the scale of human population growth that would turn us into a seething viral infection on Earth’s skin that completely destroys it? (or, more likely, destroys us?)

The key to answering these questions is to redefine “immortality“.

Let’s start with Neoteny – a biological phenomenon in which traits of youthfulness in a species are extended into adulthood. Humans have pronounced neoteny, and there are several theories as to why this is the case, including some theories that claim that a longer period of learning, play, exploration, and creativity (features of youth) gave Homo sapiens an evolutionary advantage. The fact that humans continue to actively learn throughout life can be seen as a kind of psychological neoteny.

Given this biological essence, this genetic fact of our existence, one might conclude that we – as a species – should have a fondness for youth.

Indeed, we are obsessed with it.

Our Eternal Offspring

Now consider that humanity has created a huge brainchild which consists of culture, art, writing, technology, and the internet. This offspring of humanity extends beyond our physical selves and into our collective future. Culture is self-perpetuating, after all. The more we engage in the meta-world that we have created, the more we notice that it lives on while our physical selves grow old and die. And I believe that we are not having the same experience as our primitive ancestors, who preserved oral traditions as told by their ancestors, and built stone edifices to last thousands of years. I’m talking about something different: computers and software extend the human mind in a new way.

Extensions of Our Personal Selves

CatherineSoftware technology and the internet are forming external versions of our selves – beyond mere portraits or memoirs. Our individuality and personas are being increasingly articulated outside of ourselves. It is quite possible that within a few decades it will be commonplace for FaceBook pages, and other records, expressions, and creations of our lives, to be archived for prosperity. Personal digital preservation is a fact of our times, and it is becoming more sophisticated and thorough.

I used to think a lot about avatars in virtual worlds. That fad has started to pass. And yet, some avatar-like versions of ourselves – which may include software agents based on our personal styles of thinking (and of course shopping) – could become a core feature of future FaceBook-like services. Our identities are gradually being fragmented and distributed into many digital forms – often in ways that we are not aware of. It can have subtle effects on consciousness – even diluting the locus of consciousness – although it is too soon to feel the effects – or to articulate it. This idea is explored in Brian Rotman’s Becoming Beside Ourselves.

Total Brain Upload?


I have just as much criticism of Ray Kurzweil’s vision of the future as I have admiration for his hard work at trying to build a better world. One of his more intriguing explorations is how to upload an entire brain into digital form so that one can live forever.

Uh, “Live” forever?

The very claim that this could be achieved is fraught with logical problems, even contradictions. In the absence of a body, how can a brain actually experience reality? (much less, a digital copy of a brain). One answer is that our bodies, and thus our senses, will be “simulated” using virtual reality. Okay, I can see how this might be achieved. But, having spent almost a decade developing virtual world software in startup companies, and having done academic research on the subject, I would say that this will be even harder than digitally uploading a brain. The unfathomable task of creating a convincing simulacrum of reality (forever) makes the task of a digital brain upload seem like a walk in the park. The Matrix will be fiction for a long time before it becomes fact – if ever.

The Aging Mind

Whether or not you believe in the possibility of a digital brain upload, you are more likely to agree with the following:

As we age, the stories of our lives, our memories, and other intangible aspects of existence attain more importance. Aging people tend to have an increased spiritual sense. The physical world – with all its entropy (and aches and pains) gives way to something like a virtual world: the realm of the mind. (Unless you become senile, in which case, you’re screwed).

santa-claus-athleteDoes an 80-year old man have much reason to mentally explore techniques of snowboarding? Or new ways to have sex on a trampoline? My guess is…not. But I may be wrong. My 80 year-old neighbor might think about trampoline sex all day, every day, and never tell me (I prefer not to know anyway).

But I digress. It is only the year 2013 after all. A hundred years from now, medical science will have made huge strides. In the future, sex at age 80 might actually be as good as sex at 30. And sex at 150 might actually be as good as sex at 100 (if you can imagine that. I choose not to dwell on the details).

What s the Purpose of Medical Technology?

Is medicine all about prolonging life, or is it all about making us healthier? Many of my friends believe medicine should be about making us healthier. What good is living longer if you’re miserable? Actually, being healthier has a side-effect of longevity – so perhaps these two things go hand-in-hand.

…which finally leads me to the core problem: More people…living to the age of 150…means more mouths to feed. Our planet can only feed so many mouths.

So: if humans insist on extending youth (and by implication: age (and by implication: population size (assuming we still insist on making babies))), how do we keep ourselves from turning into Earth’s pesky skin infection?

Answer: immortality will have to be reserved for the mind; not for the body. And the reason is this:



Evolving Our Digital Selves

Here’s my wacky, quaky idea:

“Death” as we know it will gradually shed its absolute status. It will start on a path similar to other age-old concepts like “intelligence”, “God”, and “consciousness” – all of which are being chipped away and blurred, as science, technology, religion, and the human experiment advance.

Personal digital preservation seems to me as an inevitable evolution. Data storage is becoming cheaper all the time, and the desire to retrieve memories, archives, knowledge, and data will continue. My grandmother’s death came as a shock to my emotional life. In the future, there may be a lot more left of one’s grandma after she dies. Just watching a video of her recounting a story is enough to bring back a little piece of her – at least for a moment. Consider that digital preservation might soon include artificial intelligence algorithms, and one might begin to imagine asking your virtual grandma to tell that story about dad’s fist car.

In the future, we won’t “believe” that we are actually talking to grandma, any more than we “believe” that our computers are thinking. Eventually, it might not really matter.

We invented virtual reality as a plaything. As long as we insist on living forever, virtual reality will become a necessity. It is what we will use to achieve the experience of immortality…rather than outright physical immortality.

Otherwise, Earth will decide she’s had enough of us, and shrug us off – like the pesky little germs that we are.


The Case for Slow Programming

My dad used to say, “Slow down, son. You’ll get the job done faster.”

I’ve worked in many high-tech startup companies in the San Francisco Bay area. I am now 52, and I program slowly and thoughtfully. I’m kind of like a designer who writes code; this may become apparent as you read on :)

Programming slowly was a problem for me when I recently worked on a project with some young coders who believe in making really fast, small iterative changes to the code. At the job, we were encouraged to work in the same codebase, as if it were a big cauldron of soup, and if we all just kept stirring it continuously and vigorously, a fully-formed thing of wonder would emerge.

It didn’t.

Many of these coders believed in the fallacy that all engineers are fungible, and that no one should be responsible for any particular aspect of the code; any coder should be able to change any part of the code at any time. After all, we have awesome services like github to manage and merge any number of asynchronous contributions from any number of coders. As long as everyone makes frequent commits, and doesn’t break anything, everything will come out just fine. 


You can’t wish away Design Process. It has been in existence since the dawn of civilization. And the latest clever development tools, no matter how clever, cannot replace the best practices and real-life collaboration that built cathedrals, railroads, and feature-length films.

Nor can any amount of programming ever result in a tool that reduces the time of software development to the speed at which a team of code monkeys can type.


The casualty of my being a slow programmer among fast programmers was a form of dysrhythmia – whereby my coding rhythm got aliased out of existence by the pummeling of other coders’ machine gun iterations. My programming style is defined by organic arcs of different sizes and timescales, Each arc starts with exploration, trial and error, hacks, and temporary variables. Basically, a good deal of scaffolding. A picture begins to take shape. Later on, I come back and dot my i’s and cross my t’s. The end of each arc is something like implementation-ready code. (“Cleaning my studio” is a necessary part of finishing the cycle). The development arc of my code contribution is synonymous with the emergence of a strategy, a design scheme, an architecture.

And sometimes, after a mature organism has emerged, I go back and start over, because I think I have a better idea of how to do it. Sometimes I’m wrong. Sometimes I’m right. There is no way to really know until the organism is fully formed and staring me in the face.

Anyway, back to the cauldron-soup-programmers. The problem is this: with no stasis in the overall software ecosystem – no pools of stillness within which to gain traction and apply design process, how can anyone, even a fast coder, do good design?


Any coder who claims that fast programming is the same as slow programming (except that it’s fast), doesn’t understand Design Process. For the same reason that many neuroscientists now believe that the fluid-like flow of neuronal firing throughout the brain has a temporal reverberation which has everything to do with thought and consciousness, good design takes time.

The Slow Programming Movement

According to Wikipedia: “The slow programming movement is part of the slow movement. It is a software development philosophy that emphasises careful design, quality code, software testing and thinking. It strives to avoid kludges, buggy code, and overly quick release cycles.

Wikipedia also says this about “Slow Software Development”: “As part of the agile software development movement, groups of software developers around the world look for more predictive projects, and aiming at a more sustainable career and work-life balance. They propose some practices such as pair programmingcode reviews, and code refactorings that result in more reliable and robust software applications.”

Venture-backed software development here in the San Francisco Bay area is on a fever-pitch fast-track. Money dynamics puts unnatural demands on a process that would be best left to the natural circadian rhythms of design evolution. Fast is not always better. In fact, slower sometimes actually means faster – when all is said and done. The subject of how digital technology is usurping our natural temporal rhythm is addressed in Rushkoff’s Present Shock.

There’s another problem: the almost religious obsession with technology – and a fetish-like love for tools. People wonder why software sucks (and yes, it sucks). Software sucks because of navel-gazing. Fast programmers build hacky tools to get around the hacky tools that they built to get around the hacky tools that they built to help them code.

This is why I believe that we need older people, women, and educators INSIDE the software development cycle. More people-people, fewer thing-people. And I don’t mean on the outside, sitting at help desks or doing UI flower arranging. I mean on the INSIDE – making sure that software resonates with humanity at large.

I’m Glad I’m not a Touch-Typist.

A friend of mine who is a mature, female software engineer made an interesting quip: “software programming is not typing”. Everyone knows this, but it doesn’t hurt to remind ourselves every so often. Brendan Enrick discusses this. The fact that we programmers spend our time jabbing our fingers at keyboards makes it appear that this physical activity is synonymous with programming. But programming is actually the act of bringing thought, design, language, logic, and mental construction into a form that can be stored in computer memory.

My wife often comes out into the yard and asks me: “are you coding?” Often my answer is “yes”. Usually I am cutting twigs with a garden clipper, or moving compost around.

Plants, dirt, and clippers have just as much to do with programming as keyboards and glowing screens.

We are transitioning from an industrial age and an economic era defined by growth to an age of sustainability. Yes, new software and new businesses need to grow. But to be sustainable, they need to grow slowly and with loving care. Like good wine. Like a baby.