First, you check everything out from the insanely bad SCM tool, to find out your favourite IDE won’t have enough RAM to build the thing, and you’ll have to use something else. You also find out that most tools can’t help you anymore, because they die a horrible death when trying to make sense of all that code.
You try and follow Michael Feather’s brilliant Working Effectively with Legacy Code (PDF link), and manage to isolate a tiny bit of functionality, test it and make sure you can fix the behaviour properly. That gets you trapped in a maze of circular dependencies with some other 30 other packages.
Your vision gets blurry, and you go out looking for something sensible to do, like searching for pictures of screaming trapped babies.
But there’s more. The build is so complex Ant didn’t cut it, and using something built in-house was the best way. But you don’t want to mess with that yet, because you don’t know what else could break. In fact, breathing near some parts of the code could make them break. And it takes time to know it, cause it takes half a day to get feedback from something you committed by the continuous integration machine.
You yearn the days when Find Usages was one of the most valuable keyboard shortcuts in your IDE. When using one O/R mapper was already troublesome enough - instead of the handful you have now.
If you excuse me, I’ll go look at some more pictures of screaming babies.