It seems like there's a decent amount of dislike around here for horribly overengineered APIs that are designed to be infinitely flexible and thus don't make simple things simple. Nonetheless, it seems like there is no shortage of APIs that require you to use 8 different classes and write 20 lines of boilerplate just to accomplish simple, common tasks. I won't mention names because this isn't supposed to be a flamewar about whether specific APIs are overengineered.
What do you believe is the root cause of these horribly overengineered APIs? What do you think needs to happen to prevent API designers from creating such monstrosities?
Edit: IMHO, not even the creation of reusable code is really a good answer because if the API is ridiculously difficult to use and requires tons and tons of boilerplate, the benefits of reuse become questionable.