I second this. I hate programmers that use inheritance and polymorphism simply for the sake of using it. For the love of God, if you don't actually need it, or if it doesn't make everything simpler, don't use it!
However, depending on how the spaghetti code has been done, it can be just as annoying. If they're using GOTOs at all, or returning from functions in odd places that aren't obvious, it's not fun to debug, but I'd still prefer this to overengineering.
If they've combined overengineering with spaghetti code, it takes all my strength to keep from stabbing them in the face.
I also love people that use clever ways of causing functions to get called automagically. Like using the get/set of a property to call some method that's only slightly related to that property, but also does something incredibly important for the functionality of whatever class that property is in.