Рынок IT работ в Лондоне: опыт, тренды, советы.

Рынок IT работ в Лондоне: опыт, тренды, советы.

https://t.me/appendonlylog

Так случилось, что я снова вышел на рынок галерного IT-труда. За спиной 71 собеседование (считал по блокам в календаре, некоторые из них состояли из 3-4-часовых интервью-сессий, думаю, если разбить на отдельные интервью получилось бы за 90) с 28ю компаниями. Вылилось это в 5 оферов, 7 "вы нам не подходите" и 16 компаний, с которыми мы не сошлись по условиям работы или зарплате. У меня было достаточно свободного времени и денег, чтобы интереса ради посмотреть на то, что сейчас может предоставить рынок, чего он хочет и что могу я ему предложеть. Ниже будет выжимка моего опыта, разбавленная синтезом замеченных мной трендов, советами и старческим ворчанием.

Что я искал?

У меня были достаточно специфические требования. Я искал работу с

a) Приемлемым work/life балансом, а именно 1-2 дня работы из дома в неделю, пара-тройка недель в году, когда можно поработать удаленно из другой страны. Никаких nigh shifts, night calls, etc. Я не готов работать до синих жил после 2х burnout'ов за >14 лет. Война дело молодых. (это требование, кстати, отфильтровало приличное число потенциальных работодателей)

b) Более-менее лидерская позиция, если работа onsite: principle eng., eng. manager, team lead, tech lead, etc, но готов был пойти обычным солдатом на удаленку.

с) В плане доменов специализации я брал широко, спасибо предыдущим компаниям, где ты должен был быть и чтец и жнец и на дуде игрец: backend, distributed systems, data eng., ML.

Проблема роста

Рано или поздно программист сталкивается с проблемой профессионального роста и упирается в свой зарплатный потолок. Опыт 10+ летней давности уже не релевантен, глаза от новых технологий не горят, да и голова уже не так хорошо работает, как у тех 20+ летних ребят-ноулайферов, которые тебя окружают и готовы вкалывать до синих жил днем и ночью.

Что у программиста к этому моменту может накопиться? Какая-то интуинция о работоспособных и неработособных решениях, soft skills, понимание, как работает бизнес, что нужно для создания успешного продукта, как можно построить организационные процессы в компании и как строится работа с клиентами. Это и нужно монетизировать.

Проблема роста упирается в классический парадокс курицы и яйца: чтобы пойти на менеджера или tech lead'а, нужен N-летний опыт работы на этих позициях. Чтобы получить такой опыт, казалось бы, можно вырасти внутри какой-то компании, но по моему опыту, компании предпочитают нанимать на такие позиции людей со стороны с многолетним опытом, чем выращивать своих.

Еще одна проблема -- засилие компаний с модной нынче плоской иерархией, когда компания состоит из сениоров помидоров (инженеров), которые отчитываются напрямую перед CTO в атмосфере равенства, братства и жвачки. Бизнес-идея в том, что команда, состоящая из сениоров достаточно автономна в плане ответственности и принятия решений, чтобы не плодить в ней тим-лидов и менеджеров. Я работал в двух компаниях с плоской иерархией, в обоих была общая проблема -- отсутвие перспектив для роста. По честному, в такой команде все равно есть люди, которые частично занимаются менеджерской работой, не получая за это ни тайтла, ни прибавки к зарплате. Когда такую работу выполняешь ты, у тебя все равно есть какие-то надежды либо на деньги, либо на тайтл (обещаниями которого тебя кормят, "когда компания вырастит"), но проходят годы, а воз и ныне там. У тебя опускаются руки, но не беда, в компании найдется другой энтузиаст, который готов будет подхватить твою ношу и тянуть лямку, пока у него тоже не опустятся руки.

Все ниженаписанное следует воспринимать в контексте проблемы карьерного роста, которую я пытался решить путем смены работодателя. За плечами у меня уже был опыт менеджмента и тимлидства в одном небольшом стартапе (причем я не вырос по карьерной лестнице, это получилось совершенно случайно из-за нехватки рук), но даже этот вроде бы наличиствующий опыт не везде воспринимался серьезно.

Чего я избегал?

  1. Больших компаний: Google, Facebook, Microsoft, Apple, IBM, Bloomberg. Это неплохие компании, у меня есть друзья или знакомые в каждой из них (кроме IBM). У них сопоставимые со стартапами зарплаты (£80-100k || UPDATE: это base salaries без стоков, со стоками получается хорошо за 100k) для инженеров, комфортые условия труда (по крайней мере никто не жаловался ни на одну кроме Facebook, но об этом ниже), но если ты уже нанялся туда инженером, рост по карьерной лестнице проблематичен. Есть мнение, что легче наняться в эти компании на лидерскую позицию, чем вылупиться внутри из инженера, чем, к слову, воспользовался один мой бывший коллега. Он ушел из Microsoft, где работал инженером, в компанию поменьше - потеряв в деньгах - вырос там до тимлида и нанялся тим-лидом в Apple. Паттерн: инженер в большой компании -> лид в маленькой компании -> лид в большой компании. Теперь о Facebook: один знакомый дядя 40+ lvl не прошел там испыталку из-за 20+ ноулайферов, которые задавали такой темп работы, с которым он не мог сосуществовать. В итоге дядя ушел в диды-френдли Apple. Не знаю, может быть просто не повезло с проектом, а может быть в Facebook это тренд, у меня слишком маленькая выборка. Что касается лидерских позиций в больших компаниях, то тим-лид -- £100-120k, менеджер -- £120-150k (выборка: 2 человека, Google & Apple). В целом переезжать точно лучше в большую компанию, это комфортнее в визом плане и даст хорошую строчку в CV. Расти лучше (легче) в компаниях поменьше.
  2. Банков: они зачастую крайне консервативны, обычно там плохо с work/life балансом и задачи оставляют желать лучшего. С другой стороны, там не обижают с деньгами.
  3. Большую часть финтеха: беттинг, "современные" банки (monzo/revolut), etc. Не мое.
  4. Social Media: наигрался.
  5. Компаний с сомнительной стратегией монетизации.
  6. Стартапов с раундом финансирования <= A.
  7. Компаний с плоской иерархией.

Что хотят работодатели?

Языки: node, go, jvm (java/kotlin/scala), python, местами ruby.

Какой-нибудь клауд: aws, gcp, azure

Data: spark, apache beam, big query, redshift

ML: spark/mlib, python: jupyter/pandas/numpy/scipy/etc

Почти везде хотят какой-то devops опыт: k8s, terraform, CI, etc

Какие проблемы нужно решать?

Все достаточно стандартно:

Backend: перекладывать байтики, полученные от юзеров в базы данных, чтобы все было highly available и скейлилось. Если это финтех, то появляются ограничетели на атомарность и консистентность операций.

Data: чистить большие потоки данных от шума и хранить в удобоваримом виде для ML-инженеров

ML: выбрать хорошую модельку и обеспечить возможность тренировать ее за приемлемое время для всех клиентов, обеспечив приемлемую latency применение модельки к данным.

Как искал?

linkedin/stackoverflow jobs/hn whoshiring

Что есть на рынке?

  1. Финтех. Овердохуя финтеха. Каждая вторая компания. Во многом благодаря Open Banking (https://en.wikipedia.org/wiki/Open_banking), открывшим новые горизонты возможностей для предпринимателей.
  2. Ритейл.
  3. Blockchain-стартапы (по сути это подмножество финтеха, но я бы хотел выделить их в отдельную категорию, все же они играют на несколько другом поле).
  4. ML-стартапы (в основном что-то связанное с image processing).
  5. Всевозможные деривативы от IT-бизнеса: PaaS/SaasS/IaaS платформы.
  6. Science: DNA-анализ, медицинские стартапы, предсказывающие заболевания по снимкам.

Что по деньгам?

* Сениорские позиции: £80-100k. Чем ближе к сотке, тем больше жмутся. Из 28 компаний лишь одна была готова дать >£100k за инженера.

* Лидерские позиции (менеджер, tech lead, etc): £90-120k

* Консалтинг: можно легко вытянуть за соточку, есть позиции за £450-600 в день обычным инженером, но везде строгий график и, естественно, отпуск за свой счет.

* Удаленки: удаленок очень мало, зарплаты в них ниже (потолок, который мне озвучили был £90k) и требуются им обычные солдаты. Из 28 компаний только 3 были либо full-remote, либо соглашались на присутвие сотрудников, работающих удаленно.

Интервью

Интервью это всегда игра в слепую. В ней есть свои негласные правила, которым следует вся индустрия, свои религиозные убеждения, табу, трюки и уловки, которые имеют мало общего с реальной жизнью и реальными задачами. Ты никогда не знаешь что творится в голове у интервьюирующего тебя человека, каких идеологических убеждений про "правильно" и "не правильно" он придерживается и от чего у него чешется левая пятка.

Структура везде примерно одинаковая:

  1. Телефонный разговор с рекрутером, если ты не общаешься с компанией напрямую (например, отослав CV через сайт интересующей тебя компании)
  2. Телефонный разговор человеком из компании.
  3. После этого некоторые компании просят либо пройти автоматизированный тест на каком-нибудь hackerrank (CS101), либо сделать "домашнее задание".
  4. Pair programming сессия с каким-нибудь инженером из компании (опять CS101)
  5. Многочасовое (обычно 3-4 часа) оnsite интервью, состоящее из problem solving (опять CS101), архитектуры (нарисуем на доске, как из кубиков собрать большую систему), behavioral интервью и каким-нибудь базаром за жизнь про процессы, менеджмент, team leading, etc.

Рекрутеры

В IT-среде принято нелюбить рекрутеров и относиться к ним крайне пренебрежительно. Не стоит. Они пусечки и зайки. Пусть 90% того, чем они оперируют это базворды и белый шум, но скорее всего их soft skills гораздо лучше ваших и они крайне заинтересованы не только вас выгодно продать, но и потенциально продолжить с вами отношения, когда вы в следующей раз выйдете на рынок труда.

В разговоре с HR' ом имеет смысл очень четко описать что именно вы хотите до мельчайших деталей, и кокаиновые переговоры с потенциальным работодателем становятся не вашей проблемой, а их, и это замечательно.

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

Initial Call с компанией

Обычно 30-минутный звонок, где ты рассказываешь кто ты и что ты, а тебе в ответ рассказывают про компанию, и кого она ищет. На этой стадии можно задать некоторые наводящие вопросы, которые позволят отфильтровать неадекват. Что я обычно спрашиваю:

  1. Вы уже profitable? Если это стартап, то на каком раунде инвестиций он находится.
  2. Если компания не profitable, какая у нее стратегия монетизации. Из ответа можно понять на сколько все мутно.
  3. Как организованы рабочие процессы в компании: какие есть команды, как они организуются и взаимодействуют, откуда берутся требования etc. Если есть намек на плоскую иерархию или на водопад -- до свидания.
  4. Какие возможности для роста предоставляются сотрудникам?
  5. Какой в компании work/life баланс?
  6. Как компания работает с клиентами?
  7. Какая самая большая проблема у компании на данный момент?
  8. Прошу описать идеального сотрудника для данной позиции.

На этой стадии отфильтровалось приличное количество компаний. Из ярких эпизодов могу вспомнить разгор с дядькой с жуткими синяками под глазами и выражением лица манифестирующим всю скорбь еврейского народа, который искал лида на AI проект в сфере финтеха. После заявления, что я не готов овертаймить, дядька честно признался, что не сможет это гарантировать, да и сам он частенько овертаймит. Мило потерли оставшееся время за бернауты в индустрии.

На этой стадии я получил два, может три отлупа. Все были финтех компании и причина была одна и та же: not excited enough about the product. Ну не стоит у меня на финтех, и корчить пубертанскую течку я не готов.

Code challenge/домашка

Code challenge сводится к проблемам редуциюрищимся до CS101: binary search, BFS/DFS/Dijkstra, мапам, хипам сортировкам и тому подобному.

Домашки обычно сложнее и более time consuming, но зато после них нет pair programming сессии, сразу идет onsite интервью. С ними вообще интересный разброс получается:

Мне попались две компании, которые дали задачи, на которые требовалось примерно 4 часа (по предоставленной ими статистике). Обычно я считаю такой подход не адекватным: активно интервьирующийся кандидат обычно крайне заебан и всегда oncall. Особенно, когда он ищет новую работу, не уволившись с предыдущей. Однако у меня было предостаочно свободного времени, я отдыхал в Питере, потягивая пиво в барах и мог позволить себе немного неадеквата. Одна задача была достаточно интересной, чтобы я взялся за ее решение, другая била все рекорды унылости, и я решил от нее отказаться.

Совет: подходите к домашкам так, будто бы это production проект: сделайте сраный докерфайл, напишите тесты, даже если в требованиях ничего об этом нет. Ты никогда не знаешь, что в голове у тех, кто ревьювит твою задачку.

На этой стадии я получил один отлуп от компании, которая искала дата сотониста. Задачка была на подсчет статистики по нескольким CSV файлам.

Мое предположение: хмм, ребята хотят посмотреть, как я владею pandas/numpy. Вот вам решение, вот инструкции запуска.

Реакция: вы нам не подходите, не смотря на то, что задача решена правильно, вы не написали unit test'ов.

Предположение работодателя: человек не пишет юнит-тесты, это плохо.

На самом деле: телепаты в отпуске, и человек делает минимальную необходимую работу согласно предоставленным требованиям.

Remote Pair Programming

Опять CS101, все одинаково и примитивно. На этом поле особо не пофантазируешь, поэтому задачки какими были 5-6 лет назад, такими и остались. За свою карьеру я сменил 11 компаний, новыми паттернами в задачках меня удивить сложно. Я либо уже решал такую задачу, либо решал подобную. Если я знаю, как решать задачку, я в этом не признаюсь (за исключением, когда меня спрашивают напрямую). Собеседование -- формальная игра, и если я опытный игрок, то глупо этим не пользоваться.

Совет: на подобных интервью не столько смотрят на способность решить задачу, сколько на то, как вы думаете и излагаете мысли. Если вы в чем-то не уверены, сто раз переспросите интервьювера. Если вы придумали решение, проговорите идею интервьюверу прежде чем начинать что-то писать. В конце расскажите сложность вашего алгоритма, у интервьюверов от этого привстает.

В конце обычно остается время на вопросы, и этим стоит воспользоваться. Программист не продажник и не HR, он будет откровеннее отвечать, тк не настолько заинтересован вас нанять, ему вообще пофиг и скорее всего проводить интервью ему в тягость. Я обычно спрашиваю три вопросов:

  1. Как организовано общение между командами, кто генерит требования, etc.
  2. Как с work/life балансом.
  3. Что ему больше всего _не_ нравится в компании. Мой любимый вопроc, на который я всегда получал достаточно откровенные ответы. Так одна девочка рассказала мне, что в компании есть тенденция некоторых людей к овертайму, что ставит высокую планку для остальных сотрудников, у которых есть жизнь. Несмотря на то, что менеджеры этого не поддерживают, они не знают как это пофиксить. Спасибо большое этой девочке, я сэкономил кучу времени решив не продолжать общаться с данной компанией.

На этой стадии я получил один отлуп.

Фидбек: задачка решена правильно, но кандидат не использовал test-first approach.

Стоит сказать, что перед началом интервью мне было сказано, что хотят видеть test-first подход, о чем я совершенно забыл, углубившись в техническое решение задачи и написав тесты после.

Формально они совершенно правы, я проигнорировал правило игры. Технически же это очень сомнительный критерий для фильтрации на мой вкус.

Onsite

  1. Problem solving: тот же CS101, возможно немного сложнее и с живым человеком рядом. Радует, что в отличие от ситуации 1.5 года назад, не попалось ни одной компании, которая заставляла бы писать решение на доске (это вообще рак индустрии). Везде был ноутбук, IDEшка и даже набор тестов, проверяющих правильность решения. Неадеквата было совсем мало, лишь один странный вопрос написать регулярное выражение, которое проверяет делимость числа на 4 O_o. В целом, люди стали меньше изъебываться. Полтора года назад я ловил себя на мысле "что я нахуй делаю?", когда чертил на доске имплементацию foldl и foldr на java или когда собеседовал кандидата в компанию вместе со своим коллегой, который просил его перемножить матрицы SQL запросом на доске. Советы здесь такие же, как и в remote pair programming.
  2. Architecture: вопросы в стиле: а давай ты собирешь из кубиков twitter или url shortener или систему, которая обрабатывает 100500e^6 точек time series в секунду. Здесь все достаточно просто при условии, что ты знаешь кубики в виде различных баз данных и оптимальной для них области применения, распределенных очередей, всяких k8s'ов, load balancer'ов и тому подобного. Выехать на опыте очень просто. На подобных интервью может случиться затык у людей, которые долго сидели в большой компании в очень узкой ниши специализации и никак не могли получить подобного опыта. Совет: поработайте год в компании с плоской иерархией, посмотрите на то, какие кубики есть и как они комбинируются.
  3. Behavioral: приведите пример конфликта с коллегой и как вы его разрешили, приведите пример ошибки, которую вы совершили, приведите примеры, когда вы проявили лидерство, расскажите про то, как вы менеджели проект/лидили команду, etc. Среди моего круга общения бытует мнение, что в behavioral интервью нужно играть говоря то, что от тебя хотят услышать (обычно это common sense). Мне такой подход не нравится, я кайфую от правды-матки, которая зачастую выставляет меня не в лучшем свете, на что я делаю глаза котиком: мол, грешен, но я учусь на своих ошибках. Думаю, что это ок стратегия, которая позволяет тебе не врать. Полтора года назад в одной компании была забавная ситуация, когда я получил отлуп на этой стадии. Меня попросили описать мою самую большую ошибку, и я рассказал историю, когда мой CTO предложил подход решения проблемы, который интуитивно мне казался проблемным. Вместо того, чтобы спорить я забил хуй, подумав, что у меня и так проблем по горло, и если его идея окажется грустной, мы всегда можем ее быстренько переделать. В итоге это вылилось в большую проблему, которую оказалось совсем непросто решить. Собеседующая меня девочка, не имеющая технического бекграунда, услышала, что я зассал спорить с CTO, а им не нужны люди, которые не умеют отстаивать свою позицию. Психоанализ next level. Забавно, что в этот раз я собеседовался в ту же самую компанию и рассказал ту же самую историю (у меня уже было несколько оферов, терять было нечего), но уже человеку с техническим бекграундом. Все ок :)
  4. Интервью с менеджером/tech lead за менеджерство и tech lead'ство: просят рассказать про опыт менеджмента, общение с продуктовой командой, как организуешь процессы в компании, как пасешь котов, etc.

После onsite я получил три отлупа:

  1. На problem solving интервью у интервьюивера создалось впечатление, что я недостаточно с ним общался. Вполне возможно, тк на первом интервью мне выебли мозг вопросами по статистике, и я был морально выжат.
  2. Одному из интервьюверов при обсуждении pair programming, я сказал, что нахожу эту, порой полезную, практику высасывающей все соки и морально я готов тратить на парное программирование 2-3 дня в неделю. Мне сказали, что они пейрятся каждый день, поэтому им показалось, что я не буду счастлив в их компании. Справедливо :)
  3. У меня недостаточно опыта в менеджменте, но меня готовы нанять инженером.

Оферы

Выбрав компанию и приняв офер, имеет смысл максимально мягко и дружелюбно отписаться в другие компании, давшие офер, намекая, что вы еще можете пересечься на просторах рынка. Это не раз мне помогало. Так, в этот раз я написал двум компаниям, которые дали мне оферы полтора и три с половиной года назад соответственно. Обе были рады меня видеть.

Спасибо, всем добра 🙏

Report Page