Archive for June, 2011

Evolution: Nature versus IT

June 20, 2011

I’ve always wished I had an eye on the back of my head every time I attempted a shot on goal while playing soccer, and someone slide tackled me from behind and striped the ball away. I always wished that my legs and feet moved as quick as my eyes blink. Instead of accepting the lack of human “features”, I got to thinking about why evolution stopped here. We always came to understand evolution as a process through which living organisms evolved into the next level of their species. What is not always talked about or instantly realized is that evolution is not really “the” process of evolution. It is rather a process of acquiring just enough “features” to allow the species to survive and continue to reproduce. It is a concept of survivability (a very specific and limited type of evolution). That is why humans, like me, never needed to have an extra eye grow out of the back of their heads just to be better at playing soccer. Soccer, despite being a great sport, is not a necessary factor in evolution. Which I may disagree with because I am a soccer fanatic, but aside from the point (distraction susceptibility is not a factor in evolution?), evolution stopped at what was absolutely needed for the human kind to survive. And a third eye was not a main consideration. It is a great concept and a good way of looking at things. However, coming from the digital world myself, it made me think: is man made evolution more efficient than nature controlled evolution?

What is efficient? New features added in order to lower risks of extinction may be considered efficient. But it is not efficient enough. Thus, not efficient. Why not have more of a leathery skin to avoid the risks of abrasion? Maybe because skin injuries are not devastatingly dangerous to the human kind. I always thought to myself, what if software delivered just enough to make the software work? And just freeze the version that works and fire your entire IT team afterwards. This raised two interesting questions in my mind:

1. Why is software evolution different from nature’s evolution?

2. Why is it that nature is “better” at introducing less “buggy” product while software tends to be relatively very buggy in comparison?

So, I decided to get off the IT wagon for a second and try to understand why nature stopped at providing just enough to survive while software continues to innovate beyond necessity. I thought to myself; well, maybe they are not different. Maybe, software’s “new” features come out of the necessity for survivability. After all, there is much fiercer competition among software providers than, well, nature evolution providers. Nature has a monopoly on evolution, and hey, if you don’t like the fact that you cannot have a third eye on the back of your head, go to another planet, that runs its own rules of evolution based on a different chain of accidental environmental events that led their species to where they are today; unlike here where soccer players lack the ability to see all around them at the rare occasion of facing the goal one on one. So, software evolution is exactly like nature evolution, except, it has the requirement of having to evolve much faster than nature. It has to. To survive the competition. So, why don’t I have an eye on the back of my head? Simply put, because I cannot go buy another three-eyed head from another evolution store.

What about question 2? Why does nature manage evolution better than we manage software evolution? You can argue that software is always introduced with more bugs than nature introduces with a new feature. Take eye lashes for example. When eye lashes release 1.0 became public hundreds of thousands or more years ago, do you think it was buggy? Maybe hair was too long it kept scratching the eye? Maybe too short to prevent sand from attacking the eyes? Maybe too thick which got the eye lids tired from blinking the eyes with such heavy weight lashes? Maybe a different color than other parts of the body? Etc. Well, we weren’t there to know for sure, but we can conclude that eye lashes today are pretty much perfectly designed (putting the God discussion aside for now). Why can’t software be that, well, perfect? So, I got on the IT wagon again and thought; well, if I were the designer of a software application and was asked to evolve it over millions of years by introducing one small change at a time, then maybe I will create the perfect software? After all, it is not really a fair comparison because evolution is allowed to introduce a small change once every some hundreds of thousands of years. This allows it to quickly fix the small release over a much longer period of time. So, if I can introduce one feature at a time, separated by 100,000 years, then I can definitely perfect it like nature did, and maybe even better. Think about it, your new feature is being tested by millions of samples (unit tests or people) in a real practical environment for many many years, delivered in a perfectly authentic agile process. And the change is so small that it can immediately be fixed without major changes. So, maybe nature is not better than us after all. Maybe we possess the same power to evolve things just as perfectly. I would argue that we can even be better because unlike nature, we don’t carry the element of experience so that our next evolutionary step can be better calculated. Nature has existed and controlled evolution over its various courses. Software is not only controlled and evolved by mortal beings, most of the time the developer leaves to another company with a different plan and type of evolution every two or three year cycle. So, without our limited time of control, and the ability to operate without pressure from competition, we may be better at evolving software than nature at evolving us. Mind you I am still on the IT bandwagon drinking the coola-IT.

In my opinion, the lack of competition in the natural evolution field changes the name of the game from evolution to survivability. While software is purely evolutionary. To continue to be in the competition, software has to go beyond what is necessary to what is convenient. Which makes it more efficient as a tool. If my program needs a third eye to allow it to function “better”, I will add an eye. If a woman wanted to go through pregnancy in two minutes and get back in original shape immediately, I can and will do that (I remember those days when I had time for Sims). While nature is stuck in the very much, very mechanical process of having the baby grow in the womb and pushing all other poor organs out of the way, and stretching others for an extended 9 months period. We are used to it. We grew with it. It doesn’t kill the mother. We believe it is the only way, but it is inefficient.

Maybe humans will be better and more efficient at evolving computer brain than nature was at evolving humans’ brains?