Lol, a hot female developer, haven't seen one of those in a while
Very recently, a friend of mine was curious on my project, and asked if she may view my code. Since she's kind of hot, I could not turn down such an offer. Brought out my laptop, turn it on, 5 minutes later, and I have my IDE displaying my codes to her. She glanced at them, and expressed befuzzlement at so many functions with the same name, different parameters, all inside a class.
I admit to her gullibly stating that those functions do specific tasks on different entities a game object may encounter throughout the game. After somewhat of a pep talk and chit-chat, she left, while I was having butterflies in my stomach and many second thoughts.
I would do it bit by bit. It does sound intimidating when you have a 30k line monolith that you've been adding to for the past two months and need to clean it up, but you need to do it until it reaches critical mass and becomes impossible to maintain. Do it slowly - find any repeated code, move it into a separate function. Divide your code into classes where it makes sense, and don't worry about performance. Delete any performance hacks you had before, you can always put them back in later, for now the code needs to be readable so you know where you are at. Comment a lot, but don't waste your time doing that. If you have unit tests, a good time to use them is every time you make a refactoring change (provided they don't take forever), this way you won't accidentally break code.
I looked over my codes, and realized it's really ugly. There are tons of codes overlapping one another, and places with the same logic in some of the functions. The more I look at it, the more it transforms into C-like and not Java-like, even though it's written in Java. And I probably am not good looking if my codes are also not good looking.
Should I consider myself a rewrite, even though the codes and the logic all function perfectly? There are thousands of codes written in "procedural Java" throughout the entire project, and this could take weeks...
Eventually you are bound to encounter a design flaw, a situation where your old code cannot neatly be refactored in a different form and needs to be rewritten more or less from scratch, but this kind of code is typically interface code which should only consist of a few method calls. Most of the complex code should be self-contained.