if you mean without being Reliable then just make it Reliable, there are literally few things more important than a player joining and its a one time event. this is literally what Reliable is for
this is the eternal question isnt it, thats why i use a loadscreen to manage player joining. that way you can have a global system behind it that decides when the game is loaded. I async load most assets so i just have a list of assets i need loaded and wait for them.
delays are never the answer, i guess you could have a looping delay with checks but still very inelegant