Yeah, OO really only works if you actually properly follow OO design patterns, and if what you're building is suited to it. The software I'm working on is OO and it works well 90% of the time, but there are some places where... odd choices were made, mostly in the direction of going a little too far with the abstraction, like the people who originally created the software were planning for things that never actually happened or blindly following a pattern that was used somewhere else just for consistency even though it's not actually the best pattern to follow. There are a lot of unnecessary layers in places which gets very frustrating.
The software was originally written like 15(?) years ago by a 3rd party before the company had its own in-house dev team, and boy do I have some questions 😂 about 60% of the system has been re-written and is significantly better, but unfortunately that entire last 40% is all very interconnected so would all have to be done at once, and the owner of the company is hesitant to pull the trigger on it for a variety of reasons (much to the frustration of those of us who have to continue maintaining and adding new features to the old code)