Good question! It’s a tough one to answer, but I’ll try.
I’ve been building the same code base since Siralim 1, so I’ve been working with the same code for about 5 years now. It grows over time as new features are added/removed/changed, but somehow, you start to know exactly where everything is after a while. It’s horribly ugly spaghetti code. I’d be embarrassed to show it to anyone. But it becomes a second language when you work with it 60-70 hours per week. You’d be surprised at how your brain manages to organize everything so that when there’s a bug, you at least have some idea about where to start looking for issues.
However, probably 70-80% of the bugs/crashes in the game come from mere typos, which is really the biggest drawback to using GameMaker that I’ve found so far - just about any other IDE in existence wouldn’t even allow that to happen.
The biggest problem that I run into now is that a lot of my code was written when I first started using GameMaker, and a lot of it falls victim to some GameMaker-specific nuances that I didn’t know existed. For example, I had no idea that you needed to explicitly declare a variable in a script with “var” in order to keep it local to that script - otherwise, you could accidentally use or modify a variable from another script or object instead. I also never took advantage of parent objects, so all the GUI elements are separate objects. That’s really bad.