In this chapter we discuss the major problem in large scale software, which is the difficulty posed by dependencies, and the major tool we have to control this, which is the control over visibility.
People often get the incorrect impression that the major problems in software development are algorithmic -- finding clever ways to perform some task quickly or easily. Surprizingly, this is usually not the case. Instead, the major problems in large software systems are not caused by size, nor by poorly understood algorithms, but by the interconnections that wind their way between the various parts of a system developed by different programmers.
Internestingly, the most important tools we have to control interconnections are techniques to limit the accessiblity of names.