Whenever you start working on a project you can be tempted to make some short-term trade-offs to get something out the door quicker. This can apply to anything that is complex enough, but I’m coming from my experience in programming.
A word has been coined to cover what it is: tech debt. The little shortcuts that you took that are now warts on your system. Some of these things are pretty minor and you only ever get annoyed when you’re in that bit of code. It’s the parts of the codebase that people are afraid to touch. The parts that you don’t know they’re working correctly, but the system works with it — maybe even fixing something in the code can break the system as a whole if it’s relying on a bug.
Then there’s real problems.
When the code is patched together so poorly that even the tools give up on it. When the only way of testing your code is by compiling it (and hoping it works) then running it to see how it reacts to inputs. When even the debugged can’t attach to it something is well and truly broken.
The tools you have in front of you need were built to allow you be effective at your job. When the hacks and shortcuts break your tools you have gotten yourself into you know that whatever you’re doing are not playing to your strengths. What you can’t let yourself do is ignore the tools and and support that you have in front of you.
Don’t go there.
You can’t really dig out of that short of replacing the system you’ve screwed up so badly.