I think I want to go on record as not being a fan of Drupal. In the world of stability versus flexibility, I think Drupal comes out on the losing end: in its attempt to be as flexible as possible, it comes to rely on the database connection extremely heavily, and under pressure it would most likely collapse. On each page load, Drupal hits the database at least a hundred times, if not more. Yes, the standard Drupal installation tells the user to turn on database caching, but that seems more like a patch rather than fixing the core issue of having that many database calls in the first place. Incidentally, that number of calls sharply increases with every module that gets added on.
There’s also something that doesn’t sit right with me about their hook system. Yes, it’s a clever solution, but in today’s hip PHP 5.3 world, a non-object oriented solution seems almost antiquated. I’m not saying there’s a better solution that is OOP, but the current implementation is clunky, and it can be hard to actually find out what’s happening when you load a page unless you scan through every single hook in every single module. And then there’s the theming system. I don’t understand why I have to make seven different templates just to customize the way part of a block is displayed. Why does each field need its own template? Shouldn’t the user just be able to iterate over a single object (say, a node) and render its constituent parts?
Switching gears, there’s a group of people out there who, for some reason, are promoting Drupal as part of the upcoming semantic web and all that jazz. To its credit, by default Drupal 7 does indeed tag parts of a page properly (foaf:name and all that), but that doesn’t mean that it automatically wins and should be the de facto standard. Honestly, it should be relatively trivial to tag that sort of data in any framework, or really any time text is displayed – it just means that the developer has to be aware of the necessary changes. I don’t see the justification for why a bloated piece of software wins out by default just because it handles something this small.
As a side note, I find it particularly shortsighted of some people to push the LAMP stack as the way forward. Yes, all the work I do is in the LAMP stack, but to completely rule out other options like Python and Ruby, NoSQL in its various forms, and node.js just seems incorrect. At the end of the day, as long as the site’s performance is usable and the interface is intuitive, the stuff backing it isn’t as important. The bottom line, I think, is that developers should use the tech they feel most comfortable with.