An Unconventional Guide for Getting a Software Engineering Job

  Working the Tindie booth at PyCon 2014 (Python programming conference). There were 54 other companies hiring engineers there (yes, I counted).

 

Working the Tindie booth at PyCon 2014 (Python programming conference). There were 54 other companies hiring engineers there (yes, I counted).

BACKGROUND

At the time of this writing, I’ve been in Silicon Valley for 8 years.

I’ve worked at big companies and small startups. I've interviewed at many of the usual suspects (Facebook, Google, etc.), as well as several startups (some now defunct, some on the road to IPO).

I’m currently a Senior Engineering Manager at Slack and was previously the CTO of Tindie. I have interviewed dozens of engineering candidates and spent the past several years mentoring junior engineers and hearing feedback on their interview experiences at companies large and small.

This blog post details all the aspects of finding a job that I wish someone had told me years ago. The majority of the advice I give is targeted at those looking for software engineering roles, but some of it can be generalized to other positions as well.

This advice is based on my personal experiences, as well as the experiences of my close peers, my mentors, people I have mentored, and other startup CTOs I’ve been in close contact with. As usual, YMMV (your miles may vary).

All the stories are true, but some of the names have been changed.


WHERE DO YOU WANT TO WORK?

"So who is hiring?"

Reframe: Think about:

  • What industries am I passionate about?
  • What apps do I use on my phone everyday?
  • What websites/tools do I regularly visit? (browser history is your friend)

Early in my career I conducted very reactive job searches, rather than proactive, making it very hard for me to find a place I actually wanted to work.

I would let the jobs and recruiters come to me rather than keeping my eyes open for new opportunities. This often resulted in me interviewing at places I wasn’t interested in working, didn’t understand me or my career goals.

While interviewing at jobs you aren’t interested in can be good interview practice, it is not a good long term strategy for finding a job.

I got into the practice of asking peers that I respect and who know me well where they would work if they were going to leave their job tomorrow, and why. This yielded many great companies that weren’t on my radar.


Priorities, Priorities, Priorities

“I would consider any job!”

Reframe: What are your non-negotiables?

My first job at a startup required me to commute 3 hours total each day, and had almost no flexibility in terms of working from home.

As someone who is an avid runner, this was a disaster. I was working long days (10+ hours) so I would spend 13 hours away from home each day. I never had time to run, and if I did fit in a run before work I was exhausted. I’m much more productive after I run, and I often think through tough problems while I’m running. My quality of life suffered tremendously and I was a much less productive employee.

Write down a list of what is important to you for your next job. Consider factors such as:

  • Location: are you willing to relocate, what is your max commuting time, etc.
  • Big/small company: for small companies it helps to think in terms of the size of the engineering team: 5 engineers is a lot different than 50.
  • Minimum salary requirements
  • Flexibility to work from home
  • Job role: are you okay with starting off in support or customer service? If interviewing for a management position are you okay with starting off as an IC (individual contributor)?

You may not know if you want to work at a startup or big company, or you may not care where the job is physically located - that is fine. Just write down what is important to you. If you don’t do this, you’ll find yourself compromising on things you never thought you would (“Maybe commuting 3 hours a day won’t be that bad...”).


Resumes

“I have done a lot of front-end work, but I’m interested in full stack...but maybe I should apply to front-end jobs and tailor my resume to that.”

Reframe: Don’t put yourself prematurely in a box.

In the Spring of 2011 I had breakfast with DJ Patil. I was interviewing at various startups and trying to figure out how to best tailor my experience for each role. The problem is that I love doing front-end work, back-end work, databases, product, etc.

He gave me a great piece of advice:

“Instead of pigeon holing yourself, instead tell them what you’re great at, what you’re passionate about. Then see if there is a fit."

Don’t mold your interests to fit their job requirements.

Great companies (the ones you want to work for) won’t pass on an excellent candidate because s/he doesn’t have exactly the specific skill set they are looking for. For example, companies that say “she has written Python, but we are a Ruby shop, so we can’t hire her” don’t understand that great engineers can not only can pick up new technologies quickly, but these passionate engineers love learning new things!

There are times when deep knowledge about a particular language/infrastructure are needed, but for most roles (especially junior positions), hiring a software engineering generalist is just fine.

Experience is (generally) replaceable, passion and enthusiasm are not; show that you are excited about engineering.

Further Reading: Nicholas Zakas has a great blog post Generalists and specialists: thoughts on hiring that I have found useful to understand at what stage hiring a specialist vs generalist is useful.


Understand how companies source and hire talent

“I’ll just send my resume to their jobs@company.com email address”

Reframe: Companies get hundreds, if not thousands of resumes sent to their job email address each day (this is called "inbound"). That is a lot of noise, and they often miss good candidates.

To illustrate this point: I have a close friend who has a CS degree from MIT. She’s worked at several large public companies. She decided to apply for jobs at several "hot" San Francisco startups. I define "hot" as companies that have significant inbound interest to their job postings and are frequently written about in the tech press. They are often top of mind to engineers applying for jobs.

She emailed her resume to their jobs email address.

She was turned down for every job without even 1 interview. Later, she had a friend at one of these companies deliver her resume to the hiring manager; she had lunch with him and she was fast tracked through the hiring process.

Most people think that hiring processes are optimized to help a company hire great people. This is often not the case. They are optimized to help a company NOT hire less competent people.

The implication of this is that they are less willing to take a chance on someone. Venture capitalists work the same way: they would rather pass on a deal that later was a home run than do a deal that ends up a disaster. The repercussions of dealing with a bad hire (or a bad deal) are much worse that the repercussions of passing on someone or something great. It’s all about risk mitigation.


how to find a contact in a company

  • Have your resume/LinkedIn given to the company through an intro. Find someone in your network who knows someone at the company.
  • If you can’t do this, find someone at the company (search their About pages, which often have links to employees’ LinkedIn, Twitter accounts, etc.) and email that person asking about the company. I’m not saying you should harass them, just politely reach out, indicate you’re interested in the company, ask for advice on how to apply. Most people want to help.
  • If there are any women working there and you are a woman, specifically email them. If you are not a woman, don't do this. If there is someone at the company who went to the same university as you, that is also a way in.
  • Startups often sponsor hackathons, meetups, etc. Stalk the companies (not people) you’re interested in and go to those events. Talk face to face with employees and if you feel the conversation is going well, get their email address. Follow up with your resume/LinkedIn and why you want to work there.

Further Reading: Sara Mauskoph wrote a great post about her job search process: Landing your next gig, particularly around reaching out to companies.


LinkedIn

"Do people actually use LinkedIn? I don’t think so, the last time I updated my profile was 2 years ago and no one looks at it."

Reframe: People use LinkedIn all the time. Really, all the time, and I'm not just talking about recruiters (although they use it a lot). To see this phenomenon in action read Elaine Wherry's "The Recruiter Honeypot".

The goal of using LinkedIn is to be easily findable for new job opportunities. This is especially true early in your career when no one knows who you are or that you even exist. 

I'm not saying you should never maintain a Word/PDF/text resume outside of LinkedIn (especially if you have worked on projects you can't publicly discuss on LinkedIn). However, if the majority of people searching for candidates use LinkedIn, then it behooves you to have a profile where people are looking! Creating a personal website, a GitHub profile, etc. are all great too, but how will people know to search for your personal website and find your resume when they don't know you exist?

How I use LinkedIn: I know a lot of people, more than I can possibly keep track of. When I'm mentoring someone and they are looking for a new job, I used to brainstorm who I should intro them to. This took a non-trivial amount of time and I would inevitably forget someone. Now I point them to my LinkedIn profile and they let me know who in my contacts they want to meet (another trick I learned from DJ Patil).


Recruiters are not your friends

“A recruiter at company XYZ emailed me and says I look amazing. How awesome! This recruiter really likes me and has my best interests at heart!”

Reframe: Outside recruiters (also called contingency recruiters - in other words, recruiters that do not work in house for a company) are typically paid 20%+ of salary for anyone they source (meaning find) and are subsequently hired by the company. So if you’re hired for $100K, recruiter gets $20K+.

Recruiters want to get as many candidates in front of a company as possible to increase their chances of one getting hired, and thus getting paid. I’m not saying recruiters are ill-willed or malicious, they will just say anything (truthful or not) to get you to respond to them. Don’t fall for recruiter flattery. 

I know of many engineers who assume that to start their job search they should find a great recruiter to help them. Great recruiters do exist but they are hard to find, so I would instead suggest Angel List Jobs or HIRED (especially early in your career).

For every email from an engineering candidate interested in a job I posted, I get 5-10 emails from recruiters (whom I have never met or corresponded with) telling me about all the engineering candidates they want to send to me. I do not respond to these unsolicited emails.

Further Reading: Elaine Wherry's The Recruiter Honeypot gives a great description of how recruiters work.


Interview Prep

“Every interview is so different so how could I possibly prepare?”

Reframe: Most tech interviews - especially those that have generic whiteboard coding questions - are like taking the SAT. If you study, you’ll do better.

There are two facets to interview prep:

  • Educate yourself about the company. This sounds obvious and like a no-brainer, but you would be surprised how many people I have interviewed that really have no understanding of what my company does. Understand the technical challenges the company faces (a good place to start is the company's engineering blog).

To illustrate this point: Several years ago I interviewed at a San Francisco startup that was frequently in the news. I read all the articles about the company, including a couple in-depth pieces in WIRED magazine. I went through the CrunchBase profile of the founder. I read their blog, paying particular attention to the engineering challenges the company faced, and how they were approaching them.

In the interview they asked me how I would solve these exact challenges that I had read about. I was very glad I knew what they were beforehand and had spent some time thinking about these exact problems. It almost felt like cheating.

I asked them why they asked those questions, and they said that almost every person they had interviewed hadn’t read their press or their blog.

  • Do practice technical whiteboard questions. Go through Programming Interviews Exposed and do all the questions. This is an excellent reference and walks through common questions with in-depth solutions.

If you need more, then tackle Cracking the Coding Interview - this is more of a rapid fire book with tons of questions and short answers, hence why I think you should go through the more detailed book first.

Programming interviews very frequently use questions from these books (sometimes with only slight changes) so it helps to gain familiarity with these questions.

Further Reading: Lynn Root (software engineer at Spotify) has a great blog post about how she prepared for her tech interviews.

Pro tip: A friend once told me: “Whenever someone asked a question I didn’t know, I would ask the interviewer what the solution was. Nine times out of ten, at my next interview, someone would ask the exact same question."


Interviews

"I’ll just show up and they will ask me a bunch of questions."

Reframe: Always, always have a list of questions that you will ask the company!

For the interview the company will need to gauge your skill level of what you explicitly state you are good at. So even though you might not write JavaScript everyday, the company will get their best JavaScript engineer to interview you if you say your best language is JavaScript.

I suggest asking these questions (in addition to your own):

  • What are your expectations for a person in this role?
  • What does success look like?

If you are interviewed by 8 different people and receive 8 different answers to the above questions, this is a very bad sign and indicates the company is not on the same page internally about what they are hiring for. You will never be successful at a company where your manager wants you to do ABC, the CEO wants you to do XYZ and VP of Engineering wants you to do 123.

I have found that women are frequently too humble and volunteer discussion of their weaknesses (this also applies to men but I have seen it more often happen with women). Honesty is important, but remember, you’re being compared to people who might overstate their strengths and understate their weaknesses.

Don’t go into a job interview saying what you can’t do or have limited experience doing. Instead talk what you have done, what you love and what you’d like to explore more.

Further Reading: 

  • Julia Evans (software engineer at Stripe) has a great list of Questions I'm Asking In Interviews that she poses to potential employers.
  • Cate Huston offers the perspective of the technical interviewer in How I Interview (Cate has extensive experience interviewing candidates at Google).

Salaries

"The company wants to give me an offer, but before they do so they have asked for my salary history. I better give them this or else they won’t offer me a job..."

Reframe: Do not give out previous salary information.

Companies want this information for several reasons:

  • What other companies are paying their people (collecting data points for competitive analysis).
  • Seeing how low of an offer they can get away with giving you.

To illustrate this point: in the Spring of 2011 several of my colleagues from IBM Research were leaving for other large tech companies in the Valley.

One was about to receive an offer from another large company, but first he had to submit 5 years of salary and bonus information. He obliged and got what he thought was a competitive offer, but it was the only place he interviewed so he wasn't actually sure of this.

A year later another colleague was thinking of joining that same tech company. She refused to give salary numbers, even after being repeatedly asked for this information from the recruiter. She instead got a competing job offer from another large tech company and used that offer (which was much higher than her current compensation) as leverage in the negotiation. Her offer for a role similar to his was 30% higher.

Since women are typically underpaid (generally speaking they don’t aggressively negotiate their starting salaries as often as men), a way to continue to be underpaid in the future is to disclose your current and previous salaries. This is also true in general for people who are not aggressive negotiators.


Offer Negotiation

"Wow, the company has given me an offer. It’s more than I expected! I should just accept right now." (this is an actual quote from someone I mentored)

Reframe: Companies generally expect you to negotiate. They usually build in 20% wiggle room, so if you are offered $50K they will probably would easily be open to negotiating up to $60K (and probably more), but this varies greatly by role. I have seen senior execs negotiate for 50% more.

No one will get offended by you negotiating for more money or better benefits. I have regularly seen male applicants ask for 40% more and end up with 20% more, and women applicants ask for 20% more and end up with 10%. If the company does get offended, then it’s likely not a good fit for you anyway.

There are exceptions to this rule:

  • New grad positions, meaning people who have just graduated from college/university. Those salaries are often the same across the board at a company, but you can negotiate for things like relocation.
  • Entry level developer positions, meaning people who have graduated from developer bootcamps or are newer to programming. For the same reasons above, many companies will fix these salaries across the company.
  • There are some companies that don't allow for negotiation of their offers, but they will tell you that up front.

Negotiation is an important life skill, and people who do it come across as more senior and competent.


Which job should I choose?

"I have this great offer, I’ve negotiated up, so I should just take it!"

Reframe: Now that you have the money you want, will you be a cultural fit in the organization? In an ideal world you shouldn’t waste your time negotiating with a company that is obviously not a good cultural fit for you, but on the other hand it can be good practice.

Look at the managers/leaders of the company: CEO if it’s a startup, department head if it’s a larger company. The qualities that s/he exhibits are the qualities that will be valued in the company. For example, if they are aggressive, aggressive people will more often be promoted.

This is because of an intrinsic bias toward homophily - in other words, we like people more who are similar to us and often more frequently promote people who remind us of our “younger selves”.

At small startups, the background of the CEO generally dictates how decisions are made. Is s/he an engineer? Then most likely engineering will be more highly valued and have more of a say in decisions than other functions such as marketing, sales, business development, etc. This is because the CEO knows how engineering works and has innate biased towards it. In this case engineering is the CEO's “favorite child”.

I am not saying you should not take an engineering job at a company whose CEO used to be in sales, for example. However, if you do want to do this, ensure the technical leaders at the company are very strong and the CEO respects them.

There is a large downside to working at a company run by a former engineer: s/he will often be tempted to “help out” engineering since s/he feels most comfortable with that department because that is where s/he started.

This can be very dangerous because the CEO is likely very distracted with other very important tasks (like running the company) and so s/he might be very tempted to give “drive-by advice”: surface layer advice that well intentioned but not practical because it doesn’t come from a deep understanding of the intricacies of the problem. However, because the advice came from the CEO it is often taken very seriously (often too seriously) and can be very distracting.

The upside is you may have a lot of interaction with the CEO, the downside is you may have a lot of interaction with the CEO.


Equity

"The startup gave me an offer, but they are also giving me equity. I don’t know what this equity means! I guess it’s a reasonable amount and I should just accept."

Reframe: It is your responsibility to understand stock, options, vesting, etc. My good friend David Weekly has written a great guide that is targeted towards people that have no idea how this works: An Introduction to Stock Options for the Tech Entrepreneur or Startup Employee (long, but a good read). 

If you have never had a job offer that included equity before, then determining out how much the equity is worth can be very confusing. Do not be intimidated. Remember -- the value of your equity when you join the company might be very, very different from when you leave the company. It could be worth much more, or much less, but at the end of the day 10% (or any %) of $0 is $0 so just because the equity is worth something now doesn’t mean it always will be.

Further Reading: Offerletter.io has a great post about Understanding and Negotiating Startup Equity.


You've made it to the end! Thanks for reading. Please don't hesitate to contact me if you have feedback.