It is very easy to accidently run code in the wrong RAM bank or access data in the wrong bank. How do you cope with that? Have you developed some kind of assertions or runtime checks to verify consistency at assemble- or runtime?
But that will require a lot of switching to access data from code or large part of common RAM. I'm trying to keep data where the code is and have both in both RAM banks. I think I'll prefer this, if I can avoid making too many mistakes.