"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.