This past weekend after my web2project presentation at NoVaLUG, we ended up in a side discussion on languages, frameworks, etc. The point of contention revolved around the use of frameworks, including Hibernate and Spring specifically. The primary defender of Hibernate and Spring brought up some great points that I would like to address here.
First, he noted the benefit of having much of the core logic in a framework. I agree wholeheartedly. A framework is going to let you get the basics of your application up quickly and in a relatively consistent way. Unless you're building a very simple application, you'll end up using some sort of framework… often rolling your own from a common set of libraries that you've developed over time.
Next, he noted the benefit of having a community-wide standard for a framework. I agree wholeheartedly. The ability to recruit from a pool of developers with a common mindset or common understanding can be quite useful. Time normally required for training on the application/system may be reduced since some components are already understood. This can apply no matter what framework you use.
Finally – and most importantly in my book – is a point that I'm not sure I expressed well at the time. And it boils down to the simple cliche: When all you have is a hammer, everything looks like a nail.
When everyone on your team knows and understands a single framework… and worse, when that is the only framework even considered within your community, you have a fundamental risk involving innovation. One of the things that drives innovation is looking at the same problem in different ways or new problems in new ways. When the entire community uses a single framework and develops on top of it, you have a much smaller community considering and solving those problems. And worst yet, all of those solutions have to appeal to the entire community.
As much as the sheer number of frameworks drives me nuts (partial list for PHP frameworks here), the slightly different spin each on takes on core concepts has spurred along innovation as much as it's caused heated debate. The more interesting aspect is that since it's so simple to start a framework, just about everyone can start one and participate in that debate. And as a result, things can move quickly as good ideas gain support and grow (aka show up in more places) while bad ideas are mocked, removed, and die.
And here's the kicker… when you have a variety of competing frameworks, even the "bad" ideas which are really just design/implementation tradeoffs may stick around in the communities in which they're needed. A framework monoculture doesn't allow the same thing to happen…