Monday, April 24, 2006

What makes a good Software?

To my readers, first of all sorry. Earlier I said I will post the last part of my experiences in NIBM on the CBS programme. But sorry, for one reason or other I could not post the last entry. Now, I think I will not do so, as it is too late.

Today's focus is based on the impressions I have about good Software.

I have worked with software for quite a few years now. And also worked with a few good software products. What distinguishes good software -- rather great software? I will give some of my thoughts:

1. Good software is Always Designed! My readers may wonder, is it not an understatement? Do you have software which is not designed? But surprisingly, in my experience most of the software is not properly designed. What I mean by this is that the developer(s) do not go through every aspect during the design. This is especially true in the case of custom developed software. Most of the developers want quick results, (and quite often some Manager or other will pressurize them to make it faster). And often, they end-up an under designed product. But in my view, it often kills the purpose. I remember, what I have read in a book a few years back -- If you deliver a poor quality product fast, people will forget that it was fast, but remember that it was of poor quality.

2. Good software is written with a long term view. This may be a corollary of the first one. Unless the developers have a vision to take it to a greater heights, we cannot see software which can be called good.

3. Good software is based on a good understanding of the Business. Here I am speaking about Business software -- a software piece intended to solve a business problem. If the developers do not understand business, they cannot develop good software. Here comes the need for modeling. Better still, if the developers do not understand business fully, they may be well advised to start with a business modeling exercise.

4. Good software is based on a strong paradigm. In software engineering, we hear a lot of terms like frameworks, design patterns and the like. Of course, some of these concepts have evolved over a period of time. More or less UML based modeling, use of analysis, design and architectural patterns have become the norm. We almost always see that some of what has been discussed in these, are very part of good software, even though the software itself has been created before the actual paradigm evolved, and came to be identified. But almost always I see that good software uses some of these. Take for example MVC (model-view-controller) architecture. Though as a paradigm, it has been spoken of only in the last few years, the idea has been there from the smalltak days. But I see that almost all good software has used this.


Of course, there are number of other things that make a good software. But this is something which came to my mind quickly, which I believe is almost always essential.