Having to correct a bug in a "shared" component.
And by "shared", I mean "shared" as in "Hey, everyone touch this component and add his/her prefered feature to it."
It has an orgy-like smell that makes me gag everytime I have to delve into a less than stellar code which grew by random iteration and patching without a clear vision of what it was supposed to do ("specifications are not mandatory, you know").
You know, the kind of code where there are more ifs and switchs than variables and functions. The kind of code proving that a code quality of a component is of the level of the less skilled developer that once contributed to it. The kind of code that makes your eyes cry tears of blood, and wonder if you should not become Serial Killer instead of Developer...
Because, when you "touch" this kind of code, your greatest wish is to have it work the same way as before but for your little corner case (thus, you add a bunch of ifs atop a mountain of ifs).
Because your worst nightmare is to have a bug assigned to you because you were the last one to modify the code. Or even to look at the source. Or even, to use the component (This is the moment you lose your innocence).
Having to correct a bug in an unmaintained "Core Component"
In "our" team, we have a bunch of in-house developments. Like Joel Spolsky said, "if a module is the core of your business, then do it yourself". Apparently, everything in my team is the core of the business.
To make the taste more spicy, until recently, everything was developed using Win32 API (again, we can't trust MFC or whatever amateurish external library like QT).
So far so good...
But mix it with the "shared" philosophy mentioned above, and the fact that the author of the component did quit years ago and that no one is now (or feels now) responsible of the component.
you know, the naive faith of some non-technical managers about the fact developers are interchangeable monkeys...?
Welcome to the zoo... (Real life example)
This is a real-life example. It happened this week, in fact (truth to be told, it is a real core component, which adds its own perversion to the subject).
In the current case, one year ago, I mentioned the fact we would lose less time by using already existing libraries. The counter argument used was that we did not control the code of external libraries, nor the speed of their bugs correction, and thus, it was better to have our own code, as we could always correct any bug when needed.
Some days after (destiny has its own sense of irony), I discovered one of the core components had such a bug. This bug was serious, but it would only express itself in some corner case situation. They tried to assign its correction to me, but as I was overbooked (Lucky me!), no way I would spend days or weeks in 20,000 lines of old C code using obscure Win32 API functions you don't want to know they exist.
One year after, and guess what, the bug was still there. So much for the "Hey, we develop in-house because we can correct it fast."
And guess what? Someone outside the team saw it.
And guess what? They assigned it to me.