Functions that return multiple types. Relying on private variables declared many level up with no intention of checking their existance or value, or sitting on perticular record numbers in tables from some other process blindly. 5 different versions of code doing the same relative process in slightly different ways depending on whichever developer's habit all live in a system. I've worked with a lot of old code from self taught engineers. You all may not like it or non-PC statement but it exists and its not pretty.
"I've worked with a lot of old code from self taught engineers."
Wait until you deal with code by university educated engineers who follow the rules of software development to the T. Design is emergent. If you see 5 different functions doing the same thing it sounds like you should go refactor it. Private variables that are unchecked? OMG, you might want to add a few asserts and a couple tests. These problems sound insurmountable.
It sounds like you're dealing with production code that makes money, probably so much that they can afford to pay you to improve it.
Thats what I'm doing. Refactoring and redesigning to be safer, more modular, and more optimized. Its one part engineering and one part CSI sometimes. It makes things like code contracts really exciting.