Во-первых по выслуге. Воинское звание отражает статус военного в системе. В каждом звании военнослужащий находится определенный период, после чего ему присваивают очередное звание.
Во-вторых, есть такая тонкость, как должность. Они находятся в связи со званиями. Например если офицер или сержант получил более высокую должность, то и звание может получить раньше. И наоборот, если офицер засиделся на должности, а по выслуге пора бы перейти на ступень выше, то звание может "задержатся".
Например если "старлей" засиделся на должности командира взвода, то ему нужно встать на должность командира роты или батареи, чтобы получить капитана.
Переход в старшие офицеры ( от майора и выше ) требует окончания военной академии. После чего они встают командирами батальонов и дивизионов, а так же начальниками штабов в них. А генералам уже нужна академия Генерального штаба.
Сегодня многое ужесточилось, и порядок пребывания в том или ином звании четко обозначен. Раньше, особенно сержантам и прапорщикам можно было выслужиться быстро.