Drag Race Countdown

05AB1E, 12 bytes

3LRε=₄D;ŸΩ.W

Try it online!


3LR          # Push [3,2,1]
   ε         # For each...
    =        # Print it.
     ₄       # Push 1000.
      D      # Duplicate top (1000).
       ;     # Divided by 2 (500).
        Ÿ    # Range from b to a ([1000 .. 500]).
         Ω   # Random pick.
          .W # Wait X ms.

Try it with debug enabled: Try it online!


SmileBASIC, 64 62 bytes

?3M?2M?1DEF M
M=MILLISEC
WHILE MILLISEC<M+500+RND(501)WEND
END

Unfortunately I can't use WAIT since that only supports intervals of 1/60 of a second (anything less isn't normally useful since input/output only update once per frame)

This requires adjustment depending on the speed of the system it's running on, so it might not be valid (46 bytes):

?3M?2M?1DEF M
FOR I=-66E4-RND(66E4)TO.NEXT
END

Invalid WAIT version (36 bytes):

?3WAIT 30+RND(30)?2WAIT 30+RND(30)?1

R, 46 44 bytes

for an actual countdown:

for(i in 3:1){cat(i)
Sys.sleep(runif(1,.5))}

Try it online!

printing interval as I initially misunderstood the challenge (46 bytes) Thanks Giuseppe for saving 2 chars.

for(i in 3:1)cat(i,format(runif(1,.5),,2)," ")

Try it online!