I recently worked on a software project (very commonly used, probably on your computer

). This system was architected as about 90 separate components that communicated to each other through COM. It was awful.
I've never had an experience as terrible as I did with software and libraries that use COM. I wanted to rip my eyes out daily looking at the monstrosity.
For a quick example, there was one object that had 20 methods on it with the same name and parameters, except each one ended with a different number.
So like Method1, Method2, Method3, Method4, Method5 etc. They would all accomplish the same task in the long run, but each one had different sets of workarounds you had to apply to get it to work properly. Some would be really fast but might cause a segfault, some would be super slow but would always execute correctly.
Programming against moving targets is NOT FUN. D: