Learning and understanding a framework is usually a major obstacle to its effective reuse. Before being able to use a framework successfully, users often need to surpass a steep learning curve by spending a lot of effort understanding its underlying architecture and design principles. This is mainly due to users having to understand not only single isolated classes, but also complex designs of several classes whose instances collaborate for many different purposes, and using many different mechanisms. In addition, frameworks are also full of delocalized plans, and use inheritance and delegation intensively, which makes their design more difficult to grasp at a first glance. How to obtain the necessary information from the framework itself and its accompanying documentation is the main problem with framework understanding. Considering its importance, this paper presents an initial attempt to capture, in the pattern form, a set of proven solutions to recurrent problems of understanding frameworks. The fundamental objective of this work is to help non-experts on being more effective when trying to learn and understand object-oriented frameworks.The introduction of reuse in a software development process implies splitting the traditional software life cycle into two interrelated cycles: one focused on developing reusable assets, and another focused on searching and reusing reusable assets already developed.A framework is a reusable design together with an implementation. It consists of a collection of cooperating classes, both abstract and concrete, which embody an abstract design for solutions to problems in an application domain [15][16] [17].In the particular case of framework-based application development, the traditional life cycle can be organized in: a framework development life cycle devoted to build frameworks, corresponding to the abstraction phase of software reuse; and an application development life cycle (also known as framework usage) devoted to develop applications based on frameworks, corresponding to the selection, specialization, and integration phases of software reuse.Although the activities of framework development and application development are often separate and assigned to different teams, the knowledge to be shared between them is large, as the design of a framework for a domain requires considerable past experience in designing applications for that domain.In application development, frameworks act as generative artefacts as they are used as a foundation for several applications of the framework's domain. This contrasts with the traditional way of developing applications, where each application is developed from scratch. The most distinctive difference between the traditional and the framework-based development of applications is the need to map the structure of the problem to be solved onto the structure of the framework, thereby forcing the application to reuse the design of the framework. The positive side of this is that we don't need to design the application from scratch. But, on th...