Saturday, August 29, 2009

Imperfect Design

Is there such a thing called perfect design?

Time and time again the global software industry failed to deliver designs that worked in good order, delivered on time and within budget. Many projects failed either because they performed poorly, did not meet user expectations or they could not catch up with technological momentum.

There are historical reasons why software engineering projects failed more often than other types of engineering projects. In the past thirty years immense market demand on software as a result of exponential growth of cheaper synthetic memory availability (Moore's Law) created an avalanche effect known as the PC revolution. The tidal wave effects of the PC Revolution was immense and widespread. It did not stop at households. The collapse of the Mainframe Computer and consequent emergence of vast IP networks in the corporate landscape quickly followed. On top of that the Internet Revolution that emerged in the last two decades pushed competition to unprecedented levels.

Historical developments aside software engineering is also very different by its nature. Most notably software engineering blueprints are thousands sometimes millions of lines of code that can easily be erroneously constructed or ill-configured, inducing defects with much less chance of being detected due to difficulties of human brain comprehending code as opposed to say a suspension bridge blueprint. In addition there are vast number of mathematical possibilities in which you can construct a software program. It is like infinitely many and sometimes irregular ways of cutting a jigsaw puzzle, then recycling the pieces to make more puzzles.

So software engineering is a difficult discipline. Due to the factors we described above standard development and management practices of other engineering disciplines did not work out well when applied to software development. This led to emergence of the Open Source movement, and more dynamic development methodologies such as XP (eXtreme Programming) and Agile in the past decade or so.

What is common in these novel practices is that products are collaboratively, adaptively and continuously designed, developed and deployed in iterative cycles. Design evolves over time similar to biological evolution of species by Natural Selection.

In Nature no species is perfect at any given time. In successive and many generations species simply adapt to changing conditions or fail to adapt and become extinct. There is no perfection that warrants indefinite survival but a continuum of struggle we call survival by adaptation. There is no concept of an upfront design or designer yet alone a perfect one, in fact there is no beginning or end in the design process, design evolves indefinitely so long as it survives Nature's scrutiny.

Similarly in many Open Source projects there is no centralized vision of design (akin to Blind Watchmaker analogy). The design evolves by itself without a designer. Everyday thousands of coders worldwide collaborate on different parts of hundreds of software products similar to gene coalitions established within our cells. There is no seek for perfection, akin to the fact that perfection does not exist in Mother Nature. Resources can be deployed and utilized more efficiently by allowing mistakes rather than chasing an impossible Platonic vision of perfect design. In return product versions are released at a much faster rate with greater chance of seizing survival opportunities when they are exposed to users' scrutiny. This process is called Evolutionary Design.

To show my point lets look at Mother Nature's design process and see how imperfect it can be. The following is one of countless examples of faulty designs we inherit from our vertebrate lineage.

In this extract from The Blind Watchmaker, Richard Dawkins talks about how imperfect our eyes are from design perspective. Somewhere along the evolution of vertebrates a group of genes might have been copied in error but in a way not enough to jeopardize emergence of our species millions of years later.

"My second example of an evolutionary progression ... concerns the retina of our eyes (and all other vertebrates). Like any nerve, the optic nerve is a trunk cable, a bundle of separate 'insulated' wires, in this case about three million of them. Each of the three million wires leads from one cell in the retina to the brain. You can think of them as the wires leading from a bank of three million photocells (actually three million relay stations gathering information from an even larger number of photocells) to the computer that is to process the information in the brain. They are gathered together from all over the retina into a single bundle, which is the optic nerve for that eye.

Any engineer would naturally assume that the photocells would point towards the light, with their wires leading backwards towards the brain. He would laugh at any suggestion that the photocells might point away from the light, with their wires departing on the side nearest the light. Yet this is exactly what happens in all vertebrate retinas. Each photocell is, in effect, wired in backwards, with its wire sticking out on the side nearest the light. The wire has to travel over the surface of the retina, to a point where it dives through a hole in the retina (the so-called 'blind spot') to join the optic nerve. This means that the light, instead of being granted an unrestricted passage to the photocells, has to pass through a forest of connecting wires, presumably suffering at least some attenuation and distortion (actually probably not much but, still, it is the principle of the thing that would offend any tidy-minded engineer!)."
Evolutionary Design will continue to change the software engineering practice in a profound way. We will see fitter and better products emerging, satisfying complex and varying needs of demanding consumers.

On the other hand today software engineers must come into terms with the concept of imperfect design or design without a designer. This is a completely novel mindset that developers need to understand and adapt. In the Evolutionary Design era catching up adaptation cycles and focusing on delivery is far more important than chasing up an ideal design that warrants failure.

Thursday, August 27, 2009

Bad players

Every team's nightmare. Bad players.

Categorically they;
  • Think they know it all
  • Think they know the best
  • Think they are more intelligent than anybody around them
  • Think they are undervalued
  • Think there is one perfect solution to all types of problems
  • Think they can do a much better job if the whole thing is left to them
  • Think not knowing is a sign of weakness
  • Think asking questions is a sign of weakness
  • Think admitting mistakes is a sign of weakness
  • Think teaching people what they know is foolish and a sign of weakness
  • Think hiding problems is the right thing to do unless someone asks for them
  • Think being part of a team can not be fun, it is just an unpleasant burden
  • Think the team's goals are not more important than their personal agenda
  • Feel no sympathy for people who do not know as much as they do
  • Feel no obligation to share their knowledge with people who do not know
  • Think being a good team player is not going to help them being more competitive
  • Think being a loner and staying as a specialist will make them special
  • Think teamwork is the biggest threat to their existence
  • ...
The list goes on and on.

The bottom line is these people are wrong on all accounts we listed above.

What they maintain is a massive delusion about the world around them and about themselves.

Contrary to the impression they want to give about themselves these people are extremely vulnerable. That is why they are so defensive and alert to protect their individual position.

What bad players are missing is that fundamentally being a good team player is not a foolish and altruistic behavior as it seems, on the contrary it is the smartest and the most selfish behavior one could master dictated by our genes ever since human species tripled their brain size in the last two million years. Most of the elaborate complexity our brains has to deal with is about being social. Our species survived and became intelligent because we managed to exploit our social capacity better with bigger brains, not just because we were successful individual hunters or gatherers, but because we could harness the social environment to our advantage.

Good team players are good team players because they have a sharper realization and awareness of their selfish interests. In the long run they know they will benefit more from being a good team player than being a poor player. In the long run good team players always win.

Sunday, August 23, 2009

Addiction

Does it occur to you that as we once narrowly escaped from becoming couch potatoes while we were moronically zapping the tv remote control, since then we turned into e-zappers, the web browser replaced our tv, and the mouse replaced our remote control.

I thought I had made a smart move when I stopped watching tv and hooked into Internet instead. But to my agony nothing has changed much, I am constantly letting myself to the tide of my childish alter ego's curiosity, let my index finger makes semi-conscious decisions as I move from one hyperlink to another.

This is a huge problem as it brings no sense of achievement or completeness. Everything is cut half, nothing is finished, no article, no blog post is read to the end. There is ephemeral joy of addiction while I am e-zapping, but a sense of emptiness and loss of self when I get up and switch myself off from the virtual world.

There is something completely wrong about the way I use the Internet and I am going to change it. I believe there is a certain limit in the information load that we can comfortably cope with. At times we need space and focus to do our own number. Sometimes I tend to think that Internet is a monster, an information over-loader that needs to be harnessed by our consciousness before we let it to take over our ego.

Saturday, August 1, 2009

Why do we still have to rush?

Suddenly it stroke me, supposedly we live in an age of prosperity, technological marvels, more automation, yet why do we still have to rush? We have cars, automatic teller machines, automatic washing machines, dishwashers, internet banking, yet why do we still have to rush madly at work and in our personal lives. Shouldn't we be using more time for ourselves by now?

What is the point of this rush culture? Why do we have to pay the bill in exchange of our health, by suffering from stress related disorders, such as anxiety, high blood pressure, high cholesterol, and diabetes that no other species on this planet suffers from? Which generation will have the guts to change this foolish race?

It turns out that the more we create time, the faster we devour it. The capitalism's principle requirement, material growth relies on more production and more consumption in less time. Yet strangely we don't need the surplus, we don't need to be fat, we don't need big cars, most of the wealth that we managed to build and cost us our health and happiness during our lives, will be wasted when we die.

In Nature no creature can survive on wastage, the Nature's economy is merciless, you cannot survive if you are fat or you are inefficient in using your resources. Yet we humans are different. With our enormous cerebral cortex we learned that we can get away with wasting or creating surplus and live on that. We are the sole foolish victims of this system of extravaganza, this enormous charade of meaningless consumption that enables us to pity on ourselves. We madly produce, consume or waste materials that we don't need, and in due process we miss the point of life completely.

Incidentally I came across a video of journalist Carl Honore in TED, he talks about the slow movement. It is a cultural revolution against the notion that faster is always better. Carl Honore believes the Western world's emphasis on speed erodes health, productivity and quality of life.

Below, find Carl Honore's praise of slowness:

Interstitial Fragment Processor

Today I watched a TED video from an artist named Golan Levin who makes art that looks back to you. I found a particular work of him he called Interstitial Fragment Processor interesting because it directly relates to negative spaces, the central theme of this blog.





http://www.flong.com/projects/ifp