Lots of hate here...
And I understand the hate. However Drupal itself is very flexible and can be very good.
Unfortunately there are some serious problems, a lot stemming from the core developers who can often be politely termed "asshats" who in the past have been so blinkered and elitist that they didn't care for suggestions or improvements unless they came from within. This has improved but there's still far too much of it...
Documentation - the general response is "go read the source code". Erm, if I wanted to do that I wouldn't be looking for documentation would I? While there is some good documentation, unfortunately most of it is utterly appalling and you're left having to a global source search to find usage of the methods/functions and guess from there. And that's if the method/function is actually used in the source you have, or hasn't been obfuscated through the module system. Basically unless you're an expert in PHP then you'll find the documentation mostly useless but you'll be left admiring where all the CPU cycles have gone to perform very little of real benefit (Drupal 8 is an improvement on this front).
Without turning this into a rant, I've found that the best way to work with Drupal is:
1) Try to do everything "the Drupal way" - even if it's not quite the way you'd like to do it, it will save you a huge waste of time fighting it. Working out what "the Drupal way" is in a given situation is not always easy though given the pathetic documentation but often it does come with a lot of benefits.
2) Use as few modules as possible. It should be very obvious that the more modules you drop in the worse site performance will be but this doesn't stop some folk from doing this. As posted above, it's often that you find a module does 90% of what you need but lets you down on the other 10%. Sometimes this isn't a problem, others you may need to put some custom functionality in and a moderately experienced PHP developer shouldn't have a problem with this. This doesn't help hopeful end users though but in reality this isn't any difference to WorkPress modules except it's slightly easier to resolve with a PHP developer.