Software Engineer Seeks Jobs in the Silicon Valley - An Experience
I work in Silicon Valley as a software engineer with 11 years experience, and recently I started looking for a new job. I had 5 offers in 4 weeks, and made a decision to join a mid-stage startup. People kept saying the market was "hot" right now but I tend to think it's just warm. Which is sobering since the bay area technology companies are doing very well. Maybe people are more "productive" right now. This article follows me through the experience, and is hopefully helpful to others.
A number of people have given me some advice over the last 5 weeks. The most interesting advice seems like the most difficult - don't stop interviewing for long stretches. This was in the context of "you should always keep your interview skills fresh, and keep learning what is asked". I think it's good advice, probably best applied when you're happy in your current job, and aren't scrambling like mad on some project. I'd also add blog about some interesting stuff while you are working - it will all help with your personal "brand" and confidence ultimately. So, whether you're doing this out of necessity, or just to keep your hand in, there is definitely an art to interviewing, and it pays to prepare.
So I started looking for a job. And feeling pretty good, until I bombed my first interview.
The Bombed Interview
After 4 years in one position, and no interviewing in between, going in to an interview unprepared was a painful wake up call. The first interview I bombed in a number of ways.
- I had no prepared anecdotes about features I had worked on previously. It's really important to be able to rattle off a few stories about stuff you've done. People love stories. You need to be able to cover different angles - most technically successful project, most business-successful project, least favorite successful project, and one when failure did happen.
- I mentioned a technology that I had no real experience with, and was then asked alot about it. This is a bad idea. Best to not use hot technology keywords and just say "I've never used it in anger, but I know what it does and when to use it". In this case, it was memcached - I knew what it was but had never had to use it in anger. How would it be used for a web application, what are the tradeoffs etc. (a few large or alot of small objects...when? type questions). Best to take this mistake as a learning experience, go home and write some code to improve yoursef.
- I did not pay enough attention to correct syntax with the technical questions and took too long on the unimportant details. When you are answering technical questions, it's great to be expository and animated, sharing your thought process. But if you do that and wander off point for too long, or mess up syntax then usually the interviewer becomes uncomfortable. That's bad news.
Prepare the Backdrop
After that bombed interview, I did not rush off straight away into a world of recruiters, phone interviews and on-sites. When you do get a phone- or and on-site interview, you can be pretty sure that the hiring manager will run some reference searches online on LinkedIn, and Google your name. That's what I would do! So I wanted to be sure that they would find compelling content online about me. This meant preparing a few things: the resume, the LinkedIn profile, my personal website and this blog. For me, I wanted consistent information, no links to distracting content (Facebook, photos etc) and interesting content as much as possible.
I decided to approach the problem of consistent content by writing my resume in a Word document, and then using that content for both my LinkedIn profile, and my personal website. This way I could add details on LinkedIn and my website that added richness that I could not fit into the resume due to space limitations.
- Resume: I started by designing my resume a little differently: it was a 1 page, 2 column layout that I eventually expanded to 2 pages to include more technical detail, on the advice of a couple of recruiters along the way. The effect of this was to purposefully disrupt the "scanning" behavior of hiring manager who scan left-to-right full page for interesting tidbits. With the 2 column layout, many said it was harder to find information - but it also meant they paid attention a little more. A trade-off I thought desirable - the left side was about contact details, a photo and objectives/skills, while the right side was employment history with tight text about achievements/responsibilities. I also flipped these descriptions into third-person. This made my resume sound more like a consultant's profile, avoid's the "starting too many sentences with I" problem, and reads slightly more fluently and formally to me.
- LinkedIn Profile: I put quite a fair amount of time into my LinkedIn profile anyhow. It pays to update it every now and then (I try annually) to get re-indexed and add new skills and publications or other new sections that are now supported. I took the time to pick three old publications, including my Ph.D. thesis, and added some new skills. I took the existing positions and filled in the content with that from the resume. THe LinkedIn folks want this to BE your resume - but for better or worse there are some old-style recruiters that still need to expect a resume. More on this below.
- Personal Website: I decided to research templates for HTML5 sites. This way, my content would look nice on many devices that access the site. I developed a basic "Home/Experience/Contact" site and used the resume content again. this time, I added a narrative on the home page about what I had done previously.
- Blog: I had blogged here on a few topics while working. I've linked this to my LinkedIn Profile so when I post an article, it shows up there. I also set up a ping.fm account to advertise posted articles on Facebook, LinkedIn and Twitter all at once.
Prepare The Stage
Before engaging the real world, I found it very central to visualize explicitly what I wanted in a new job. I took all the positives from the last job and spent time designing what my own engineering team and process would look like. In my case, I ended up looking for a mid- to end- stage startup with a challenging, interesting domain. My criteria ended up being:
- location / commute
- business domain
- perceived compatibility between myself, management and future colleagues.
- technology stack and engineering process
- benefits package
Start the Show, Act I: Contacts, Recruiters and Companies
I did not really have any recruiters from previous efforts, so this search started with people I knew (always great to find companies through them) and took the approach of going with many recruiters at once. I became a job seeker and open link member on LinkedIn, and replied to all recruiters who had previously and were now getting in touch with me. This means I was actively engaged in about 20 contacts at once. Gmail Calendaring on my iPhone became vital. I also liked that I always sounded busy because it was hard to find a slot for a phone interview. The flip side is that managing these people and dealing with phone calls becomes time consuming. However, I think it's important to go wide initially - I have an idea on who the best recruiters are and what their approach is. It sounds cliche, but I'd look for recruiters who use LinkedIn, have recommendations and spend far more time asking about you rather than just getting you to look at companies. Also, if they do talk about companies, they spend some time talking about the hiring manager.
I found after a few days it was harder for me to source companies of interest by myself, and I'd exhausted the initial batch of recruiters. I then started seriously looking at online job boards: stack overflow / stack exchange / linkedin / careerbuilder /monster / craiglist. I also started looking at Y Combinator and other venture capital sites for companies that were funded 12-24 months ago that looked like they were doing well. That's how I found companies like Evernote and oDesk.
Act II: The Phone Interview
I had very standard and very challenging phone interviews. One company even had me perform a non-trivial programming task that took me 10 hours to complete. And it wasn't free work - it was more like a challenging all-day exam question. I was very impressed by that, and since I eventually stumbled upon the "right" solution after much thought, it gave me a much needed confidence boost! In the end I must have done about 20 phone interviews. I am still waiting to hear back from a few(!), some said no after a day, and some said sure.
Standard Phone Interview Questions (asked >2 times)
- Why did you leave your last job?
- What kind of job are you looking for?
- Your web request is running slowly, what could be the reasons?
- Tell me about a successful technical project?
- Have you managed reports?
Interesting Phone Questions
- When would you use an LRU cache or a LFU cache?
- How would you sort a 1TB file of integers using 1G of RAM and infinite disk space?
- How do you improve the performance of a database query?
When asked if you have any questions, I think it helps to show interest in the company but not too many details of pay, or benefits - it's too early. I try to focus on how they make money, what the commute is like for the interviewer, how many engineers they have, and how they do releases and testing. That shows an interest, without getting too detailed on any one area.
Act III: The On-Site Interview
In the valley, expect 3-6 hours of interviews. I've been to about 7 on-sites in my process this time, and had offers from 5. I've had a number of different experiences - from meeting VPs and management initially, to meeting engineers and product folks but not the hiring manager. Most times you will be asked to code on a whiteboard. If not, be wary! When coding on a whiteboard I found it is very important to be happy, alert, open and to explain your thinking without getting too chatty, or distracted from the problem at hand.
WIth technical questions, if you're good, you'll get by on intuition, design skills and by reviewing your data structures textbook (linked list implementations and hash tables/caches, or other cool lesser known data structures.) Rather than focussing on the actual technical interview questions here, I'm going to defer that to another article; rather I'd like to suggest questions to ask which turn out to be pretty critical I think in showing how you think and your interest in a company.
Questions to ask VPs and CEOs
- Describe how you split your department into groups and how it is working
- What's one thing you would like to improve about your company/department's work process?
- Besides hiring, what's your biggest challenge technically in the groups right now?
- How are you approaching that?
- what are your sources of revenue?
- what's the exit strategy and thinking on timing at the current time?
Questions to ask Managers
- How do you develop your staff professionally?
- Are people working 80 hour weeks? How flexible are the working hours? Can we work from home 1-2 days a week?
- What's the biggest engineering process improvement youa re working on?
- How do you evaluate whether the process is working?
- What's your philosophy about software testing - how do you determine the quality of the software each release?
Questions to ask Future Colleagues
- What's the one thing you would change about your working environment?
- How are production crises managed? Post mortems or responses - are they considered and thoughtful?
- How does the engineering department use QA (if they are separate)?
- Where's good for lunch around here? ( if it's going well )
Act IV: Negotiations
Value yourself well. You've done wonderful things for your last company, and you're good at working with people and not just coding, right?
I suggest being forthcoming and aggressive when talking numbers with your hiring manager. I think it's a good idea to state your previous salary and what you're looking for now. And why.
Don't forget about reviewing glassdoor.com and payscale.com, and (with a grain of salt) asking recruiters what the salary ranges are right now.
I'd also say be firm up front. Let them come back to you with an offer If they come back with a lower offer, provide alternatives. Can you play with benefits? Can you suggest adjusting the mix between equity/payment?
Of the 5 offers I had, I improved 2 of them by significant amounts, another offered $20k less than my aggressive number, and the others got closer (but less than) my aggressive number. One company (perhaps wisely) wanted me to truly want to go there, so rather than made a numeric offer they effectively said "come back to us if you really want to work here". I just don't think that's really giving me enough detail after meeting with them and having a 6 hour interview!
In the end, for the style and title I wanted, because I went aggressive, I can be pretty confident I'm not getting totally ripped off in the current market.
Conclusions
I think reading this should give you some ideas on how to start looking for a job, and some things to think about. I don't really see it as prescriptive, but hopefully it will prod me in the future to get out there and give me a boost on what to think about when I go out there. Ultimately, I'm really lucky that I work in a great, fun field with plenty of opportunity here in the valley.