Мені подобається і підтримую відповідь mcottle, але я хочу висвітлити якусь іншу динаміку та аргументи, які інші відповіді ще не вивели.
По-перше, неявна відповідь mcottle - це той факт, що нижче певного рівня майстерності деякі проблеми просто неможливі. На жаль, те, як ви це дізнаєтесь, - це ваша команда намагається і не вдається, що є дужедорого. Після того, як цього не вдалося, з цього можна отримати два можливі уроки. Один з варіантів - ви дізнаєтесь, що вам потрібні більш компетентні розробники, і тому ви наймаєте їх, і ви завершите проект значно перевитрати бюджету та перевиконання графіку, але принаймні ви готові в майбутньому. Інший варіант полягає в тому, що такий проект є "надто важким" для вашої команди, і подібних речей не слід робити в майбутньому, тобто ви здаєтеся над проектом і фактично будь-який подібний. Звичайно, це рідко буде висловлюватися як "ми занадто німі, щоб це зробити", але натомість буде раціоналізовано як "наші системи дуже складні" або "у нас є багато застарілого коду" або деякі інші. Цей останній погляд може істотно перекрутити погляд компанії на те, що можливо та як тривалий / дорогий розвиток має бути. "
Одне питання - що конкретно планує ваша компанія? Гаразд, вони наймуть дешевих молодших програмістів. Три роки минає, тепер що? Що вони роблять з розробником, який був з ними протягом цих трьох років? Вони просто ніколи не давали йому / їй підвищення? Тут є такі варіанти:
- Вони дають підвищення конкурентоспроможності, щоб утримати працівників, і в цьому випадку чому б у них виникли проблеми із виплатою ставок старшого розробника зараз Повернусь до цього, хоча.
- Вони мають застійні ставки, що означає, що вони з часом "кипляться" для працівників, яким не вистачає драйву та / або навичок.
- Вони активніше усувають старших працівників.
Другі два випадки передбачають багато перекидання працівників, що означає втрату знань компанії та постійну виплату працівникам, які працюють на постійній основі. У другому випадку ви, по суті, вибираєте поганих розробників, тому витрати зростатимуть у вигляді збільшення графіків. Як це вийде, це все буде добре в проекті X, поки раптом Джим не піде, який був одним з кращих розробників, тому що не отримав підвищення за два роки, тепер проект "зрозуміло" займе значно більше часу, оскільки вам потрібно найняти та навчити нових молодших розробників, які (імовірно) не будуть такими ж хорошими, як Джим. Це те, як ви відкалібруєте очікування.
Навіть у випадку, якщо забезпечуються конкурентоспроможні підвищення, якщо все, що у вас є, є молодшими розробниками, де і як вони повинні навчатися? Ви в основному сподіваєтесь, що хтось із них самостійно засвоїть добрі практики, незважаючи на робоче середовище, і, врешті-решт, навчить інших (на відміну від виїзду на зелені пасовища). Було б набагато більше сенсу "прокладати насос" з якимись хорошими розробниками. Швидше за все, ви розвинете культуру початківців-експертів . У результаті ви сплатите ставки для старших розробників людям, які лише трохи кращі за молодших розробників та є культурними отрутами.
Однією з переваг, особливо, дуже хороших розробників є те, що я дивуюсь, що ніхто інший не згадав - це те, що вони можуть бути мультиплікативним фактором. Цілком може статися так, що молодший розробник та старший розробник витрачають однакову кількість часу, щоб скласти таблицю. Однак хороший розробник цього не зробить. Вони зроблять генератор таблиць, який скорочує час для створення всіх таблиць. Крім того / додатково, вони піднімуть стелю того, що можливо для всіх . Наприклад, розробники, які реалізували карту Google MapReduce, ймовірно, були надзвичайно кваліфікованими, але навіть якщо користувачі MapReduce, абсолютно не в змозі самостійно скласти широко розповсюджену версію свого алгоритму, тепер вони легко можуть з MapReduce. Часто ця динаміка менш кричуща. Наприклад, покращуються практики контролю над джерелами, тестування та розгортання всіх , але це може бути важче простежити за конкретною людиною.
Щоб трохи посперечатися з іншою стороною, можливо, вищі версії мають рацію. Можливо, більш досвідчені розробники не потрібні. Якщо це так, то, схоже, розвиток не є значною частиною компанії. У такому випадку я б просто повністю усунути розробників і використати позапрограмне забезпечення або найняти підрядників на вимогу. Можливо, варто вивчити, чому вони не використовують тільки підрядників, а не власну команду. Якщо у вас все одно буде багато співробітників, то нарощування підрядників не повинно бути проблемою.