" But of course, you don't want to use delay, because they just waste time."
Let me quote another famous authority
"....ILLOGICAL..."
Your program task is to sequence thru events, there are NO other tasks.
The machine does not care if its "looping thru" the "loop()" managing time or just waiting at each sequence step.
If you are serious about learning programming start here - KISS.
But if you want to impress with complexity of your program , well , do whatever floats your boat.
PS
I would suggest two books to read -
" K&R C programming language" and "A (?) Cooper's Inmates are running the asylum".