The best suggestion I can give you is to break your problem up into smaller pieces. It sounds like you're already doing that to a certain extent, which is awesome, but keeping those pieces separate...