Systems analysis and programming philosophy.   

by Charles M. Barnard

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.