Many end-user programming environments are “reuse environments” that store and organize code so users can extend, adapt, and combine existing code. Yet to date, no well-validated, theory-based body of design principles exists for guiding the development of these reuse environments. The contribution of this survey paper is to identify relevant theoretical perspectives and candidate design principles by which these theories could be extended, adapted, and/or applied to the problem of understanding how and when end-user programmers reuse code. In particular, based on this survey, candidate principles are identified that (1) could be used to guide the design of environments for end-user reuse of code, (2) are grounded in theory, and (3) have preliminary empirical support. This contribution is beneficial because successfully applying these principles could increase the benefit of end-user programming by helping software engineers to deliver effective programming environments to end users.