Development frameworks, in the loosest sense of the term, do a good job of preventing developers from having to reinvent the wheel each time they begin a new project. Each project naturally calls for a different starting point dependent upon what the end result should be. Drupal, I think, begins at a pretty high level of done-ness.
I should think that it is a given that frameworks currently in use by any sizable community offer this basic benefit to the degree which it is designed to. I think, then, that frameworks need to be judged on what I see to be an almost equally important factor: its ability to prevent developers from boxing themselves in, or over-engineering their application.
Let me provide a simple example of what I mean. I am working on fixing a bug where a piece of functionality is not working on a number of node types on a fairly complex Drupal site. I've spent a good amount of time now tracking down the various pieces of code that contribute to this functionality just to find that the problem is caused by a series of basic assumptions about the range of node types available and the location of files in the theme.
This is a rut that a lot of large sites get into, where simple changes have effects that are branched out into various parts of the site and are mostly unforeseen. Tons of developer hours are poured into detective work and changes to code that was architected by a well-meaning developer under the sometimes forced assumption that all will forever be as it exists at the time of writing.
I hope that the framework of tomorrow is "sold" by its ability to allow developers to build flexible and self-sustaining applications. Ones that seem to stretch and grow in an organic and intelligent manner. So that in addition to saving time by having a starting point that is not level 1, we are also able to reduce the hours of debugging and refactoring whenever a change needs to be made and instead focus on more innovative work that our clients can monetize.
And, I mean really, what developer doesn't want to just focus on the good stuff - building new functionality?
Thoughts? Are there any frameworks out there that do this well?