"Часы работы"

Как я удвоил зарплату за 4 месяца

Советы по успешной реализации нескольких предложений от начала до конца

TL;DR

Я решил проинтервьюировать стратегию. Я подал заявку в более чем 20 компаний, провел телефонное собеседование в 15 компаниях, нашел виртуальный сайт в 12 компаниях и получил 7 предложений о работе. После переговоров мне удалось увеличить зарплату вдвое.

Пролог

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

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

Из-за того, что владение этими услугами очень важно, я многому научился. Я научился обрабатывать увеличенный трафик, определять ключевые метрики, когда работоспособность сервиса ниже SLA, автоматизировать операционные задачи и т. Д.

Через некоторое время меня стали утомлять дежурные звонки. Я просыпался примерно в 4 или 5 утра по разным причинам. Наша задержка чтения и записи будет экспоненциально увеличиваться из-за увеличения трафика или отказа одного из серверов. К сожалению, у нас не было производственной системы для выполнения автоматизированных задач по устранению этих проблем.

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

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

Подготовка к кодированию

Leetcode - это надежный ресурс, который поможет отточить и улучшить свои навыки программирования на собеседовании. В нем огромный банк вопросов, и вопросы размечены по темам и компаниям.

Я не хотел бесцельно учиться на leetcode. Мне пришлось продумать стратегию подхода к leetcode, чтобы добиться успеха в кратчайшие сроки, необходимые для подготовки. Я хотел быть уверенным, что смогу получить предложение о работе примерно через 4 месяца. Также было важно, чтобы я мог получить несколько предложений. Таким образом, мне было бы ясно, что выбранная мной компания больше всего мне подходит. Было бы без сожаления принять это предложение о работе.

Мой раунд собеседований, который привел к моему предложению в Твиттере, дал мне приблизительную оценку того типа вопросов, которые мне обычно задают. В результате я создал список тем для рассмотрения, упорядоченный по популярности, и выделил определенное время на подготовку для каждой темы в зависимости от того, как я к ней относился.

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

Это был мой график:

  1. Хэш-карты (1 неделя)
  2. DFS / BFS / Trees / Graphs (4 недели)
  3. Возврат (3 недели)
  4. Куча (2 недели)
  5. Раздвижное окно (2 недели)
  6. Стеки / очереди (1 неделя)
  7. Динамическое программирование (3 недели)

Еще одним важным компонентом планирования было то, сколько времени я должен уделять каждому уровню сложности. Поскольку я подавал заявку на руководящие должности, я выделил

  • 60% на среднем уровне
  • 35% на харде
  • 5% на легкий

Для меня было неэффективно тратить много времени на простые вопросы, так как я не изучал никаких новых техник. Я хотел сосредоточиться на средних и сложных вопросах, с акцентом на средних.

Что касается простых вопросов, я бы постарался ответить на них менее чем за 30 минут. Что касается вопросов среднего размера, я бы постарался ответить на них менее чем за час. Для сложных вопросов не было цели, когда их завершить, поскольку на решение этих вопросов уходит несколько часов, а иногда и дней. Довольно часто мне требовались подсказки для решения сложных вопросов, и были времена, когда я отказывался даже от подсказок. Когда это происходило, я подробно читал решения людей и не уходил от проблемы, пока я действительно не понял решение.

Я бы хотел задавать 2–3 вопроса в день в будний день и 4–5 вопросов в выходные. Пятница была днем ​​отдыха. Было очень важно не выгореть во время этого процесса.

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

После 2 месяцев подготовки к программированию я начал проводить имитационные интервью на Pramp раз в неделю. Я хотел начать оттачивать свою способность решать вопрос под давлением в живой обстановке. Моя цель состояла в том, чтобы ответить на вопрос о Pramp менее чем за 20 минут. Я отслеживал каждое выступление на Pramp в электронной таблице Google, чтобы визуализировать мои тенденции.

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

Подготовка к проектированию системы

Для меня подготовка к проектированию системы была сложнее, чем подготовка к вопросам кодирования. Было так много знаний, которые нужно было изучить, особенно с учетом того, что я был еще в начале своей карьеры. Я также чувствовал, что мне не знакомо большое количество крупномасштабных систем в Twitter. Я был знаком только с такими системами обмена сообщениями, как Kafka.

Я начал готовиться к проектированию системы примерно через 2 месяца после подготовки к собеседованию. Я просмотрел эти различные ресурсы:

Я знал, что дизайн системы будет иметь большое значение для руководящих должностей. Я решил использовать интервью.io для имитационных собеседований по дизайну системы. Это было полезно, потому что я работал в паре со старшими / штатными инженерами FAANG, и они задавали мне сложные вопросы. Я бы получил конструктивные отзывы о своей работе. Я узнавал что-то новое из каждого ложного интервью. Например, я изучил различные типы кешей, такие как кеш с обратной записью, кеш со сквозной записью и кеш с обратной записью, и понял варианты использования каждого из них. Эти ложные интервью спасли жизнь. Я рекомендую использовать их сервис для создания макетов систем.

Создание моего «списка компаний»

Примерно через 3 месяца я решил составить список компаний, в которые хотел бы подать заявку, и разделил их на 3 уровня.

Моей целевой компанией были компании первого уровня (например, Google, Netflix, Snapchat, Pinterest и т. Д.). Эти компании обычно очень хорошо платят и имеют хороший баланс работы и личной жизни. Эти компании также показали сильный рост выручки. Я хотел быть уверен, что акции будут расти каждый год, пока я там работаю. Я также включил в этот список горячие компании перед IPO (Stripe, Coinbase, Databricks и т. Д.) Из-за потенциала огромного роста акций.

Компании уровня 2 были публичными компаниями, и я чувствовал себя нормально, работая там, но не испытывал особого восторга от них (например, Uber, Lyft, Salesforce и т. Д.). Эти компании либо имели напряженную рабочую среду, либо не демонстрировали значительного роста компании.

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

Хронология собеседований

Я хотел испытать воду перед собеседованием для компаний уровня 1 и уровня 2. Примерно к 4-му месяцу я отточил свое резюме (рекомендую прочитать Как пройти проверку сотен технических резюме) и подал заявки только в компании уровня 3. . Я получил ответ от большинства из них и смог получить от них пару предложений.

Когда начали поступать предложения Уровня 3, я почувствовал себя достаточно уверенно, чтобы начать планировать звонки с рекрутерами из компаний Уровня 1 и Уровня 2. Мой график на тот месяц был забит до отказа. Я проводил виртуальные собеседования на месте почти каждый день. Было много случаев, когда мне приходилось снимать ВОМ с работы. Я должен был убедиться, что не вызываю подозрений со стороны моего менеджера или моих коллег. Итак, я убедился, что продолжаю работать с Твиттером, но только с низкоприоритетными задачами.

Причина, по которой я планировал все свои собеседования так близко друг к другу, заключалась в том, что я не хотел иметь дело с истечением срока действия предложения, худшим из которых было взрывное предложение (в котором предложение было действительным в течение 2 или 3 дней). Я хотел, чтобы все мои предложения поступали примерно в одно время, чтобы я мог использовать их для переговоров.

Время переговоров

После всех моих собеседований я получил предложения от DoorDash, LinkedIn, Uber, Stripe и нескольких других компаний, предшествующих IPO. После разговора с менеджерами по найму, чтобы узнать больше об их командах, я сузил круг до нескольких компаний. Одним из важнейших требований было то, чтобы у команды была легкая ротация по вызову.

Когда начались переговоры, я поискал в Интернете (через Blind, Glassdoor и другие ресурсы) тип предложения, которого мне следовало ожидать. Я также прочитал Десять правил согласования предложения о работе.

По сути, вот как я обсуждал предложения о работе:

  • Я никогда не рассказывал, сколько денег я зарабатывал в Твиттере. Я не хотел, чтобы рекрутер делал мне низкое предложение.
  • Я так и не назвал свой начальный стартовый номер. Я бы попытался, чтобы рекрутер дал мне начальный номер. Опять же, я не хотел, чтобы рекрутер делал мне низкое предложение.
  • Когда рекрутер давал мне номер, я объяснял, что мне нужно время, чтобы посмотреть его вместе с семьей. Таким образом, рекрутер не оказывал на меня давления, чтобы я быстро принял решение.
  • Я также воспользовался своими другими предложениями для переговоров. Это был самый полезный способ увеличить компенсацию. Если рекрутер не может увеличить базовую зарплату, попробуйте попросить увеличить RSU или подписной бонус.

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

Я давал интервью в третий раз, и это было самым успешным. Я подал заявку в более чем 20 компаний, провел телефонное собеседование в 15 компаниях, нашел виртуальный сайт в 12 компаниях и получил 7 предложений о работе.

Ресурсы

Я провожу семинары по резюме / собеседованию с клиентами, претендующими на работу в области разработки программного обеспечения. Я работал с более чем 50 клиентами, и они получили предложения о работе в таких компаниях, как DoorDash, Square и 1Password.

Если вам нужна помощь с резюме или подготовкой к собеседованию, напишите мне на мой адрес электронной почты [email protected].

Вы можете найти меня в Instagram.