Given the size of the codebase it sounds like don't have the ability to completely restart from scratch to restructure the code.
If you were at the start then I would advise you to use Test Driven Development (TDD), and to make sure that you keep the user interface code as separate as possible from the rest of your code, as it is notoriously difficult to test in an automated fashion. I woudl still advise you do some reading about TDD, and also about User Interface Design Patterns
It sounds like what you want however is a way to go forwards with an existing body of code though, which I am going to assume is not structured in a way that is amenable to Automated Testing, as this seems unlikely from what you have said.
In this scenario, you are probably doing the right thing. It is certainly important to keep the length of time between you adding a feature and testing a feature short, as keeping this feedback loop short will make it easier to check that your code does what you expect it to do since you wont have forgotten what you were trying to achieve when you test it.
If you find that you are wasting a lot of time compiling and loading your app try and bunch related changes together particularly when doing simple changes. This should help you to get the balance correct.
Although I am assuming you cannot make wholesale changes to existing code, something you may be able to do is to write new code in a more testable way, and write unit tests for those, but you will have to weigh up the cost of having code which ends up with a number of different coding styles against having one coherent style.