I think the most useful thing OO has to offer is dynamic polymorphism. I also think dynamic polymorphism is overkill in most cases (static polymorphism, be it ad-hoc or parametric, would substitute it just fine) and hence isn't worth all the mind-numbing bullshit cruft OO carries along with it: overdesigned methodologies, annoying best practices, crazy OO zealots, ENTERPRISE TURNKEY SOLUTIONS, etc.