A framework is a set of classes that make up a reusable design for a particular domain [7]. An application is developed by creating application specific subclasses of abstract classes in the framework. The emphasis is on design reuse rather then code reuse. For the most part, a framework captures the common design decisions for the application domain that it was built for. By making the design decisions for the developer, it allows the developer to concentrate on the application specific details. Not only do frameworks make for quicker application development, applications built with the same framework are consistent and easier to maintain.
However, since frameworks make many design decisions and assumptions about the domain, good frameworks are very hard to develop. A framework has to be flexible enough to meet the demands of new applications. A design has to be reused several times before it can truly be called a framework. Many so-called frameworks break down when somebody tries to reuse them. It is almost always impossible to predict the needs and trends of future applications. As a result, building a framework is an iterative process. The framework evolves as new applications are built and weaknesses in the framework are discovered and fixed.