I suspect your while-loops are blocking. Not all while loops are blocking, but I suspect your while-loops are.
During the time that these loops are executing, no other tasks can be done, including checking pins to see if the signals have changed. That's why you are seeing interrupts as a potential solution. But they might fix one problem and cause 2 new problems.
Better to avoid blocking code so that interrupts are not necessary.