Developers spend much of their time understanding unfamiliar code during software maintenance tasks. The study found that developers interleaved three activities: searching for relevant code using manual and tool-based searches, following code dependencies, and collecting relevant code by encoding it in Eclipse interfaces. However, developers' searches were often unsuccessful due to misleading cues, and navigation tools caused overhead. Developers lost track of collected code, forcing re-finding. On average, developers spent 35% of time on redundant navigation. This suggests a new model of understanding as searching, relating, and collecting relevant information, and ideas for more effective tools.