A range of approaches needs to be pursued if progress is to be made on large-scale IT systems. These approaches include theoretical computer science, computer systems architecture, analogies to large systems in the natural and social sciences, programming methodologies, and continued extensions of ongoing work in areas such as software components and mobile code. Experimental work will be extremely important and, in this context, inherently problematic, because the systems of interest are beyond the current capability of engineers to implement and because the construction of large-scale IT systems is especially difficult in a research environment. Nevertheless, experiments can be done in the context of existing large-scale systems, attempting incremental improvements. Furthermore, useful insights into the behavior of large-scale extensions can be inferred from small-scale prototypes. Of course, the best ideas for pursuing research in large-scale systems will come from the research community itself, but the following examples show the range of approaches needed in a comprehensive attempt to develop a stronger scientific and engineering basis for large-scale IT systems.
One element of any approach to studying the properties of systems of a scale and complexity exceeding current capabilities is to develop theoretical constructs of behaviors. Theoretical computer science has been quite successful in applying such methodologies to, for example, the computing requirements for algorithms of arbitrary complexity, quantifying which algorithms have desirable properties and which algorithms do not. There have also been some efforts and successes in reasoning about protocols (algorithms executed among autonomous actors), which gets closer to the heart of large-scale systems.35 Similar methodologies could be applied to large-scale systems. One direction for research would be to construct certain constraints on the behaviors of elements of the system and then to reason deductively about desirable properties of the system as a whole. Another approach would be to define helpful properties of large-scale systems and draw inferences about the characteristics of constituent actors that ensure these properties.
Efforts are also needed to develop further the nascent fields of system or software architecture (Shaw and Garlan, 1996; Rechtine and Maier, 1997). System architects—software architects, in particular —are similar