Frameworks are difficult to design because they are abstract. Framework designers must look at many concrete applications to ensure that the abstractions that they are designing make sense. Frameworks are difficult to learn because the user of a framework must adopt the collaborative model of the framework. It is usually not possible to learn a framework one class at a time, but instead several classes have to be learned together. Nevertheless, there is a great advantage to learning a well-designed framework, and mature frameworks (like some of the user interface frameworks) can provide order of magnitude increases in programmer productivity.
This tutorial teaches how to design frameworks. It describes what they are, describes an example-driven iterative development process for designing them, and describes a set of object-oriented design patterns and a set of transformations for applying the design patterns. The design patterns and the set of transformations are useful for making any object-oriented design more flexible and reusable, but they are essential in framework design. The tutorial also describes how to document a framework, and it covers a little bit of topics like scheduling and performance tuning.
I've worked on several different frameworks, and the examples I use depend partly on my audience, though I always use several frameworks as examples. My examples include technical computer science topics like code generation, file systems, and virtual memory, more general interest topics like structured drawing editors and user interface systems, and one application area: a framework for accounting.
I normally teach this to companies in three days. I have half-day versions that I use at conferences like ECOOP and OOPSLA, though it obviously has a lot less material in it. My normal rate for the three-day course is $6000, with no restriction on the number of people attending, though in practice smaller numbers lead to better interaction. I customize the course every time I give, and have different versions for C++ and Smalltalk audiences.