Most managers or project leaders responsible for the maintenance and enhancement of existing applications feel frustration. They know that if they could just get the new version of their program finished, they could solve lots of problems. But responding to those problems can be what prevents the new version from being finished!
Why Is Maintenance Such a Problem?
Most of us are rewarded for putting our programs into production use. The rewards are greatest where there is a large improvement in the work the computer is doing for the user. Similarly, the punishments for not getting new software deployed can be large and painful. On the other hand, the pressures to update an old application can be great: just look at the year 2000 hoopla!
If you're like most of us, your boss remembers when you promised to have the new software ready. He (or she) is not so likely to remember the time spent updating the old application to handle an upgrade in operating system or network software.
In addition to the external (boss, company, market) pressure, most programmers get psychic rewards from seeing our programs put to use, but find fixing bugs and/or making small improvements psychically unrewarding, for a variety of reasons:
In short: no fun.
Why Does Maintenance Take So Much Time?
In addition to programmer reluctance, the following specific problems all contribute to the high cost of maintenance:
Changes made by programmers who are unfamiliar with the code are much more likely to be patches -- small sections of code that deal with the symptoms of an issue, rather than the root causes.
These induced bugs arise from several sources:
New Engineer Startup Time:
Fear of Making Mistakes:
Unfortunately, choosing the smallest possible change, while perhaps a valid way to resolve the current issue promptly, often leads to future maintenance problems. The smallest change is usually just a patch, and serves to weaken the program's structure, increase inappropriate interconnections, and increase a program's fragility.
We specifically desgined InstantC to help with the issues of C program maintenance. However, remember that no tool can solve all your problems -- for more on this, read No Silver Bullet.
How InstantC Will Help You With Maintenance Pitfalls:
InstantC's "view" facility will show the prototype or declaration for any data, #define, type or function -- without having to wade through dozens of references as with a typical IDE's browser.
InstantC's source code formatting will show the code to each programmer formatted in a way that s/he finds easiest to read and understand.
By letting the programmer immediately execute C expressions, particularly function calls, in context and repeatedly, InstantC helps the programmer understand how the code works. It's fast and easy to try alternative solutions to a problem to see what works best.
By showing the prototype or declaration for any data, #define, type or function, InstantC serves as a reference guide for the application.
Best of all, all this documentation is guaranteed to be up-to-date, since it is generated automatically by InstantC from your source code.
New Engineer Startup Time?
New programmers on a project using InstantC frequently report increased confidence in their programming because of the increased understanding aids. Even more strongly, they report that the run-time checking provides a "safety net" for their programming. The immediate mode execution also increases confidence, since the programmer can easily try out new code before making a change to the source.
Fear of Making Mistakes?
The immediate mode execution allows a programmer to easily do more testing, so that s/he can be more sure that a change s/he is making is the right one. In addition, the immediate mode execution allows the programmer to try out different solution implementations, again increasing both confidence and correctness.
The incremental compiler's fast cycle time, and its ability to make changes to a program while it is executing, also encourage trying out different solution implementations, causing the same boost in confidence and correctness.