Magento has some fantastic features, but it has some mind bogglingly bad ideas that it almost becomes unusable.
The worst one I came across is EAV (http://fishpig.co.uk/2010/06/07/magento-database-structure-eav/)
We were having a really strange problem with SagePay our payment gateway. Everything seemed to be working fine, and we launched the site. But then by chance one of us happened to order about 10 individual items and the payment failed, but Magento recorded a successful transaction. This would happen consistently. After a lot of digging around we discovered that SagePay would make a callback to Magento to verify the payment details, but the verification script would take over 30 seconds to complete execution by which point SagePay would give up and cancel the payment, but Magento would continue on and record a successful transaction once execution finished.
Further digging and we realised it was saving the order information and using EAV for every single item and generating about 6000 (not a typo, six thousand) inserts to the database. This cannot be fixed without a major restructure of the whole system. It relies on this far too heavily. I do not have a problem with the concept of EAV, I have used similar techniques myself when requiring something more flexible, but this is just Nieve and makes would could be a great system virtually unusable.