|
The Software Engineering (SE) discipline has always looked at the development of software products as a process that involves several phases. At a minimum, these include planning, development
and maintenance phases. One key insight which emerged from early SE 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. Tharwat Consulting Group believes that product maintainability is crucial, and consistently follows practices designed to ensure that
products developed by the company will 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 test programs.
On a higher level, Tharwat Consulting Group's maintainability practices also include the use of clean object-oriented (OO) designs. This goes far beyond the use of OO languages such as C++
and Java - 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 OO design skills, and
Tharwat Consulting Group has a solid background of over ten years of practice in this area to draw upon.
Another key insight from SE is the iterative nature of the design and development process, a pattern well known to
experienced developers. Tharwat Consulting Group
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 access 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. |
|