Saturday, March 27, 2010

Software is still Soft!

Hardly a day passes by without having to hear about a new bug in Windows! No major commercial software application lives its life healthy, even for a few weeks, without a patch coming to its rescue. Hundreds of thousands of small, medium and large software programs that the software developers around the world write are delivered with bugs that come with it for free and are ready to fly right on the face of the user at the first given opportunity. Nobody will take a software engineer to the court saying his/her software had a bug for he/she will quote the fourth law of ‘software physics’, namely, “no software is ever written bug free”! ‘No test can prove a software program bugs-free, so, why ever bother to write one’ would be the argument ‘your honour’ will be subjected to in any case. Seem the elite practitioners of the technology in the software industry, would rather like to take comfort in this eternal knowledge and continue to enjoy producing bug compatible software programs until eternity.

It is not very easy to get an end-user upset very much (to the point of him breaking his keyboard and mouse) even with a software application that dumps its core at precise intervals or throws exceptions that question his commonsense with messages that only Martians can understand. If nothing else, the application might want to at least hang once in a while just for the fun of it! Still the user will simply reboot the machine and restart the program (to the absolute frustration and dismay of the developer. How much hard he/she should try to get the user kick his/her back?). The secret is that the users have by now learned very much not to trust any software applications and by chance if any of them decide to work correctly, well, sometimes it rains in the summer too! In short, the Software is still, well, what its first name says. Soft!

A user may think if he can at least expect to see similar errors and failures in two similar software applications. Well, you may pardon him for his ignorance as he surely must be a novice to the software industry. As they say, that would be like asking for two people traveling in the same airplane going to the same destination paying the same price. For serious ones, as we all know, it can’t happen primarily because there is no standard way of ‘manufacturing’ a software product and hence no basis in expecting the end products to meet any sort of ‘standard’ too. No two software engineers write a program the same way (hey, don’t we consider that a little below our dignity?). So, one can always guarantee that if two software developers write the same application and if there are X number of bugs in one version, the total number of bugs will be 2X with hardly any duplicates!
All the pun aside, it is very evident that the software house as a whole need to undergo a big cleanup. It is time we see a major paradigm shift in the software industry that would enable creation of highly robust and reliable software products far more consistently. The time has come where the software companies should start making product recalls whenever they find critical problems with their products out there in the market as the automakers recall their design-flawed vehicles or the tire makers recall their faulty rollers. And for this to happen in the software industry, the way software products are created today would need a radical change.

Currently existing models for certification and evaluation (CMM models, for example) of software creation processes are not equipped to meet these challenges. There is no notion yet of certifying the end product. These processes still leave too much to the individual fancy when it comes to the actual act of creating the software. The developer will still may opt to catch an exception or check for a null division in his code if he is on at least half his right mind or will prefer to care the least for those fineries if he had to juggle with his boss the previous night and is sitting there with a fuming ‘devil may care’ inside!
In not so far a future, software may have to cease to exist in the form as seen today. Software engineers may not write programs anymore using programming languages like Java, C++, C or BASIC, or even English for that matter, in ‘emacs’ and ‘vi’ like text editors or their other higher-end fancier counterpart IDEs (Integrated Development Environment). Software may be created through a well-defined and unified process that adheres to a strict industry standard using tools that implements the said standard, giving no room for programmer errors. The paradigm might be, “Software no more be written, they be manufactured”. Software will no more bear the excuse of being an “art”, they will be the result of a mundane commodity creation act. One may think in terms of software products being manufactured in a manufacturing setup that will deliver consistently the same quality software product time and again, the set of inputs, external and internal, and the process being the same. Needless to say, the said ‘Software Manufacturing Process Standard’ is something that is non-existent today and will have to be evolved and established by the software community. This standard will set guidelines for creating the Software Manufacturing Tools, including essential features and programming constructs to be provided, process flow for program creation, code translation standards etc., and will set the quality standards for the end product.

Many of the modeling tools, paradigms and automatic code generators were efforts to address a few of the dimensions of this bigger challenge. However these efforts with their limited scope had hit end of the road and would desperately need a breakthrough in terms of a fundamentally different solution idea. Meanwhile, on the other extreme side, majority of the software applications are still made in the ‘IT cottage industry’, where the word ‘design’ itself is considered a luxury and ‘primitive’ environment in term of mindset, competency and tools define the norm inside those cozy multi-storied high-tech glass buildings.

An auto shop will not let two different technicians on the manufacturing floor create pieces differently, probably walking around with a hammer and a handheld welding machine, even if they wish so. Uniformity and discipline gets auto-enforced in the form of well-defined processes and quality control. This is what is giving us the confidence to drive our car at 100mph on a 35mph zone. Software products needs to provide this level of confidence and should come equipped with those air bags to protect against anything untoward.

The premise of Free(dom) Software!

We are in an era that is defined and shaped largely by the emergence and amazing growth of the Information Technology. The ever-increasing role of IT in defining and changing our life profiles has been overwhelming. One of the key and unique attributes of this digital age has been the creation of humongous volume of ‘information’. Naturally, presence of such huge pile of information has also given rise to various forms of channels and media to cater to the needs for distributing and disseminating this information. The irony however is that while on one hand we witness the high-volume generation of information and emergence of newer and sophisticated technologies and tools to distribute and process such information, on the other hand we are seeing attempts to make this information more and more restrictive, inaccessible and expensive for the common man. In short, as the creation and distribution of information becomes easier and the potential of this information to influence the lives around increases, the efforts to claim exclusive rights on it and establish monopoly on the same also increases exponentially.
.
The Information Technology revolution has given us a powerful means to reach more information to more people easier, faster and efficient. IT carries tremendous potential to act as a strong catalyst in the efforts to improve the lives of millions, especially that of the underprivileged and the uncared majority. It offers an effective platform to provide impetus to the struggles world over for positive change. Thus any effort to allow such a potent platform to be hijacked and (mis)guided by the greed of profiteers would be highly regressive. Unfortunately this is exactly what the corporate world want to achieve through draconian Intellectual Property Right laws.

Ownership for information is a creation of the modern profit interests. Allowing uninhibited spreading and sharing of information will mean that the corporate stand to lose the opportunity to make huge profits for themselves. Today the owners of information are the profit mongers and the monopolists, not the enlightened souls who had only the good of the society at their hearts. Had it been in the hands of the greedy modern day corporate, even Fire and Wheel would have been under patent today! For the corporate, an ideal world would be the one where the users never get to own a software but continue to keep paying them royalty whenever we see, hear, read or use any piece of information they created. They would not only want to protect their software from copying, they would, if possible, even want to stop emergence of any means that would help copying! Corporate may want to put behind bars not only the people who copy a software from one computer to another inside their own home or give a copy of the CD to their friends, but also the people who don’t ditch their friends or neighbors by not informing the corporate about their ‘piracy’! They fill their coffers by maintaining their monopoly on the information and they are willing to go to any extent to protect their ‘rights’ to rob the people!

The IT revolution has resulted in creating a distinct economy of its own and it has brought a new imbalance in the existing economic orders. The IT economies have successfully established an artificially inflated exchange value in their favor over other agricultural and industrial economies world over. The fundamental difference in the manufacturing process of software products versus other material goods is at the core of the huge profits that the IT conglomerates manage to amass for themselves. What enabled IT economy to create such a huge surplus is the fact that the software needs no investment or expenses to replicate and make copies once the original is made, unlike material goods or other agricultural products. And the prices of these software products are kept absurdly huge that it has no relation whatsoever to the investment made to create it. The companies continue to reap in profits for years and in many multiples of the actual expenses incurred to create the first copy. With its unique value creation paradigm, the ‘digital economy’ has thus managed to disconnect itself from the very realities on the ground.

For example, the price of a Windows XP CD (~$275) becomes equal to around 600kg of rice in the Indian market (read it 6000kg if you go by Rs.2/kg scheme)! Microsoft can simply give a CD to a farmer in India and take away 600kg of rice from him. Did Microsoft lose anything in this deal? Nothing absolutely! They still have their original XP CD with them and they can create another hundreds of thousands of such CDs with just few cents per CD (the cost of the disk ie). What about the farmer? He lost 600kg of rice and you can calculate the effort (money, time and labour) he has to put in to create another 600kg of rice! The disparity cant get ridiculous than this! And Microsoft insists each one of us should buy new Windows XP CD for each of the computers at our home or office! It is this economy that the software giants want to protect through their monopolies and ‘Intellectual Property’ rights.

Thus, it is more important for developing economies than anybody else that they dont allow the monopoly interest of these IT corporate take precedence over their own national interests. Free Software movement thus attains more political significance for countries like India. Economically it makes a perfect case for developing and underdeveloped countries to go the Free Software route as the cost for Proprietary software becomes prohibitively huge. But more than the cost, it is the Free Software philosophy and the development model that should be more interesting for these societies. The Free Software initiative demonstrated how a common cause can bring a whole community together and how they can work in unison for the common good of the society as a whole. Profit has been the least motivating factor in this grand collective initiative. The core philosophy as epitomized by the Free Software that the freedom for all is much more important and sacrosanct than the greed of a few may guide not only the Software world but every other endeavors of our social life as well.

The Product Mindset

The business model followed by most of the companies in the IT/Software industry generally falls in to either of the following (or a combination or varying flavors of these):

* Create/Sell Product(s)
* Provide/Sell Service(s)

Based on the model the organization follows, they fall into one of the two broad categories of ‘Product Companies’ or ‘Service Providers’. It is true that the distinct line that defines a Product vs. Service company is getting more and more blurred as some of the key product companies themselves (Oracle, Microsoft, IBM etc for example) are engaging in both models within a single ‘roof’. However, this distinction still may be relevant for individual ‘organizations’ or ‘entities’ within a parent company based on their charter and the model they are engaged in.

The word ‘Service’, off late, has been burdened with a lot of different ‘things’, even within the limited terrain of IT parlance. The implication varies significantly as evident from the ‘Service’ word in ‘Service Industry’ versus in ‘Service Oriented Architecture’ (SOA). Functionalities which are low-end and support in nature like network administration, PC maintenance, other IT infrastructure related functions etc. are clubbed as ‘Services’ and the companies offering these services generally are dubbed as ‘Service Providers’. Some organizations also have taken this a step further by adhering to ‘Service Subscription’ model, with the software products being leased against annual subscription or subscribing to a ‘total support service’ package as in the case of ‘One Care’ package offered by Microsoft. On the higher end of this family, there exist organizations which provide project execution services or in some cases, even core product development engineering services for clients.

The key organizational characteristic or the ‘Organizational Mindset’ of a Service Company evolves from the search for achieving maximum ‘execution efficiency’. The focus is on achieving maximum efficiency for project execution in terms of producing best results within the constraints. The teams are oriented in terms of projects, mostly one-off, turn-key type projects the companies execute for their clients and, the motivation there is to complete projects within the specified constraints in terms of time, scope, resources and quality standards. The organization would be more customer-centric (most of the projects being customer funded ones) and the success is assessed in terms of customer satisfaction and repeat business referrals. The scope of work is tightly defined within the boundaries of the project, with the project coming to a logical culmination when the software systems are delivered to the client (or installed at the client site). The mindset in such organizations is generally more towards ‘execution efficiency’ against what I would call ‘innovation efficiency’, which is the earmark of a product company.

Product Companies typically follow a business model that is aligned with the objectives for successfully creating and selling specific products. Identities (brand) and ‘pride’ of such organizations remains closely attached to their flagship products out there in the market. To grow and sustain the said identities and intellectual assets, the Product Companies model their operations based on a different business paradigm in comparison with the Service Industry.

The core organizational characteristic of a Product Company need to evolve around achieving maximum innovation efficiency, which reflects the strategic focus of the organization towards promoting and driving continuous product innovation in search of key market differentiators against competitions. They are more product-centric than customer-centric. The success is assessed by the product market and the stress is to expand the market reach and brand awareness of the product. The ‘Product Mindset’ asks for developing expertise around specific verticals or product areas and drive innovation in the respective specialized areas by the respective teams, both in terms of feature sets and the technology. The teams are formed around product areas and relevant expertise and they continue to be associated with their respective product areas for relatively longer periods. This helps the teams to develop ‘pride of ownership’ and it allows the teams to be forward thinking in terms of current and future planning. It is very critical that various teams responsible for different product areas stay connected. Thus the organizational culture and the work environment should be oriented towards encouraging high level of interactions between teams to avoid formation of silos. A culture that is very open in terms of absence of or very minimal existence of hierarchical and formal bureaucratic roadblocks, in terms of nurturing and valuing creativity, in terms of facilitating idea exchange within and across teams and in terms of providing an atmosphere that promote free flow of ideas would be a key contributing factor to the success of a product company. And, the ‘Product Mindset’ is the sum total of these set of values, thinking, practices and the enabling work culture that would be an integral part of any creative and successful product development environment. Some of the key attributes that would define a ‘Product Mindset’ may be summed up as listed below.

* Highest level of Innovation and Creativity
* Vertical expertise in specific product areas and technology
* Continuous thrive to identify and incorporate key product differentiators
* Forward looking
* Technology oriented
* Product centric
* Customer focused
* Quality conscious
* Technology and Market leadership

An important hallmark, which may be viewed as a manifestation of how strong the existing ‘Product Mindset’ in an organization is, of a strong product company would be a strong presence in there of a vibrant, highly focused and market aware product management team. An organization that can boast of having a brilliant engineering team which is perfectly tuned to the product vision and roadmap defined by their equally smart product management counterparts, more often than not, will have a better chance of achieving the glory of being a market leader in their chosen space.

Is SaaS a threat to Free Software?

Software as a Service is software delivery model where the application is hosted on a network server which can be accessed by users over the net and pay as per the usage instead of owning the software by paying the license fee. For example, a word processing program, which is installed on a network server and accessed by users to create and edit their document, can be termed as a SaaS application. Google Doc is an example of word processing program deployed as SaaS. SaaS has lot of positives as it take advantage of the 'economy of scale' and application standardization. For organizations, SaaS helps them to reach out to the global market. SaaS allows users to altogether do away with in-house servers, application and the need for software installation or maintenance, key reasons why they would opt to go the SaaS way. SaaS also poses a key threat to the software freedom, the core value embodied in Free Software movement.

As far as Free Software / Open Source paradigm is concerned, SaaS, by the very nature of the model, poses important concerns from its core philosophical perspective rather than from a technical / implementation perspective.

SaaS as a software delivery model strikes at the very core of the Free Software philosophy. It is not about implementation of the solution as such. A User of a SaaS application does not necessarily bother about whether the application is built by Open Source technology or not. The Users are using the service to perform their computational need (they submit their data to the application and get the computation done by the SaaS service). And SaaS by definition is not anyway wedded to the technology underneath with which the application is built.

Where the SaaS becomes a threat to the philosophy of Free Software, ie 'Freedom to the User of the software' is that SaaS makes the question of source code availability irrelevant and thus take away the 'means' of the User to control the behaviour of the software as per his/her needs (even if a SaaS provider agrees to distribute the source code and thus address the question of 'access to the software'). ie Even if the User gets the source code of the SaaS application, as long as the User is still using the SaaS service, his/her 'freedom' is as much as allowed by the service provider only. Both the data as well as the control (how the software behave) are with the provider and not with the User. Thus, SaaS might be seen as in the opposite camp to the spirit of 'Free Software'. In the SaaS world, availability of source code now no longer guarantees the 'Freedom' for the Users!