Sundarrajk's Weblog

Archive for the ‘Cargo Cult’ Category

Recently I read the by Richard Feynman, and I was surprised by how much of this Cargo Cult is being practiced in today’s Software Industry.

The managers in IT industry saw the manufacturing companies were benefiting by adopting various standard processes and by getting them to be validated and certified by standard organizations. ISO, Six Sigma are certifications for the processes followed in manufacturing industry. And industries which have these certifications have have manufactured better quality products, they have proved to be more efficient in usage of time and resources and have generated large net profits. The managers in the software thought that aping the processes in the manufacturing industry will help them achieve the same results that have been achieved in the manufacturing industry.

Processes in a Manufacturing Industry
In a manufacturing industry one person or a group of people who understand the manufacturing process in detail can apply their thought generate a set of standard processes for each step of the manufacturing process. If the workers on the shop floor follow these processes the end result will be to achieve the above mentioned results. This is possible because various steps in a manufacturing industry are more or less standardized. A manufacturing plant repeatedly produces the same output again and again following these processes. E.g. a automobile manufacturing unit keeps churning out automobiles of the same kind, if at all with minor variations between any two automobiles. This is one of the key reasons why it has been possible to automate many of the processes in this industry.

Applications in a Software Industry
The software industry works in complete contrast with the way things work in an manufacturing industry. No software company churns out the same product again and again the way it is done in any manufacturing unit. Each application or product that is developed by the software company is vastly different from the earlier applications or products that it would have generated. Although they may use the same framework, same architecture what they need to do will vastly different hence resulting vastly output. And this is the reason why attempts to automate development of software has failed miserably. Some aspects like testing, checking for code quality (within a limited scope) has been automated but the key aspect of writing code which is the heart of software development has not yet been automated. Again certain aspects can and have been automated but the majority of the code in any application has to be hand written by developers.

When it comes to replacing one developer with another it becomes very important that the new developer understand the domain for which application is being developed, understand the standards and processes that are being followed and only they will they be able to become productive.

Additionally each developer comes with a different background and writes code differently even while adhering to same standards of naming and other standard code quality checks making it difficult to create software with uniform structure.

No amount of documentation, training, processes and checks and balances to ensure processes are being followed will guarantee an efficient software. Only use of good quality developers with sufficient experience will ensure good code.