Learn BlinkWithoutDelay. (except make all the time variables unsigned long)
It's in your IDE under File->Examples->02.Digital->BlinkWithoutDelay
There isn't 20 lines of actual code.
You can time as many dynamic events as you can have a 32-bit start time and a 32-bit interval for, or 16 bit vars if you're only timing short intervals or 64 bit unsigned long long if you want to time micros over huge intervals....
There's even a Timer Library you can use if you want, and note that the only hardware timer used is the one running the millis() clock. 1 clock to time as many events as you can fit.