Hunting for an in-demand job – lessons learned.

How to read this?

  • If you super-happy with your job, you can close this tab now.

  • If you’re (or want to be) an entrepreneur, you can close this tab now and return to your business.

  • If you’ve 2 minutes: Ctrl+F “TLDR”.

  • If you considering a career change, briefly look through and find the part which you feel unsure/confused about and get some inspiration. Ask for missing data, I’m happy to share more from my brief experience (if it helps).

  • If you just mindlessly surfing around, stop and do something meaningful.

Introduction

I wanted to change my job (why? below) and spent over two months doing so. As you were asking me questions of my experience, I’ve compiled my notes into this blogpost which hopefully answers most of your questions. If not, please feel encouraged to asked them.

TLDR;

My job hunt strategy was “exhaustive search”, trying out everything out there within my free time. Had 10 onsites and chatted with ~50 companies. And it was fun, you can get to chat with cool people, get to know how all kind of companies operate and how they create value. Also, you’re at center of the attention and get praised all the time 😛

For those short on time, after reading this sections, feel free to skip to Lessons Learned -> TLDR;

I was looking a tech job (more jobs than people market). That means you are really wanted and thus you can lead the process, negotiate terms or even create a position for yourself in a company you love.

In such a market, competition between companies for talent is aggressive, which fuels a big pool of recruiters getting about ~5-10% of your starting salary (it’s complicated[quora]) which leads to inherent bias. Actually everything you hear, recruiters, CEOs, employees has a positive bias, because they work for the company (to see the other side, look for ex-employees, critical press, ask competitors).

The most important notion is that it’s a matchmaking between your desires and the companies needs. As in dating, there a lot of options, constrained by unique individual preferences. But there is one big difference, you’re signing a 40h+/week relationship for years+ based upon ~20h (biased) experience. That introduces difference in expectations and reality.

Stats

Start -> Signing and offer: 2.5 months.

  • 6 Offers (Robinhood, Scale API, Two Sigma, Bridgewater, Laserlike, AI team @Apple).

  • 8 Onsites (MapD, +Duetto; +2 in 2016: Voleon, Facebook)

  • 15+ Recruiter calls

  • 12+ Phone screens (super-basic “it’s a potential match?” call, usually through email)

  • 17+ Phone tech interviews

  • 20+ Follow up calls

  • 172 email threads

  • 3 Homeworks (3h+)

  • 3 Culture events

Prose

I had a good job at Google, working on one of the most computationally intense projects in the world with top class colleagues. That shear scale introduces a plethora of diverse exciting problems, from cpu profiling to custom load balancing. My favorite kind of work felt like playful physics: observe, introduce a hypothesis, design experiments, run them, build datasets, evaluate hypothesis and then use the results. Big playground, lot of fun.

So what made me change? It was my first job, the project was kinda done and therefore wanted to see what’s out there before “retiring” at Google.

After deciding to change, first I’ve set my LinkedIn: “open to change” and expected to easily settle an exciting job in a month or so. But the process took 2.5months (peaking in middle) and it ended up as an almost full-time job (used up 12 days of my vacation).

That was a lot of energy spent and looking back, I believe I could’ve been much more effective. So this post is about it. I bet there are plenty of similar ones, so feel to take inspiration from those too. Like this guy just networked like a boss. Or you join your best friends. Or you start your own. Or this guy just follow what top VCs were doing: <quote quora>I strongly recommend the top VC portfolio company approach as opposed to skimming job boards (e.g., Startuply) because the top VCs do such a good job of screening the founders, idea, and market.</quote>

Lessons Learned

Lesson 0: Apply for Green Card right away. Like now, do it now if you didn’t yet. You shouldn’t be reading this sentence if didn’t do it yet 😛

TLDR;

It’s tough problem. First, you have a lot of personal preferences. Second, there a lot of options. Third, there is a ton of unknown/hidden data, because you can’t afford spending too much time with a company. Remind yourself that both you and the company are spending ~12h to decide if you will have a 12month+ relationship.

Most importantly, decide what you really want and say it out consistently. Write it down and revisit it often – as it’s easy to get lost. Take notes after interviews and evaluate how it fits your preferences – this is important as over time you will remember only emotions, and usually the more recent ones outweigh the older ones. Stay in charge of your career, don’t get swayed too much by opinions of others.

How to search for job? Follow money, check press, sign up for job search sites. Also have sub-deadlines and sub-goals, e.g. I will spend 1h looking for hot SF biotech startup jobs and reach out to 10 of them – as it’s easy to get side-tracked and lost in the sea of possibilities.

Constantly remind yourself, that all the information you get it’s biased. Recruiters want you to get hired, CEO wants to hired, you hear only employees who stayed (you can try ex-employees, competition, critical press for the other side). It feels like a poker game – there is a lot of unknowns. As you gradually spend more time with a company, and as interview rounds progress it’s harder to fold. But you have only so much time (chips), so spend them wisely – stop a process if you don’t feel strong about it, i.e.: “Would I like to work for the company even if every unknown would be best possible?”.

Nail down what you want

  • Write a 2-3 sentence elevator pitch of your dream job. Read it often.

  • Decide what properties of the job your care the most. Examples: Challenging? Field? Money? Location? Colleagues? Product? Culture fit? Company size? Growth?.

  • Tell your closest friends, re-iterate your pitch, post it publicly (if it’s ok with current job).

  • Put your pitch into LinkedIN career interests – this actually worked pretty well with me.

Example:

“Interested in jobs between software engineering and research, e.g Data Engineer / ML Engineer. I like to run experiments. Ideally in a growing team of a tech-focused company.

My mistake was NOT sharing this with my network, and often forgetting about my goal.

Update your resume

Pro-tip: If you really like a particular company, customize your resume for them.

There are tons of resources how to write a good one. TLDR; Proofread, one-page, be sure to correctly assess your skills, i.e. expert in C++ means you’re contributing to the language or community. Companies will ask questions about your claimed skills.

Example: My resume (pdf). LaTeX version.

Advertise yourself

Don’t just wait like a princess in a tower for your charming job. Make yourself known for your strengths, be desirable for companies. Consider this economist mayor who had 20+ interviews in 3 days.

  • Check “Let recruiters know you’re open” on LinkedIN – this works. Remember filling out your career interests.

  • Post your resume around job search sites – although this didn’t work out with me that well, the effort is minimal (Tried Vettery, Indeed, and couple more).

  • Let know both your closest and weakest connections about your career interests. Realize that the weaker the connection, the bigger the expected change in jobs. This I should’ve done more.

  • Network (I didn’t do that).

  • Ping your formerly declined recruiters.

If you’ve a friendly manager, let them know at some point that you’re leaving. That enables you to publicly post on all the networks.

Frankly, I suck at marketing, so it’s probable that “doing it your way” is better.

Reach out to companies yourself

TLDR; Follow the money. Check out your favorite investors and see the companies they put money into. This I should’ve done.

  • Go to Crunchbase / Angellist.

  • Go through news lists such as “10 hottest companies in [your preferences]”

  • Check your favorite startup incubators,

  • Check where your weak connections work. Use them as introduction and referrals.

  • If you really loved some product, consider working for the company.

  • Sign up for LinkedIn premium (first month free), get company metrics (headcount through time) and check out their employees profiles, you can even stalk them on shiny FB.

Recruiters

TLDR; Most of them are not so good. I’ve found the best ones being specialized to a dozen of companies.

How do you recognize them? Experience will teach you.

  • The not so good ones only go for quantity, trying to connect everybody with all jobs, which are often unrelated cause they’ve no technical background. Sometimes they fill out an internal job search form for you – that’s waste of time.

  • The better ones try to understand your desires, your personality and your dream job. They ask non-standard and open ended questions. They are frank, show also cons.

Personally, I had the best experience with “we clicked” recruiters, i.e. we had a 30 minute super-fun chat, similar backgrounds and so. These recruiters are important for finding matching smaller companies, because if the recruiter “clicks” with a company, and you “click” with the recruiter, then from transitivity you also “click” with the company. And being a culture fit matters the more the smaller the company is.

Tip: Hide your salary.

Stay organized

TLDR; Have a calendar, and track your feedback on how the company matches your preferences. Know what information you’re missing.

After a dozen chats I started to loose track and only recall feelings. So I took notes,  especially noted what I really liked, what I disliked and questions to ask in the follow up rounds.

Tips: Have a calendar with upcoming calls and onsites (ideally if you can export your availability fast as recruiters ask it often through email), save numbers with “Recruiter + Company name” (it’s nice to show you know who is calling).

Screening interviews

Goal: Initial contact, find out if there is a potential match between your and the company’s needs.

TLDR; Prepare questions. Show your interest.

Make sure you articulate well what you want (elevator pitch), it’s better to err on being too specific than having no preference.

Have company specific questions, if there is new or controversial press, ask about it.

Tell truth. Be friendly. Poke culture fit. Hide your salary.

Have a good story about your previous job: Why are you leaving? – everybody asks that).

Ask about the interview process, what should you prepare, etc..

Technical phone interviews

TLDR; Practice. Review CS fundamentals. Draft mock design docs. Check out Appendix – Questions. There are also whole books on this topic, e.g. Cracking the Coding Interview. Go into details, as it’s easy to bulshit about abstract stuff. Review your interviews, especially what you didn’t know, and learn it before the next interview.

Every company has a different approach. Some big companies just hire “smart enough” people and find a position later (e.g. Goog, FB), some have a specific role in mind and ask specialized questions for that particular position (e.g. Appl, Amzn).

Practice first. Get in shape. Recognize your weaknesses and fix them. If you recently didn’t do any interviews, schedule some mock ones. Or just schedule real ones with companies which you are “not that interested” in.

Code some algorithms (codeforces / topcoder / hackerrank / KSP / …), review CS fundamentals, review systems design, DBs. Solve system design questions, e.g. propose design of Google Suggest.

Interview them too. Prepare questions. Go into details. Remind yourself you are having a discussion with your future colleague: “Do I really want to work with them?”

E.g. in my case, I like to work with smart and fun people, so I discuss tougher versions of the original problem, casually throw in some math, go into details and see if they follow or even better, build on top of that. Spice it with some geeky jokes and see how they react.

Regarding phone. Talk your thoughts all the time, reinforce it by writing the gist down, e.g. comment the code. Remember the information throughput through voice is low, so use any trick you can think of to make yourself clear.

And most importantly, have fun! If you stressed, fix it. Have a beer, take a nap, listen calm music or play some counter strike – whatever works for you, just make sure you present your true self.

Pro-tip: Say if you know the technical question (after awhile, they start repeating).

Onsite interview

TLDR; If you don’t really like company that much, don’t do it. An onsite interview will take your full day and you will come back exhausted. It’s not worth as a practice, rather do phone screens instead. Remind yourself that if you accept, you will likely stick with them for years.

Goals are:

–  Company’s goal: Verifies that your skill claims in CV are true and if it matches the position they have in mind. They usually look for red flags and your future growth.

– Your goal: Get data to all your criteria for decision (What I really want?). After the onsite, you should be able to respond: “Do I want to work there?”.

This is the best shot to get to know each other – so prepare a lot of questions, about the company, culture, press and most importantly directly ask the criteria you care about, e.g. what’s a challenging problem you solved? how do you make profit? – it didn’t add up for me. Where is the product headed? Growth plan? Location change? Commute? And so.

Technical is similar to phone screens, although they usually go deeper. The whiteboard enables higher information throughput, so use it extensively.

Definitely expect “thematic” questions which are usually subset of: “How would you design the IT of this company? E.g. when interviewing for Google, you can have questions like: “How would you design Google Suggest?”, or if applying for ML infra, then “How would you design Tensor Flow?”.

For a lot of companies culture fit is really important and they ask questions like: “What’s your biggest weakness?”, “How would you contribute to the culture?”, “What are you proud of?”, “How do you resolve conflict?”, “What’s your biggest weakness? How you address it?” (tell truth). Usually the smaller the company, the more of those you get.

Be yourself. There is no reason to hide anything, if you end up working there, it will surface up anyway.

Decision making

Good job, you are getting offers!

TLDR; (rational way) Have a spreadsheet with rows: your weighted attributes (dimensions: people, mission, location, …), columns: favorite companies, compute the scalar product and take the maximum (example). Review your notes, you’ve a bias towards more recent onsites, as your feelings are fresher.

Frankly, this was the most consuming part for me. All of the offers I was willing to take, but I could only take one. So I made a giant spreadsheet with all my valued attributes and filled it out for each company with an offer. Also tried to include how confident I’m in the data.

You can see that I’ve a strong need for data to backup my decisions. And as it goes with data, lot of it was missing and dirty. But luckily, all the companies are super-happy to schedule follow ups for anything you might want. E.g. meet with the CEO, with your team, future manager, lawyers regarding visa – anything you wish. If you unsure about the culture fit, you can get a dinner / lunch / board games / mini-offisite with them. You can ask for almost anything in the follow up. One of the companies even proposed to fly me over to the other coast and rent me a car, just that I can look around the neighborhood and how I might like it. Remind yourself that you’re in charge of your own career, so ask for what you need.

Obviously, it’s helpful to discuss your important decision with your friends. Their biggest added value are the questions they ask you, usually important obvious questions you missed – so just channel it and ask the companies. E.g. How they make profit? What about this service doing the same? What if this big company dedicates a department for it? What will be your job? Is that you really wanted? Do you really want to work on that migration? How were the people? Were you interviewing with people you will end up working?

Note: Don’t decide based on recommendation of others – as they have far less data than you, and different preferences. But trust their questions, they have a good relaxed big picture.

Company’s side

From the company’s side, the most important questions are:

  • Do you have the skillset needed for the job? (your current state)

  • Would you thrive here a year from now? (you smart).

  • Culture fit.

Also note that a company would rather have false negatives (miss to hire a good candidate), than hire false positives (hire non-fit). Sometimes you get rejected just because the company didn’t gather enough data on you – so be loud, let them know you.

Negotiating

TLDR; Companies are almost always willing to give you more.

I’m not a big fan of negotiating offers, but it’s worth it. What I ended up doing, was that I was sending all offers to all companies – so they can bid for me. Remember, you in high demand, which means your valuation goes up. It was a similar practice to buying a new car, you can negotiate the price by sending best quotes around dealerships.

Should you tell them your salary? All of companies ask for it. If you have only 1-2 offers, I’m saying “strong no” on behalf of my really good recruiter friend. Why? Because it doesn’t help you. I.e. the company has already [A, B] salary spread in mind. If you tell them your salary or your expectation C, you will get min(C * (1 + x), B) where x is a multiplier of how much they like you. If you don’t tell your salary, they will propose you (A * (1 – x) + B * x) – weighted average of the spread. If this is higher than C, take it. If it’s lower, negotiate to be higher than C by e.g. saying C. This is like bartering on a Turkish market (which I suck with).

I told my salary and negotiated through circulating my offers.

Pro-tip immigrants: Beware that the U.S. government wanted to impose minimum salaries for H1-B and GC holders (130k and 140k respectively)

Stock Options

But how I compare 175,000 + 90 * (1 + x) bonus offer too 125,000 + 0.7% of a 70M company over 4 years with 1y cliff? And what about stock dilution? When I can sell those shares? And how the fuck the taxes work? What if they go bankrupt? What is the salary growth expectation?

Learn something about NSO / ISO (ISO is more tax flexible, but more complicated). What’s a strike price, when you can sell it, expected stock dilution and tax consequences (AMT). Note, your employer can’t legally give you any tax advice.

Conclusion

The job hunt process takes a big toll on your energy, especially when you choose to go with “let’s try it all” strategy instead of “I trust my gut / best friend / God / …”. In any case, I actually had a lot fun, it was refreshing to solve quick interview questions. And it also feels good being in the center of conversation 😛

In the end, I’ve decided to prefer a mission over challenging research-y problems. It wasn’t an easy decision, it contained a lot of emotions, uncertainty, biased facts and opinions.

My biggest lesson learned was that I need to take control, i.e. be more decisive and ask for what I want.

FAQ

  • Why I’ve decided to leave Google?

    • Opportunity. Because I can do it. If I was in Europe, there are much less options for software / data / tech jobs. E.g. I keep telling my Slovak Googler Zurich friends (20+ of them) what if you get pissed by working at Google? Would you go for a swiss bank? Would you move? Ok, there is ETH, IBM and bitcoin startups but that’s it. The Valley has much more options.

    • Social circle coverage. The Slovak tech community already has tons of Google experience, so it’s far from being sexy anymore. By working on sth special, my work experience datapoint has significantly higher value for my surounding community.

    • I’ve felt I’m disconnecting from the outside world. Google is “an almost ideal micro-world” embedded in the real world. Everything is in-house, from infrastructure, through recruiting, food, to lecture materials (those feel like a top-notch university, some people stay just because the learning materials are amazing).

    • Why not just change teams? I felt all the exciting positions at Google are taken by somebody more experienced, more suited. As working there leads to such an easy life with super-challenging problems, Google has lured and kept top talent.

  • Why a smaller company?

    • I’m young and I like to move fast.

    • Risk seeking decreases over time and I can always come back to a big mature company.

    • Broaden my skillset. The bigger the company, the more specialized gear you become.

  • What are decision attributes? If a startup – join missions and causes you care about – because that will keep you going through inevitable tough times. If you want to learn a particular skill, then big companies are better – because you can focus on that. Keep in mind, if you want to learn something new, it costs the company to let your learn before you can use it.

  • What about visa? Note H1-B now has a 60day grace period – so you can be unemployed for 2 months. If you’ve an approved I-140 with an EAD, you can clear with your company that they will not revoke the process and port it with AC 21.

Appendix: Non-exhaustive list of questions I’ve been asked during all my interviews

Just to roughly know how it looks like. I’m happy to discuss those, but won’t say which company asked which question so you can prepare.

Non-technical

These you should respond for yourself before heading out.

  • Why are you leaving X? Why not changing teams?  (Asked almost every time)

  • How do you resolve conflict between teammates? (asked multiple times)

  • What’s your weakness? (often) How do you address it? How you evaluate progress?

  • What’s your biggest strength? What are you proud of yourself?

  • What would you like to work on? What you seek in your next job?

Other

  • Side projects you work on? Do you contribute to open source?

  • Fill out this 200 question personality test.

  • How would you contribute to the culture?

  • What you did at Y? What were your responsibilities? What your contributions?

  • Are you willing to move to east coast?

  • How did you find out about us?

  • Do you use the app?

  • Are you eligible to work at USA? Do you require visa sponsorship?

  • What would help to decide?

  • What can I do now for you, so you take the offer now?

Technical

(Asked almost every time): What were you doing at Google? Can you talk about two projects where you had significantly contributed?

(Very often): What’s a recent challenging project you solved?

  • (Common) What’s the difference between Threads and Processes?

  • (Common) What’s the difference between TCP and UDP?

  • What are the tradeoffs? Memmory/Cpu, Throughput/Latency, Robustness/Scalability, …

  • Verify a tree has the binary tree property.

  • String match with any permutation of the pattern.

  • eval(a+b) like expressions

  • How does Unix pipe work?

  • Slice a file.

  • IP address regexp match.

  • Python dictionary merge? Then sort by values.

  • Git rebase, you want to fix commits A, B, C with A’, B’, C’

  • (Any language) Increment a number in an array based representation

  • You’ve an infinitely long streaming log, you want to maintain a uniformly random sample of size K.

  • Implement SetInterval(i,j,value) and GetValue(i)

  • How does a max distribution of K (first K=2) uniformly random variables look like?

  • Design interest recommendation

  • Design knowledge graph

  • Reverse vowels in a string

  • Solve a tilt maze (if you start going on way, you’ve to go until next wall)

  • Implement run length encoding. What if arbitrary characters can be on the input? Briefly explain how would you decode.

  • What’s a weakness of JSON? Design a way to serialize a Python object into JSON and back. (That’s essentially Pickle).

  • Design a distributed system for neural network computations.

  • Remove nodes from a forest.

  • Design models for human task evaluation with cross-checking and deadlines.

  • C++ pointers, naked, unqiue, shared, weak and where do you use them?

  • Number of components of a graph.

  • Given a set of words and a starting word, you can jump to another word by changing one character. What’s the maximum number of jumps you can do?

  • How does virtual memory work?

  • CPU vs GPU

  • How balanced search trees work? Compare them to B-trees.

  • How would you find the smallest (by layers size) neural network for a given task?

  • What’s a re-entrant Mutex (spin lock) and what’s good for?

  • How are threads implemented in Python?

  • How do convolution neural networks work?

  • How would you find and fix a bug in a distributed system?

  • Python fundamentals.

  • How does k-mean clustering work?

  • Design a key:value storage for an analytics system. E.g. want to support, Count, Min, Max, Stddev, Ema. Hm, maybe it was just logging (url, timestamp) and design those distributed operations over it.

  • Number of inversions in a permutation.

  • Simplified multi-string match, list of words of length 3 and find the shortest substring containing a permutation of them (e.g. [abc, foo, bar] in string ganbdbarfooabcgj)

  • Compact tree: transform a tree such that has nodes only with 0 or N children, and if A was parent of B in the original one, B can’t be a parent of A in the transformed one.

  • Iterate through a tree in a BFS manner. Design a tree which allows this without overhead of a stack.

  • Word wrap, i.e. given a string containing words, return the shortest list of strings where each string has length <= 80 AND all the words are preserved (you cannot split a word into multiple lines).

  • How do you search for similar images?

  • Differences between Hashmap and BinarySearch?

  • Essentially an segment tree

  • What does clean code mean to you? (multiple times)

  • Design an image search system

  • What are important practices in C++ to look for?

  • How does the const keyword work?

  • How does virtual work?

  • Find the biggest rectangle in the point cloud? The R can be rotated, doesn’t have to be exact match. How do I decide that four points make up a rectangle?

  • Find a loop in a linked list.

  • Delete an element from linked list.

  • Sort and array with custom sort order.

  • Swap elements in a “#define” macro.

  • Implement a peek iterator

  • Variance vs. bias tradeoff

  • Find duplicate files in a huge filesystem

  • Implement a counter with increment, count(last 5mins)

  • Find a value occurring ½ times in the array, if there isn’t output null.

  • How would you execute a stock exchange order?

  • Design an ATM. Interfaces for components like card reader, display, bank connection, …

  • Design an elevator. Use cases, goals.

  • Design a personal library, DB data model

  • What are error codes of HTTP?

  • Implement a sudoku solver

  • Do any of the K queens on this infinite board with stones attack each other?

  • Implement a LRU cache (this problem is common, often masked)

  • You can make two trades, you have the full history, compute the maximum profit.

  • Get prepared to discuss this article.

  • Get full file paths from a directory layout.

  • Do 4 integers in an array sum up to K?

  • (Homework) Implement a stock exchange processing Market/Limit and Buy/Sell orders

  • (Homework) Given an arbitrary text document written in English, write a program that will generate a concordance, i.e. an alphabetical list of all word occurrences, labeled with word frequencies. Bonus: label each word with the sentence numbers in which each occurrence appeared.

  • (Homework) A Blob is a shape in two-dimensional integer coordinate space where all cells have at least one adjoining cell to the right, left, top, or bottom that is also occupied. Given a 10×10 array of boolean values that represents a Blob uniformly selected at random from the set of all possible Blobs that could occupy that array, write a program that will determine the Blob boundaries. Optimize first for finding the correct result, second for performing a minimum number of cell Boolean value reads, and third for the elegance and clarity of the solution.

Author: Peter Csiba

Software Engineer at Google

Leave a Reply

Your email address will not be published. Required fields are marked *