When trying to join a server that is full, normally in Source you have an option to tick a box that tries to connect if there’s a spot when your client next queries. This makes it basically a game of luck/ping as you might not auto-query before others. I’ve had a significant amount of frustration with this myself.
I think it’d be better if there was a first in, first out system where trying to join a server while it’s full enters you into a queue where the person who tried to join first gets to do so. You could see what position you were in line so you know how long you might have to wait.
If the client does not respond within a small threshold, cannot pass a quick verification, or does not begin a connection within time then their ticket is dropped and the next is considered. This ideally wouldn’t take more than a few seconds, and pre-verification(for queues only) would filter out abusers.
Doing this properly may involve improvements to the(if there is a) Facepunch masterlist system. Or you could make sure sessionID/steamIDs were able to be checked on the server from clients trying to connect(BUT HAVEN’T YET) so addons could be made that use/edit this information.