Most of you have probably seen some good players predict where a player will spawn next on a map like crossfire. Although some of you think that it's a random process, and well it is, but it's not truly random. Knowing the system WILL give you an advantage, but you probably already know that if you've played or seen a crossfire match of top level players.
The idea behind it all is simple - every map has a spawn point order. When a mapper creates a map, he places them in some order, most of them place spawnpoints after they create everything else, so spawn points usually follow some path, or atleast they are clustered in groups. For example you can see the order of spawn points on crossfire in the following image.
You can determine the order of spawn points using a program like BSPViewer.
The first spawn on the map after a mapchange or a match start is random as far as I know. But all of the next spawns are not fully random. Every spawn after the first one will be up to 5 spawn spots away. For example you spawn at the spawn point 1, then someone kills you. Then you will only spawn in one of the points from 2 to 6, which will be picked randomly. Another example would be if your enemy spawned on the spawnpoint number 15, then after you killed him he would only spawn on one of these spawn points : 16, 17, 1, 2, 3.
The only exception is that if the spawn point that is randomly chosen is taken, e.g. if someone is standing on it, then the next one is chosen, and if that one is invalid too, then the next one is chosen, and so on.. And if there are no valid spawn points, then the person standing on the one that was selected first would be killed, and you would spawn. For example, some of you may know, that this happens on agtricks map when more than one person happens to spawn at once, because that map has only one spawn point.
I you have doubts about this then you can find this information by yourself by reading the source code from half-life sdk, if you know C/C++ you can find a relevant code snippet
here.