Thursday, February 23, 2006

Successful Software Development

Ever wondered about how difficult it can be to define some most commonly used terms in your daily duties as an IT professional? Try defining Software Engineering for example and you will be surprised by the number of possible definitions and views that will cross your mind. Then try to consult your fellow professionals or even standard organizations and you will discover that the number of definitions will grow in diversity instead of converging. May be that is the way IT professionals work. If you do not believe me write a list of ten IT terms that you think your colleagues are familiar with and then invite your colleagues to an informal discussion on the definitions of those terms.

Now change the topic to focus on the ways of designing a piece of software, pick any design problem that might be of a general interest to your colleagues. A word of caution! Avoid traditional classroom or textbook problems like the traditional Traveling Salesman Problem as these tempt your colleagues to try and remember solutions from college instead of thinking in a logical and novel way. The proposed solutions that you will get will open new horizons your understanding of software design, analysis and development if they are not open already.

Consider what you could get if you were to ask these same people to develop possible approaches to developing quality software (considering the subjectivity surrounding the definition of software quality especially with the emergence of the agile methodologies perspective to software quality) in your organization or any organization. Different approaches or ways of developing software commonly called methodologies and sometimes frameworks or just methods have been developed over the last generation or so. The result is that today we have what has been termed a ‘methodology jungle’. A lot of subjectivity surrounds the choice of the best methodology per given situation. The science behind Software Engineering would have us believe that software has to be engineered rather simply crafted. I suppose the history of Software Engineering so far has been marked by a dominance of the knack for engineering and scientific supremacy over art when it comes to software development. However, over the last decade or so new approaches to software development have shown more respect for what I have termed the ‘organic and synergistic’ aspects of software development as revealed in the focus pf the agile movement.

When it comes to the use of specific agile methodologies I have come believe in a hypothesis such as:

“The success of software development projects can be enhanced by the correct choice of a set of agile methodology practices and the proper adaptation of the selected agile practices to a given project environment instead of the dogmatic adoption of a particular whole methodology”.

So what do you think about this hypothesis?
The next few posts will look at this issue in detail.