As a hobbyist, I don't have the benefit of experience that a lot of you professionals do. But mostly, I find that I hit a certain point and go, "oh, I should have done this fundamental thing differently." So I'm trying to have a bit more organization, so maybe I don't trip quite so much.
As an example, I had been having the actors handle attacks; when one attacked another, the agressor ran Actor.attack(Attack att, Actor defender). Which is all fine, until I start doing area of effect attacks, and I need to involve the engine (as the actors don't usually have access to the map; just when making decisions). Also, having the engine execute actions allows me to treat non-attack actions like attacks (I can handle it all with Engine.executeAction(Actor actor, Action action, Coord target)).
While this one thing doesn't take too long to change, I find I quickly get a pile of these. Then I start having a hard time remembering where particular routines were, I spend a lot of time bug-hunting for errors caused by gutting and relocating, etc.
And I'm a deli clerk. It's not like I come home from work intellectually exhausted.