Key problems in building and maintaining large programs are (1) gaining an appropriate understanding of the system components and how they interact and (2) determining a suitable way to represent this information.
MILs, software configuration management systems, program understanding environments, and software architecture descriptions have all attempted to address these issues, with varying degrees of success. In particular, techniques for system modeling_a sub-area of configuration management_typically incorporate only a small amount of the information available about a system and its components. System modeling notations are usually oriented toward efficient building, rather than human understanding; consequently, they are often inherently textual, inscrutable, tied to particular languages or environments, inflexible, ad hoc, and without formal foundations.
My basic strategy has been to use a program understanding-like approach to derive useful information about programs, their components, and component interconnections. This information is then stored with the components in the system repository; it provides a means for distinguishing between different versions of system components and of tracing system and component evolution.
Secure and portable database extensibility. Proc. SIGMOD'98 (with T. Mayr, P. Seshadri, and T. von Eicken)