В каждой такой компании присутствуют большая иерархическая лестница состоящая из менеджеров различного уровня и тестеров\девелоперов\аналитиков в самом низу.
По своему опыту могу сказать, что менеджерами становится люди как компетентные, уважаемые профессионалы, так и те, кто с трудном ориентируются в разработке(такие обычно берутся из тестеров\аналитиков). Т.е. от компетентности продвижение по карьерной лестнице не зависит или зависит очень слабо. Играет большую роль случай(уволился вышестоящий менеджер, надо срочно его кем-то заменить), близость к начальству(совместные пьянки, общение), треп на митингах.
Я не говорю, что это плохо, that's how things work, просто принимаем, как данность.
И вот представим рядового девелопера, работающего в одной из таких компаний, который желает стать PM(говорю применительно к себе, но данный вопрос должен быть близок многим программистам). Наверху может стоять как компетентный PM, так и некомпетентный. Вопрос, как выбиться в менеджеры? Можно брать на себя все более ответственные и сложные задачи, но вокруг сидит куча девелоперов, реальных гуру, которые несмотря на всю свою крутость тупо педалят код. Если чувак хорошо справляется с разработкой, зачем его делать менеджером? Можно попытаться брать на себя больше административных функций, но будучи девелопером это не всегда просто делать. К тому же административные функции это обязанность PM, если пытаться их перетянуть на себя, он может решить, что ты хочешь его подсидеть. Еще один момент, чтобы тебя повысили, нужно чтобы о твоих успехах узнал менеджер стоящий над твоим менеджером. Но с ним нет прямой связи, ему о обо всем рапортует твой PM и очень часто попадается такой человек(особенно среди некомпетентных менеджеров), который все факапы сбрасывает на подчиненных, а успехи выдает как свои личные достижения. И как его обойти непонятно.