Мне нравится и одобряет ответ Маккоттла, но я хочу рассказать о некоторых других динамиках и аргументах, которые другие ответы еще не приводили.
Во-первых, в ответе Маккоттла подразумевается тот факт, что ниже определенного уровня квалификации некоторые проблемы просто невозможны. К сожалению, способ, которым вы узнаете это, - ваша команда пытается и терпит неудачу, что оченьдорогой. После неудачи, есть два возможных урока, чтобы извлечь из этого. Один из вариантов - вы узнаете, что вам нужно больше компетентных разработчиков, и поэтому вы нанимаете их, и вы выполняете проект значительно сверх бюджета и по графику, но, по крайней мере, вы готовы в будущем. Другой вариант заключается в том, что такой проект «слишком сложен» для вашей команды, и такие вещи не следует предпринимать в будущем, т. Е. Вы отказываетесь от проекта и, по сути, от любых подобных. Конечно, это редко будет формулироваться как «мы слишком глупы, чтобы делать это», но вместо этого будет рационализировано как «наши системы очень сложны» или «у нас много устаревшего кода» или некоторых других. Этот последний взгляд может существенно изменить взгляд компании на то, что возможно и как долго / дорого должно быть развитие. "
Вопрос в том, каков план вашей компании? Хорошо, они будут нанимать дешевых младших программистов. Прошло три года, что теперь? Что они делают с разработчиком, который был с ними в течение этих трех лет? Они просто никогда не давали ему / ей повышение? Варианты здесь следующие:
- Они дают повышение на конкурсной основе, чтобы удержать сотрудников, и в таком случае, почему у них возникнут проблемы с выплатой старшим разработчикам? Я вернусь к этому, хотя.
- У них застойные темпы, что означает, что они в конечном итоге собираются "сводиться" к работникам, которым не хватает вождения и / или навыков.
- Они более активно снимают более старших сотрудников.
Вторые два случая подразумевают значительную текучесть кадров, что означает потерю знаний компании и постоянную оплату наемным работникам. Во втором случае вы, по сути, выбираете плохих разработчиков, и поэтому затраты будут расти в виде увеличения графика. В этом случае все будет хорошо в проекте X, пока вдруг Джим не уйдет, кто был одним из лучших разработчиков, потому что он не получил повышение в течение двух лет, теперь «по понятным причинам» проект займет значительно больше времени, так как вам нужно нанимать и обучать новых младших разработчиков, которые (по-видимому) не будут так хороши, как Джим. Это то, как вы перекалибруете ожидания.
Даже в том случае, если предоставляются конкурентные повышения, если все, что у вас есть, это младшие разработчики, где и как они должны учиться? В основном вы надеетесь, что один из них самостоятельно изучит передовой опыт, несмотря на свою рабочую среду, и в конечном итоге станет наставником для других (в отличие от ухода на более зеленые пастбища). Было бы гораздо больше смысла «заправлять насос» некоторыми хорошими разработчиками. Скорее всего, вы будете развивать культуру начинающих экспертов . В результате вы в конечном итоге будете платить старшим разработчикам людей, которые лишь немного лучше, чем младшие разработчики и культурно токсичны.
Я удивлен, что никто другой не упомянул одно преимущество, особенно очень хороших разработчиков, - они могут легко стать мультипликативным фактором. Вполне может быть, что младший разработчик и старший разработчик тратят одинаковое количество времени на создание таблицы. Однако хороший разработчик этого не сделает. Они создадут генератор таблиц, который сократит время на то, чтобы каждый мог создать стол. Альтернативно / дополнительно, они поднимет потолок того, что возможно для каждого . Например, разработчики, которые внедрили Google MapReduce Framework, были, вероятно, чрезвычайно квалифицированными, но даже если пользователиMapReduce совершенно не в состоянии сделать массово распределенную версию своего алгоритма самостоятельно, теперь они могут легко с MapReduce. Часто эта динамика менее вопиющая. Например, улучшенные методы контроля версий, тестирования и развертывания делают всех лучше, но отследить конкретного человека может быть сложнее.
Чтобы немного поспорить с другой стороной, может быть, высшие люди правы. Возможно, более опытные разработчики не нужны. Если это так, то кажется, что развитие не является важной частью компании. В этом случае я бы просто полностью исключил разработчиков и использовал бы готовое программное обеспечение или нанимал подрядчиков по требованию. Возможно, стоит изучить, почему они не просто используют подрядчиков, а не внутреннюю команду. Если у вас все равно будет много сотрудников, то увеличение количества подрядчиков не должно быть проблемой.