The single most common problem with frameworks that I have seen is the lack, or violation, of the boundaries of the framework. A framework has clear and succinct responsibilities, it should meet those requirements and nothing more. All functionality outside the frameworks boundaries should be handled by the developer. When a framework crosses the boundary it becomes overly complex and it is likely that the developer trying to use it will need to code around the framework’s behaviors in order to accomplish their goals.