Despite extensive research into the cognitive processes used by programmers to form a functional mental model of software during program comprehension, there has been little research into how the structure of software is represented within long-term spatial memory.It is conjectured that this lack of emphasis on the spatial aspects of code has inadvertently resulted in mainstream software development environments not adequately supporting relative navigation of the software call graph, which results in programmer disorientation.While software understanding tools for visualising object-oriented software have been developed that leverage spatial memory, opening a class to reveal its source code usually obscures the spatial representation and also places the source code in a single common location that has no spatial relationship to the code just navigated from. This is likely to interfere with the integration of spatial information related to individual source code files into a common cognitive map within spatial memory.A key challenge that tool designers face is that, for any non-trivial program, it is impossible to represent all of the source code of a program on the screen at once. Recent prototype environments have used a variety of strategies, including using a semantic zoom that allows classes to be represented with differing amounts of information visible, allowing fragments of classes to be arranged on independent surfaces, and representing individual methods as bubbles that can be grouped within a scrollable workspace. This project has taken a different approach by conferring a spatial structure on source code that is based on its emergent structure, and implementing a visualisation technique that uses this structure to provide a consistent spatial representation of methods. The method-flow visualisation technique has been developed to support short-term spatial memory by placing editor columns within a scrollable flow view that ensures each column maintains a consistent spatial position if scrolled. As the programmer navigates a call graph by following hyperlink-enabled method calls, editor columns are added to the righthand end of the flow view. At any time, the programmer can scroll the flow view to see previously traversed methods. It is theorised that method-flow allows short-term visuospatial memory to be refreshed, and provides more time for methods to be integrated into a cognitive map within spatial memory.Method-flow has been implemented as the Visuocode prototype software development environment and has been both informally and formally evaluated. Formal evaluation consisted of two qualitative think-aloud studies -the first of software navigation, and the second of program composition. Both formal studies asked each participant to perform a number of programming tasks using both Eclipse and Visuocode. During the studies, the screen activity of participants was recorded using screen-capture software, and later analysed to determine the number and type of navigations performed during each ...