There are no single, large software systems developed by the laboratory staff, but there are many small tools and programs written and rewritten over a long period of time by various people, mostly students passing through the facility. A small laboratory is a large, long-term, team software project environment. All of the techniques we have discussed for managing concurrent development, standards, documentation, revision control, and maintenance are essential for keeping the small laboratory environment organized and useful. Without careful attention to management and organization, people will lose track of what is available in the laboratory, resulting in unnecessary duplication of effort, and people who need a specific tool will make it too inflexible to be incorporated into a useful laboratory-wide tool Special Problems Faced in the Small Lab Environment Software developers in the small laboratory environment write tools for clients who do not yet exist and therefore the toolsmith does not know the eventual applications of the tools other than the immediate need that gave rise to the tool development effort. Therefore, it is essential in the small laboratory to design tools for expansion and extension.
Careful design is essential.
Without strong management guiding developments in the laboratory, programmers never get around to turning their private tools into general products. Prototypes abound but products are rare. The prototypes become de facto laboratory standards but without effort to make such prototypes into documented products they are not understandable or maintainable. This then leads to a more serious problem of reliability. If a software toolkit is to be useful, it must be reliable, otherwise debugging of applications using the library is impossible.