The average experienced programmers inject as many as 10 defects in 100 lines of code, spending more than 40% of their development time finding and fixing defects.

There are many reasons for writing software in such an inefficient manner including inexperience, incompetence, and the intrinsic complexity of the problem to be solved. The most common reason is an inexplicable tendency to discard proven prescribed practices of systematic effort and indulge in practices that Watts Humphrey calls as those of 'American Cowboy Programmers'. This style is popular with even some experienced programmers and is characterized by a sporadic mixture of 'code-a-bit, test-a-bit' (called CABTAB) set of unplanned activities.

Many attempts have been made to stop such practices by introducing several organizational models, standards and certifications. The most effective of these have been the Personal Software Process and the Team Software Process of the Software Engineering Institute, as these address issues at the level of individuals and teams that develop software. The emphasis is on individuals planning their activities and working according to their plans. Such disciplined way of working has shown astounding results and those who for some reason have undergone such training and have seen their individual performance improve remain converted to that style of programming.

However, the crunch is in getting people to realize that there is a need to improve, to get them to undergo this training and to inculcate a discipline of self restraint against tempting short cuts that are actually counter productive.

There is a persistent delusion that software complexity can be overcome with some heroic intellectual effort. A kind of folklore romanticism exists amongst the software community that they are the intellectual cream of the society and can overcome all challenges by the sheer power of their brains. However, the evolutionary origins of the human brain suggest that it is not designed to tackle the challenges faced in software development. The mind is involved in sporadic switching between the real world problem and its symbolic representation, between high level conceptual abstraction and low level procedural detail, between the ambiguity and hence flexibility in user requirements and the rigidity of a dumb machine. The mind is ill equipped to handle this complexity and requires help. The evolutionary psychologist Leda Cosmides sums it up very succinctly in Our modern skulls house a stone age mind.

The 'triune brain' proposed by Paul Mclean is fascinating. The model talks of evolutionary layers of brain. The brain stem is a reptilian relic and forms the lowest layer and is primarily responsible for controlling body's basic metabolic functions, like heart rate and breathing. On top of that is the second layer known as paleo-mammalian brain, also known as the limbic system. This is the seat of emotion and memory, comprising the amygdala, the hyppocampus and the hypothalmus. "Our primary emotions, love and fear, sadness and joy-emerge from this region, coloring incoming stimuli with emotional valences we have associated with past events stored in the hyppocampus or the amygdala." The top most layer is the neo-cortex. This is the most distinctly human and evolutionarily youngest component of the brain's architecture. Only primates have something similar. The cortex is the seat of abstract thought, long term thinking and complex communications.

It is obvious that the cortex has a very big role to play in an objective and rational intellectual process required for software development. Within the cortex there are different centers that process sensory information, do mathematical abstraction, language and symbolic abstraction and construction, fill-in missing information by sub-consciously extrapolating known facts, implied contexts and so on. Different circuits come into play during different levels and types of abstractions undertaken while formulating software requirements, design specifications, detailed level logic and algorithms and while implementing the code. Disciplined methods of software programming help in the predominant functioning of one or the other part of the brain and the 'cow-boy style programming' encourages the unstructured chattering of different parts of the brain bidding quick-fix solutions.

But we have a more serious problem than the incoherent functioning of the different parts of the rational brain. Software work like all other work does carry the attendant emotional baggage. There is fear of failure, need for peer recognition, expectation of reward, competitive pressure. Thus the limbic system also climbs on to the center-stage of the orchestra in the mind involved in software development. The Stroop Interference Test enables us to appreciate how difficult it is concentrate on any one aspect and to stop one's brain from thinking different things. It is indeed a wonder that the human brain has had so many intellectual achievements to its credit, in spite of its 'primitive' design.

Until the maturing of the software industry in the last couple of decades, a very insignificant fraction of the society has been involved in intellectual pursuits. For the first time in the history of mankind millions of people are involved in the type of intellectual activity characterized by the knowledge economy. Hence it has become very critical to find ways of routinely enhancing the intellectual productivity of large representative sections of society not specially endowed with extraordinary abilities. These neuro-feedback techniques have to augment the ongoing efforts of evangelizing disciplined software methods.

The application of neurotechnology could provide us with a 'head cap' that provides us with a feedback to help us monitor our brain activity. With the help of this feedback, individuals can be trained to willfully chose and restrict activity to the most effective part in the brain to deal with the specific aspect of the software problem at hand. The feedback can be used to prevent the cacophony of all the parts of the brain to drown us in an overkill of rationality and emotions. Several experiments in different contexts have been reported to localize and even measure the electrical activity in different parts of the brain of a subject to see its correlation with what the subject was thinking at that time. Steven Johnson has reported in his book 'Mind Wide Open' as to how he could calm his mind to 'pay attention to one specific aspect and shutting out other activity by the observing the feedback obtained by measuring his 'Theta waves'. Many sports persons have benefited by this technique and great ones like Tiger Woods seem to have a natural ability to shut out all unrequired rational thought while performing.

I propose that several areas of research be undertaken to ultimately understand how software productivity can be enhanced with a better understanding and monitoring of brain activity. To start with I propose that several subject programmers be asked to volunteer to study the activity pattern in their brains under controlled conditions. The conditions could be varied systematically by first having volunteers who practice disciplined software methods and have a proven track record of very good results. Secondly, the volunteers could be drawn at random without any previous coaching in disciplined methods. They could then be subject to other conditions such as stress of schedule, reward, ridicule, etc. A correlation between the use of best practices, the spatial and temporal distribution of brain activity and the quality of software and individual productivity could be established.

This study could then lead to applying the results to train intellectual workers to enhance their concentration on one aspect of the problem and thus improve their productivity. By observing the impact of stress and other emotional aspects, the work environment including the corporate set-up can be reengineered to suit this kind of work.

If we could get an insight into how to help individuals write defect free software to a far greater degree than the prevailing state of art we would have unlocked a major productive force that could make this world a far better place to live in. If you are interested in learning more about this project please contact me directly at (rajaram-at-webcalltech-dot-com)