Давайте поговорим о карьере в программировании, но оставим в стороне наскучившие темы вроде зарплаты или способов пройти собеседование в компанию с туго набитым пакетом вознаграждений. Обсудим лучше, как ваше положение относительно целей компаний и ее движения к ним влияет на характер работы и какие качества и навыки оно помогает вам развить.
Представьте себе упрощенную реальность, в которой существует только корпоративное ПО, а все должности разработчиков можно разделить на две обширных категории. Что я подразумеваю под корпоративным ПО? Большие безликие программы, которые используются в крупных компаниях. В своем повествовании я буду приводить примеры и из других областей, но пусть вас это не смущает.
Итак, программы у нас пишутся только для корпораций и, соответственно, работу вы можете найти в двух типах компаний. Вариант первый: вы можете устроиться в крупную корпорацию, чтобы писать и поддерживать там биллинговую систему для внутреннего применения. Вариант второй: вы можете работать за пределами этой крупной корпорации и продавать им ПО и услуги по разработке.
Вы выбираете между Duke Energy (крупная коммунальная компания) и Thoughtworks (компания, которая занимается консалтингом). Но, по надуманному стечению обстоятельств, там и там вам предстоит работать над биллинговой системой, рассчитанной на нужды коммунальной компании.
Может показаться, что эти варианты очень похожи. Кто-то даже скажет, что между работой в технической команде внутри компании и работой в технической команде на стороннего заказчика нет никакой разницы:
В конце концов, что в Thoughtworks, что в Duke Energy вы будете работать на коммунальную компанию – искать слабые места в существующей системе и писать для них решения. Но между соответствующими должностями есть одно важное различие: одна из них линейная, а другая – аппаратная.
Разделение рабочих должностей на линейные и аппаратные (или штабные) пришло к нам из военного дела. Офицер, которому поручено сражаться на линии фронта, напрямую делает вклад в основную миссию. С другой стороны, штабный офицер только обеспечивает поддержку – выполняет обязанности врача, техническую или управленческую работу.
Из военного дела эта терминология перетекла в менеджмент, где породила удобный принцип классификации сотрудников:
По определению из Википедии, получается, что вид должности задается самой профессией: например, бухгалтер может быть только аппаратным сотрудником. Однако тут всё зависит от того, где бухгалтер работает – в аудиторской фирме, скажем, он будет линейным работником. У разработчиков всё обстоит так же: они могут относиться и к той, и к другой разновидности, причем тип должности определяет темп их работы и карьерные перспективы. Если вы разберетесь, в чем состоят отличия, вам будет проще выстраивать карьеру.
Вернемся к нашему примеру. В компании Duke Electric разработчики – аппаратные сотрудники. Биллинговая система – вспомогательный компонент в работе Duke Electric. Продуктом деятельности компании является электричество, а не ПО для выставления счетов. А вот у команды из Thoughtworks на кону стоит значительно больше, пусть даже они работают над схожей биллинговой системой для региональной коммунальной компании примерно такого же калибра (Dominion Energy, допустим).
Кто-то из Thoughtworks сумел убедить представителей Dominion Energy, что компания сделает для них превосходную биллинговую систему и выставил им за это счет на круглую сумму. Если всё пойдет хорошо, то сотрудничество будет продолжаться, возможно, и до этапа создания whitepaper дойдет. После этого Thoughtworks будет пытаться наладить связи с другими региональными коммунальными службами (Florida Power & Light, мы идем к вам!). Иными словами, если вы работаете в команде, которую отрядили на заказ Duke Electric, и поставите что-то в проекте под угрозу, вас могут пересадить на скамейку запасных, а оттуда уже и до увольнения недалеко.
С другой стороны, если кто-то из лиц, задействованных в обслуживании биллинговой системы, пожалуется на вашу работу во внутренней команде разработчиков Duke Electric, начальство только рукой махнет и жизнь пойдет своим чередом. Внутренние команды никак не ощущают на себе давления рынка, и в этом есть как плюсы, так и минусы. У внутреннего заказчика есть только один поставщик (то есть вы), а вы, в свою очередь, работаете с единственным заказчиком. Эта схема не лучше, чем схема консалтинговой компании, она просто другая – в чем-то удачнее с точки зрения карьеры, в чем-то неудачнее. О достоинствах и недостатках я подробнее расскажу чуть позже, но сначала заезжу тему с классификацией до полусмерти.
Вот несколько примеров по конкретным должностям:
Границы размыты, однако мне кажется, что определить тип команды, в которую вы входите, можно даже по ощущениям. Например, если ваша команда программных инженеров или специалистов по DevOps работает под серьезным давлением, пользуется большим уважением в компании, считается критически важной для достижения глобальных целей – тогда у вас линейная должность. И наоборот, если у вас всё неспешно, про вас часто забывают и вообще вы где-то на задворках, значит, команда аппаратная.
Иногда проще всего разобраться исходя из структуры компании.
В большинстве случаев самый простой способ понять, аппаратный вы сотрудник или линейный – посмотреть, из кого состоит штат вашей компании. Если вы относитесь к самой крупной категории, то вы линейный сотрудник. В армии докторов всегда меньше, чем солдатов, а в аудиторской фирме программистов меньше, чем бухгалтеров.
Тема линейных разработчиков в IT-компаниях раскрыта уже вдоль и поперек. Рассказ Майкла Линча о плюсах и минусах работы в Google – отличный материал. «Я был окружен самыми талантливыми разработчиками в мире, пользовался самыми совершенными инструментами для разработки и ел самую бесплатную еду». Стоит прочесть и статью Зака Ллойда о культурах, ориентированных на повышение.
Но если вкратце выделить основное:
Преимущества работы в компании не из IT-сферы (то есть на должности аппаратного разработчика) описаны гораздо более скупо. Но они существуют.
В организации, где большинство команд состоит из людей, выполняющих ту же работу, что и вы, продвигаться вверх будет тяжело. Например, я как-то управлял двенадцатью разработчиками на должности техлида. Мой начальник руководил таким же количеством техлидов. Подобная прогрессия продолжалась вплоть до технического директора. Поэтому, если тому, кто мечтает когда-нибудь добраться до самой верхушки, пришлось бы переиграть 12^N людей, которые отделают его от технического директора или директора по продукту, а это сурово.
Вместе с тем, у меня есть друг, который занимается разработкой ПО в коммунальной компании. В его команде шесть человек, а начальник отчитывается перед высшим руководством. Когда начальник уходит в отпуск, друг докладывает о ходе работ главному операционному директору.
Именно через это различие в крутизне карьерных лестниц я и постиг разницу между линейными и аппаратными должностями. Преподаватель одного из управленческих курсов, которые я слушал в университете, как-то заметил, что пытаться стать партнером в Goldman Sachs – пустая затея, а вот дойти до должности финансового директора в одной из тысяч компаний открытого типа вполне реально. Так что для тех, кто метит в верхушку, аппаратная должность выгоднее линейной. В самом деле, финансовые директора становятся исполнительными, когда компания сталкивается с серьезными финансовыми сложностями, которые заслоняют все остальное. В том же ключе, в свете того, что в Starbucks объявили, что делают основной упор на технические аспекты, и назначили исполнительным директором Кевина Джонсона, программиста, аппаратные разработчики компании оказались сейчас в отличном положении.
В любой технической компании, особенно в крупной, вы будете на чем-то специализироваться. Вы можете стать экспертом в том, что касается некой подсистемы или определенного компонента стэка – не завидую вам, если когда-нибудь придется объяснять маме, в чем заключается ваша работа. На аппаратной должности в компании вне IT-сферы у ваших обязанностей, вероятно, будет более широкий охват с меньшей глубиной. Возможно, вам придется обсуждать проект с другими заинтересованными лицами, вносить изменения во фронтенд, писать бэкенд и поддерживать базы данных в рабочем состоянии. В организациях определенного размера вам придется заниматься всем этим в пределах одного дня, а потом еще изучать особенности той сферы, в которой работает компания.
Если вам нравится широкий охват и интересно разбираться в том, как функционирует бизнес, такая модель работы вам хорошо подойдет.
Область, в которой занята компания, и тип людей, которых она нанимает, оказывают своё влияние на то, чего ждут от сотрудников и что в них ценят. В IT-компании, где средний возраст сотрудника составляет двадцать восемь лет, ценности иные, нежели в аудиторской фирме, где работают в среднем сорокасемилетние. Если перспектива десятилетиями работать в одном и том же окружении вам милее разливной комбучи, лучше отдать предпочтение индустрии с более спокойным ритмом.
В коммунальной компании разработчику будут платить меньше, чем единорогу в стартапе, но при этом коммунальные компании исходят из того, что вы будете работать на них долгие годы. У местной коммунальной компании вознаграждение в целом меньше, но зато есть профсоюз и пенсия, да и в целом, там осознают, что всё, что они вкладывают в сотрудника, может окупиться на протяжении всей его карьеры, а не за период передачи прав по акциям. Для многих работников это достойный компромисс.
Так что, раздумывая над будущим местом работы или над тем, как хотите провести десятилетия, из которых сложится ваша карьера, спросите себя, какая должность вам подойдет больше – линейная или аппаратная. Они сильно отличаются, и, если мясорубка продуктовой компании вас выжала досуха, возможно, вам понравится работать в небольшой команде разработчиков в компании, не относящийся к IT-сфере.
А если вы пробовали работать там и там, расскажите о своем опыте. Какие преимущества и недостатки вы отметили для себя?
Упрощенная реальность
Представьте себе упрощенную реальность, в которой существует только корпоративное ПО, а все должности разработчиков можно разделить на две обширных категории. Что я подразумеваю под корпоративным ПО? Большие безликие программы, которые используются в крупных компаниях. В своем повествовании я буду приводить примеры и из других областей, но пусть вас это не смущает.
Итак, программы у нас пишутся только для корпораций и, соответственно, работу вы можете найти в двух типах компаний. Вариант первый: вы можете устроиться в крупную корпорацию, чтобы писать и поддерживать там биллинговую систему для внутреннего применения. Вариант второй: вы можете работать за пределами этой крупной корпорации и продавать им ПО и услуги по разработке.
Вы выбираете между Duke Energy (крупная коммунальная компания) и Thoughtworks (компания, которая занимается консалтингом). Но, по надуманному стечению обстоятельств, там и там вам предстоит работать над биллинговой системой, рассчитанной на нужды коммунальной компании.
Может показаться, что эти варианты очень похожи. Кто-то даже скажет, что между работой в технической команде внутри компании и работой в технической команде на стороннего заказчика нет никакой разницы:
Если вы принадлежите к команде разработчиков в составе крупной компании не IT профиля, вы фактически работаете в штатном агентстве с единственным клиентом. – The Coding Career Handbook
В конце концов, что в Thoughtworks, что в Duke Energy вы будете работать на коммунальную компанию – искать слабые места в существующей системе и писать для них решения. Но между соответствующими должностями есть одно важное различие: одна из них линейная, а другая – аппаратная.
Линейные и аппаратные разработчики
Разделение рабочих должностей на линейные и аппаратные (или штабные) пришло к нам из военного дела. Офицер, которому поручено сражаться на линии фронта, напрямую делает вклад в основную миссию. С другой стороны, штабный офицер только обеспечивает поддержку – выполняет обязанности врача, техническую или управленческую работу.
Из военного дела эта терминология перетекла в менеджмент, где породила удобный принцип классификации сотрудников:
Терминами «штабный / аппартаный» и «линейный» обозначают разные виды полномочий в организациях. «Линейные полномочия» напрямую способствуют выполнению организацией ее базовых функций. К ним всегда относятся производство продукции и продажи. «Аппаратные полномочия» поддерживают работу организации за счет специализированных консультаций и вспомогательных функций. Управление кадрами, бухгалтерию, пиар, юриспруденцию, как правило, относят к аппаратным полномочиям.– Wikipedia
По определению из Википедии, получается, что вид должности задается самой профессией: например, бухгалтер может быть только аппаратным сотрудником. Однако тут всё зависит от того, где бухгалтер работает – в аудиторской фирме, скажем, он будет линейным работником. У разработчиков всё обстоит так же: они могут относиться и к той, и к другой разновидности, причем тип должности определяет темп их работы и карьерные перспективы. Если вы разберетесь, в чем состоят отличия, вам будет проще выстраивать карьеру.
У линейных ставки выше
Вернемся к нашему примеру. В компании Duke Electric разработчики – аппаратные сотрудники. Биллинговая система – вспомогательный компонент в работе Duke Electric. Продуктом деятельности компании является электричество, а не ПО для выставления счетов. А вот у команды из Thoughtworks на кону стоит значительно больше, пусть даже они работают над схожей биллинговой системой для региональной коммунальной компании примерно такого же калибра (Dominion Energy, допустим).
Кто-то из Thoughtworks сумел убедить представителей Dominion Energy, что компания сделает для них превосходную биллинговую систему и выставил им за это счет на круглую сумму. Если всё пойдет хорошо, то сотрудничество будет продолжаться, возможно, и до этапа создания whitepaper дойдет. После этого Thoughtworks будет пытаться наладить связи с другими региональными коммунальными службами (Florida Power & Light, мы идем к вам!). Иными словами, если вы работаете в команде, которую отрядили на заказ Duke Electric, и поставите что-то в проекте под угрозу, вас могут пересадить на скамейку запасных, а оттуда уже и до увольнения недалеко.
С другой стороны, если кто-то из лиц, задействованных в обслуживании биллинговой системы, пожалуется на вашу работу во внутренней команде разработчиков Duke Electric, начальство только рукой махнет и жизнь пойдет своим чередом. Внутренние команды никак не ощущают на себе давления рынка, и в этом есть как плюсы, так и минусы. У внутреннего заказчика есть только один поставщик (то есть вы), а вы, в свою очередь, работаете с единственным заказчиком. Эта схема не лучше, чем схема консалтинговой компании, она просто другая – в чем-то удачнее с точки зрения карьеры, в чем-то неудачнее. О достоинствах и недостатках я подробнее расскажу чуть позже, но сначала заезжу тему с классификацией до полусмерти.
Центр доходов и центр расходов
Другая концепция на слуху – противопоставленные друг другу центр доходов и центр расходов. Мне кажется, эта терминология дает меньше ясности, потому что точно не понятно, кто входит в центр доходов, а кто – в центр расходов. Все хотят причислить себя к центру доходов. Но сама концепция похожа на нашу.
Мне нравится, что в модели с линейными и аппаратными должностями противопоставление строится на ролях, а не на бизнес-единицах. То есть, например, консультант по Agile, который работает в составе команды разработчиков продукта, приносящего большой доход, всё равно остается на вспомогательной роли (разве что компания торгует табличками и общими местами), а значит, должность у него аппаратная.
Примеры линейных и аппаратных должностей
Вот несколько примеров по конкретным должностям:
- Вы занимаетесь поддержкой ПО для логистики в составе внутренней технической команды Walmart – аппаратная должность.
- Вы работаете над логистическим решением, которое ваше компания продает в Walmart, Target и прочие корпорации – линейная должность.
- Вы специалист по кастомизации ERP-программ от SAP в крупной аудиторской фирме – аппаратная должность.
- Вы добавляете новую функциональность в ERP-программы, которыми торгует SAP – линейная должность.
- Вы занимаетесь набором персонала в IT-компании – аппаратная должность.
- Вы занимаетесь набором персонала в рекрутинговой компании – линейная должность.
- Вы работаете в пиар-отделе Google – аппаратная должность.
- Вы занимаетесь пиаром в пиар-агентстве – линейная должность.
- Вы доктор военной части – аппаратная должность.
- Вы доктор в медицинском учреждении – линейная должность.
Смешанные должности
Не всегда всё так очевидно, как в военном деле, где четкую границу между линейными и штабными должностями можно провести при помощи простого вопроса: «Есть ли вероятность, что в меня будут стрелять?» В определении из Википедии утверждается, что если вы изготавливаете то, что продает ваша организация, то вы линейный сотрудник, а чем дальше удаляетесь от этой магистрали, тем аппаратнее становитесь. По этой логике, если вы работаете в IT-компании, но занимаетесь ручной поддержкой тикет-системы для внутреннего пользования, то вы аппаратный работник.
Но на ту же работу можно посмотреть и под другим углом: человек, ответственный за внутренние инструменты, занимается разработкой ПО в компании, которая зарабатывает деньги на ПО, а значит, должность у него линейная, хотя полномочия при этом скорее аппаратные.
Границы размыты, однако мне кажется, что определить тип команды, в которую вы входите, можно даже по ощущениям. Например, если ваша команда программных инженеров или специалистов по DevOps работает под серьезным давлением, пользуется большим уважением в компании, считается критически важной для достижения глобальных целей – тогда у вас линейная должность. И наоборот, если у вас всё неспешно, про вас часто забывают и вообще вы где-то на задворках, значит, команда аппаратная.
Иногда проще всего разобраться исходя из структуры компании.
Структура компании
В большинстве случаев самый простой способ понять, аппаратный вы сотрудник или линейный – посмотреть, из кого состоит штат вашей компании. Если вы относитесь к самой крупной категории, то вы линейный сотрудник. В армии докторов всегда меньше, чем солдатов, а в аудиторской фирме программистов меньше, чем бухгалтеров.
Если вы линейный разработчик
Тема линейных разработчиков в IT-компаниях раскрыта уже вдоль и поперек. Рассказ Майкла Линча о плюсах и минусах работы в Google – отличный материал. «Я был окружен самыми талантливыми разработчиками в мире, пользовался самыми совершенными инструментами для разработки и ел самую бесплатную еду». Стоит прочесть и статью Зака Ллойда о культурах, ориентированных на повышение.
Но если вкратце выделить основное:
- Вы сильно прокачаетесь в программировании.
- Вам будут хорошо платить.
- Вы будете работать среди множества толковых разработчиков.
- Вы будете специализироваться и хорошо освоите свою специальность.
- Конкуренция за продвижение по карьерной лестнице будет жесткой.
Если вы – аппаратный разработчик
Карьерные преимущества
Преимущества работы в компании не из IT-сферы (то есть на должности аппаратного разработчика) описаны гораздо более скупо. Но они существуют.
В организации, где большинство команд состоит из людей, выполняющих ту же работу, что и вы, продвигаться вверх будет тяжело. Например, я как-то управлял двенадцатью разработчиками на должности техлида. Мой начальник руководил таким же количеством техлидов. Подобная прогрессия продолжалась вплоть до технического директора. Поэтому, если тому, кто мечтает когда-нибудь добраться до самой верхушки, пришлось бы переиграть 12^N людей, которые отделают его от технического директора или директора по продукту, а это сурово.
Вместе с тем, у меня есть друг, который занимается разработкой ПО в коммунальной компании. В его команде шесть человек, а начальник отчитывается перед высшим руководством. Когда начальник уходит в отпуск, друг докладывает о ходе работ главному операционному директору.
Именно через это различие в крутизне карьерных лестниц я и постиг разницу между линейными и аппаратными должностями. Преподаватель одного из управленческих курсов, которые я слушал в университете, как-то заметил, что пытаться стать партнером в Goldman Sachs – пустая затея, а вот дойти до должности финансового директора в одной из тысяч компаний открытого типа вполне реально. Так что для тех, кто метит в верхушку, аппаратная должность выгоднее линейной. В самом деле, финансовые директора становятся исполнительными, когда компания сталкивается с серьезными финансовыми сложностями, которые заслоняют все остальное. В том же ключе, в свете того, что в Starbucks объявили, что делают основной упор на технические аспекты, и назначили исполнительным директором Кевина Джонсона, программиста, аппаратные разработчики компании оказались сейчас в отличном положении.
Преимущества в характере работы
В любой технической компании, особенно в крупной, вы будете на чем-то специализироваться. Вы можете стать экспертом в том, что касается некой подсистемы или определенного компонента стэка – не завидую вам, если когда-нибудь придется объяснять маме, в чем заключается ваша работа. На аппаратной должности в компании вне IT-сферы у ваших обязанностей, вероятно, будет более широкий охват с меньшей глубиной. Возможно, вам придется обсуждать проект с другими заинтересованными лицами, вносить изменения во фронтенд, писать бэкенд и поддерживать базы данных в рабочем состоянии. В организациях определенного размера вам придется заниматься всем этим в пределах одного дня, а потом еще изучать особенности той сферы, в которой работает компания.
Если вам нравится широкий охват и интересно разбираться в том, как функционирует бизнес, такая модель работы вам хорошо подойдет.
Уход на аппаратный покой
Мне часто приходилось видеть, как люди уходят на аппаратные должности на закате карьеры. Раньше вы работали в Thoughtworks над созданием биллинговых систем, а теперь переводитесь в Duke Energy, где будете заниматься поддержкой существующих биллниговых систем. Вы оказываетесь в роли эксперта, который может использовать накопленные знания для решения реальных бизнес-проблем, и при этом работаете на компанию, в которой стаж исчисляется десятилетиями и планы строятся на сопоставимые периоды. И наконец, вы можете завязать с вечной гонкой и получаете массу возможностей начинать свои высказывания словами: «А вот когда я работал в Thoughtworks…»
Преимущества в темпе и ценностях
Область, в которой занята компания, и тип людей, которых она нанимает, оказывают своё влияние на то, чего ждут от сотрудников и что в них ценят. В IT-компании, где средний возраст сотрудника составляет двадцать восемь лет, ценности иные, нежели в аудиторской фирме, где работают в среднем сорокасемилетние. Если перспектива десятилетиями работать в одном и том же окружении вам милее разливной комбучи, лучше отдать предпочтение индустрии с более спокойным ритмом.
В коммунальной компании разработчику будут платить меньше, чем единорогу в стартапе, но при этом коммунальные компании исходят из того, что вы будете работать на них долгие годы. У местной коммунальной компании вознаграждение в целом меньше, но зато есть профсоюз и пенсия, да и в целом, там осознают, что всё, что они вкладывают в сотрудника, может окупиться на протяжении всей его карьеры, а не за период передачи прав по акциям. Для многих работников это достойный компромисс.
Имейте в виду: бывают паршивые индустрии
Если говорить о культуре, во всех технических компаниях, где я работал, руководство считало, что хорошие сотрудники сами заинтересованы в том, чтобы хорошо работать. Как следствие, нас ценили и давали нам много свободы. К сожалению, дела обстоят так не везде.
В одной организации, где я работал на аппаратной должности, чувствовалось негласное убеждение, что люди здесь не любят свою работу и их нужно держать в ежовых рукавицах.
Так что, раздумывая над будущим местом работы или над тем, как хотите провести десятилетия, из которых сложится ваша карьера, спросите себя, какая должность вам подойдет больше – линейная или аппаратная. Они сильно отличаются, и, если мясорубка продуктовой компании вас выжала досуха, возможно, вам понравится работать в небольшой команде разработчиков в компании, не относящийся к IT-сфере.
А если вы пробовали работать там и там, расскажите о своем опыте. Какие преимущества и недостатки вы отметили для себя?
amarao
Это очень хорошая и интересная схема, хотя мне кажется, что тут не хватает третьего полюса, вы его точно затронули:
Воспринимать in-house разработку как средство оптимизации процессов (читай - снижения цены) - это отказываться от её второй составлюящей: в какой-то момент скорость и стабильность процесса открывает для компании возможность предлагать новые услуги. То есть in-house разработка не только снижает расходы, но и создаёт инструментарий компании (можем мы такое или нет?).
И мне кажется, что это третий вектор (первые два - линейность и аппаратность). Как его правильно назвать я не знаю, но, если мы посмотрим на коммунальную компанию, то это сотрудник отдела R&D, который, например, исследует применение предиктивных моделей для предсказания перегрузик и аварий. Возможность предотвратить аварию до её наступления - это уже не "аппаратная" задача. Она может кардинально изменить положение компании на рынке (меньше аварий - выше надёжность).