|
The Software Engineering discipline has always looked at the development
of software products as a process that involves several phases.
At
a minimum, these include requirements,
design, implementation,
testing and maintenance
phases. One key insight which emerged from early studies is that,
although each phase is important to the overall quality of the product,
the maintenance phase tends to be the one which consumes the most
resources over the life of a successful product.
The implication is that a well-designed product needs to include
support for the maintenance phase, which may extend for many years
after the conclusion of the initial development phase and encompass
several phases of redevelopment to extend or repurpose the product.
Call The Consultant
believes that product maintainability is crucial, and consistently
follows practices designed to ensure that products developed by
the company can be easily maintained. These include the basics
of modeling and documentation of the software architecture, full
documentation of objects and methods, in-line comments to express
the intent of the code, and unit testing of programs.
On
a higher level, Call The Consultant's
maintainability practices also include the use of object-oriented
designs. This goes far beyond the use of the object structures of
a given programming language. It's easy to learn to write code in
any of these languages, but far more difficult to develop the skill
of building cleanly structured object designs.
Experience is a key to developing object-oriented design skills,
and Call The Consultant
has a solid background of over fifteen years of practice in this
area to draw upon.
Another key insight is the iterative
nature of the design and development process, a pattern well known
to experienced developers. Call The
Consultant believes in making deliberate use
of this natural iterative pattern in design and development through
an incremental construction approach which begins by implementing
a subset of the total functionality as a working system, then extends
the functionality in successive iterations.
This incremental construction approach is particularly well suited
to the requirements of contract software development projects. Since
it provides a number of partial completion steps it gives the opportunity
to meaningfully assess progress and schedule payments reflecting
the actual state of the product, as opposed to basing everything
on arbitrary measurements such as percentage of code completed.
It also reduces the technology and schedule risks, by allowing the
most challenging portions of the functionality to be at least partially
implemented in the earliest iterations.
|