The goal of the Polya project is to increase productivity in the development and maintenance of programs, by placing more emphasis on the user interface within the programming language itself. This research seeks new ways to write programs, to make programs efficient, and to reuse program parts. It is concerned directly with software engineering and rapid prototyping. The programming language Polya incorporates new mechanisms that allow a group of people to define and use notations of their problem domain, so that programs can more closely resemble the algorithms being used. Secondly, Polya has mechanisms that make it easier to describe how variables of high-level types should be implemented, requiring fewer modifications to the algorithm than is the case with more traditional languages. The transform, a new kind of program part, can be reused with relative ease. A prototype implementation of Polya uses the Synthesizer Generator as the platform. This research focuses on three areas: (1) research aimed at a significant extension of the pattern matching capabilities of the Polya transformational approach and exploration of new ideas on reverse engineering; (2) experimentation with Polya, in order to develop a library of useful program parts; (3) practical and theoretical improvements to Polya, its implementation, and related tools such as a source-level debugger.