A system must first and above all, reliably provide data
services needed by the people using it. Such services may or may not be
recognized by those who need them.
Data processing requirements determine design
requirements—specific tools used to implement a system are secondary.
A system should be well documented.
There are three basic types of documentation required: Internal
documentation for the maintenance programmer, documentation for everyday use and
training, and documentation for exceptional circumstances (i.e. year end
processing.) The level of detail required in each is the inverse of the order
presented—those functions used least often must be best documented.
Program design is an iterative process.
Multiple passes are usually required to properly identify and implement
all needed features. This is because very few people can truly visualize their
needs from a blank page. By
refining and redefining the design, features which become possible based upon
knowledge gained during one pass can be implemented in the next—often there
will be useful features identified and implemented which would not have been
considered without intermediate stages. Attempts
to fully design and lock a system design before implementing any of the design
will lack features that could have been easily implemented, and often will have
more value than the original conception.
A functional but ragged design may be implemented, but
effort should immediately be put forth to streamline such design to properly
document and provide ease of future maintenance.
The additional time spent to rewrite a system immediately after it is
functional will pay back many times over the lifetime of the software.
Software always stays in use far longer than anticipated.
The accuracy with which a project’s requirements may be
determined is directly proportional to the stage of development currently
achieved. No project estimate at
the beginning of a project can be expected to have any high degree of
correspondence to the final resources used.
Error and exception processing is vital to any non-trivial
project. If such processing is not
installed, the software, no matter how well it works, is not finished. When
possible, programs should incorporate measures to handle installation and
maintenance of required objects dynamically.
User interfaces need to address the concerns of the actual
user, not their manager. There is
no better design aid for a user interface than an actual user.
Craftsmanship is important, my mother, who taught me carpentry, painting, wallpapering, sewing and cooking also taught me to sign my work.