This article models program design as a process of search through the program structure. Some of this structure is captured in the final program code, but much of the fine structure is impIicit in the design process and is not apparent in the final artifact. Viewed from a procedural perspective, a program consists of a set of roles connected by linear order; this is the way a serial computer views a program. Viewed from a functional perspective, a program consists of a set of actions connected by data and control flow dependencies, so they define a nonlinear plan that can be used by a parallel machine. A person sees a program as a set of nodes connected through their data flow, control flow, or Iinear order. Nodes occur at many Ieveis of description, from the most basic concrete node that corresponds to a line of code, up to an abstract node that may consist of one or more routines of arbitrary size.My thanks to Clayton Lewis for pieces of the puzzle, and to the reviewers for their excellent comments. The model owes a great debt to the work of