|
In the first of his series
of articles on Patterns and AntiPatterns in Software
Development
Dr R Srinivasan examines some of the parameters
which would make software development 100% successful
EVER since the 60' s, we have been witnessing
paradigm shifts in the area of Software Development.
We kept moving from Assembly-level coding in 60's
to Procedural Software in 70's into early 80's
and then to Object Oriented Programming(OOP) since
early 80's . In this new millennium, we are talking
about Component-based Software Development. In
Procedural Programming the basic unit has been
the Subroutine which has been a unit of Invocation.
In OOP the basic unit is the encapsulated data
type and an Object is a unit of Instantiation.
In the latest technique in programming, the basic
unit is a deployable software module, a "Component",
which is a unit of deployment and reuse. With
the introduction of CASE tools, Software Development
has taken the attributes of an Engineering Discipline.
All the above
developments have definitely been towards improving
the productivity of Software Development; however
a basic question today is, "is the Software Development
100% successful". William Brown, et. Al in their
book on," Antipatterns in Project Management"
draw our attention saying, "based upon surveys
of corporate software projects in US, the realities
of Software Development are: 1) About one third
of software projects are cancelled , 2) Average
number of projects expand twice as much budget
and schedule as initially planned, 3) After delivery
majority of systems are considered unsuccessful
because they have far fewer capabilities than
expected, 4) Modifications and extensions of the
systems are the most expensive cost drives and
very likely to create new defects and 5) Overall,
virtually all Application Software Projects produce,
" stove pipe systems", brittle software architecture
that under perform on requirements". In his article
on "Creating Chaos", in the July 1995 issue of
American Programmer, Johnny Johnson says that
about five out of six software projects are considered
unsuccessful. Supporting these comments, software
experts like Raphael Malveau and Dr. Thomas Mowbray,
in their recent book on Software Architecture
Boot Camp(Prentice Hall PTR, 2001), say, "Software
Technology is critically important to the world's
business and human society. However, Software
Engineering remains a chaotic and immature discipline
unable to systematically deliver successful systems;
what is missing is Software Architecture".
Looking at these
comments, many software development organizations
must be wondering and getting annoyed. Particularly
in our country, which is recognized as the Mecca
of Software Development, we have shown a phenomenal
sustained annual growth rate of nearly 60% in
software Development in recent years, these comments
may look bewildering and rightly so. However it
depends upon how you look at and gauge what do
we mean by "success of Software Development".
The goals to be met to achieve success are: solve
the right problem, correctness, meet the performance
criteria, stability of software, delivery on time
without any schedule slippage, costs within budget,
well recognized documentation, good maintainability
and above all the social side, namely, developed
by a team consisting of happy development staff.
Success means every one of these parameters should
be met with 100%. Brown et. Al are even content
to limit to four parameters in order to consider
the software to be successful, namely, 1) On time
delivery, 2) Development and delivery within budget,
3) Delivering the expected software and 4) Happy
development staff.
We are forced
to wonder, with so many courses in Computer Science,
Software Engineering Processes, Languages, etc
from both formal and non formal education sectors
and the software development houses having well-trained
Project managers and Engineers, where is the chance
of so many failures or instances of failures in
Software development? The experts who made the
comments given in earlier paragraphs point out
that "no class, seminar or books can possibly
define thousands of variables that exist for any
given project at any given time. There is no steady
state in Software Development. No professor, lecturer
or author can possibly know what your specific
environment is at the time you embark on your
project". That is also the reason why, with existing
practices, we do not and cannot have a textbook
on "Software Development" which would help the
developers.
As Kenichi Ohmae,
business Strategy expert says, "Rowing harder
does not help, if the boat is headed in the wrong
direction". In many of the Software Development
organizations, we continue doing things the same
way we have been doing. Scott. W. Thomas, one
of the authors of the book by Brown et. Al says,
"If you keep doing what you have always done,
you will keep getting what you have always got".
These are the main quotes that lay the foundation
for my article. We will proceed to look into these
in greater detail and discuss how Patterns and
AntiPatterns will help towards achieving better
software development from next week onwards.
(The
author is Chief Technology Officer, Internet Component
Management Group, Bangalore and can be contacted
at: r.srinivasan@iCMGworld.com)
|