Ask Gayle: What do delays mean?

Gayle: I interviewed with a company two weeks ago, and they haven't notified me of a decision.  I even tried emailing the recruiter - no response.  Does this mean I'm rejected?

~ Sanjiv, New York

In one word: no.  After you interview with a company, they will always tell you if you're rejected or not.

Delays can happen for many reasons, good, bad and neutral:

  • They are going to give you an offer, but would like to have all their paperwork together.
  • They prefer another candidate, but are waiting for her to make a decision.  You are their second choice.
  • The team is being "reorg'd" and the current headcount is unclear.
  • Your recruiter went on vacation.
  • The recruiting team is being reorg.
  • You have a bad / lazy recruiter.
  • One of the many people you interviewed with is slow about entering feedback.

Hang tight - they'll tell you, eventually.  In the meantime, feel free to politely email or phone your recruiter every several days to check in.

Good luck!

Cracking the Coding Interview - Now on Amazon!

Cracking the Coding Interview is now on Amazon!  This book is packed with lots of great content, including:

  • 150 Programming Interview Questions and Solutions
  • Five Proven Approaches to Solving Tough Algorithm Questions
  • Ten Mistakes Candidates Make -- And How to Avoid Them
  • Steps to Prepare for Behavioral and Technical Questions
  • Interview War Stories: A View from the Interviewer's Side

If you're prepping for a software engineering interview at any company, this is the book to get.

One developer's experience (successfully) interviewing with Google India

This is a very nice write-up of a Google interview. For the most part, his analysis of the interview is totally accurate. Read it here. There are a few things incorrect, though, that I should clear up:

  • "No positions for Java programmers". There are lots of positions for java programmers. But, if you see yourself as that, you may not be a good fit for Google. Google wants scientists, not trade programmers.
  • "Same kind of numbness". I don't think is a "strategy" of the interviewers - more likely it's just their personality. What would expect - jumping for joy if you get a great answer? There's really little excitement with a great candidate because they've asked these questions dozens of times. Nor are they going to show frustration.

That said, there's nothing special or magic about a Google interview. Google asks the same kinds of questions as all the other top firms. Programming interview prep is universal (easier for you!).

Picking the Right Companies

I've been working (working: v. to write one or two sentences with the intention of finishing it up later that day, or the next day, or...) for a while on a post about how to pick which companies to apply to. Jon Pincus, my former manager from Microsoft, has done a better job that I would have, so I'll just let him take it from here... Jon Pincus: "You probably won’t be able to get your dream job in your next job; what you want is something that’s noticeably closer than where you are now, and makes it a lot more likely that the following job has even more of the dream job characteristics."

Or, if you're one of those people who want to go to a big company and are just trying to come up with names, Google Sets can actually be useful here. If you put in Google, Microsoft and Apple, it'll return related terms such as Intel, Sun, Yahoo and Blackberry. It's not a perfect list, but it's a start!

Great Resumes for Software Engineers

When I was in high school, a teacher returned an essay of mine with the following written on the top of the paper: "Know your audience." The task was to write a persuasive essay on any topic of our choosing. I just so happened to pick a topic on which the teacher had extensive knowledge and strong feelings. I hadn't been thinking about this at the time I chose the topic, but he was right - I should have known this wasn't a good topic. Lesson learned. Writing a resume is no different. Tailor what you're writing to the specific company and position.

Resume Cosmetics

  • Avoid the Text Blob: Employers don't read your resume - they glance at it for, oh, 10 - 15 seconds. You can't absorb key points from a large blob of text, so bullet your accomplishments instead. Write short, concise sentences. Craft your resume such that a quick glance is enough to say "wow".
  • Use a Template: Do *not* just type everything into Microsoft Word - format your resume nicely by using a template. Microsoft Word has lots of built in resume tables - use one, or make your resume.
  • Pages: if you're a recent college graduate (last few years), your resume should probably be one page. Can't get it all in one page? Trim it down to the most important stuff. This is actually a *good* thing to do, because the best stuff will stand out more.
  • Formatting Tip: Electronic copies: if you create a good format in Micosoft Word, your resume probably uses tables. You may have noticed that table borders show up when you view them in Word but not when you print them out. And guess how many people will view your resume? That's right - on Word. So, you'll want to *really* hide your table borders. Here's how: instead of setting the borders to invisible (invisible on paper, but visible electronic), set them to visible but white. They'll be truly invisible then.
  • Filename: A lot of people send me resumes named liked "Resume.doc", and they get lost. If you don't want your resume to be lost, put your name in the filename (eg, "John Smith Resume - April 2006.doc"). I *highly* recommend that you save it on your computer with such a filename this way you won't forget to send it with the proper name.

Resume Content:

  • Accomplishments, not Responsibilities: Employers want to know not just what you were assigned to do, but what you actually accomplished. For example, saying something like "Reduced time to perform X by 75% by optimizing Y" looks much more impressive than "Responsible for optimizing X." List your accomplishments over your responsibilities, and be specific.
  • Projects: Employers want to see practical experience - that means internships and projects (this is especially true for Software Engineering positions). Yes, have a specific section on your resume for projects - 3 to 4 projects is ideal, whether they're class project or personal projects. If they're personal projects, say so! It shows passion and motivation.
  • Kill the Fluff: I have never once said "oooh... this person claims to have great team working skills. Let's hire them!" Maybe I'm wrong here, but I don't think employers believe fluff stuff just because it's on a resume.
  • For US Positions: Please don't list your age, marital status, gender, etc. I see this a lot with international applicants. In the US, it is illegal to use those as factors in a hiring decision. We don't want those on your resume.

Resume Wording & Proofing

  • Bullets: Bullet each item for a job - you don't need to write complete sentences. Use action words.
  • Spelling & Grammar: Once you've done all this, make sure to check for spelling mistakes, grammatical mistakes and typos. Get as many people as possible to read over your resume and tell them to be picky. This is especially important for non-Native English speakers. Many companies will, unfortunately, toss your resume for a simple spelling mistake.
  • Personal Information: This should be obvious, but double check that your phone number, address and email address are correct. Don't list your cell phone unless you are ok with receiving calls on it.

Resume Customization: I've said that you need to customize your resume based on the position, so I'll explain a little bit about what I'd do for each company. But first, a short summary of the various things I could include:

  • Microsoft Software Engineering Internships: 2001, 2002, 2003
  • Apple Software Engineering Internship: 2004
  • Google Software Engineering: 2005 - Present
  • TAing in College, including being Head TA
  • Webdesign / webprogramming for a small company in Philadelphia before going to Google
  • Creating a course in college and teaching it
  • Teaching at University of Washington while working at Google
  • Planning a lot of large social events with 200+ people (see http://www.theseattleantifreeze.com)
  • 3 or 4 "meaty" projects in college
  • CareerCup (a website for technical job applications)

Software Engineer (anywhere): I'd want to show off the technical problems I've done, as well as show myself to have good initiative. So, I would emphasize the technical work I've done at Google, Microsoft and Apple (big names = prestige). I'd drop the webdesign work - doesn't add much given the other jobs. I'd talk a bit about CareerCup, since that shows independent work. I wouldn't talk much about teaching or event planning, but I'd given them a brief mention.

Program Manager: I'd want to show off some technical stuff, but I also need to show good planning skills, design work, initiative. Google/Microsoft/Apple would have some stuff, but I wouldn't go into as much technical detail. I'd talk more about CareerCup (initiative, ability to drive a project). Planning large social events would be somewhat important too (shows leadership). Teaching at UW and Penn would be good to talk about as well because it shows communication skills and leadership.

Board Position for Theater: I recently applied for a board position for the young professionals group of a Seattle theater. I talked a bit about Google, Microsoft and Apple, but dropped a lot of the technical details. I talked a bunch about event planning, because they would want me to help plan events. I talked more about the various websites I maintain, because, who knows, maybe they would want me to help out with their website. I talked about creating a course at Penn and UW (initiative, communication skills, etc).

I never once exaggerated what I did - I simply cut details or elaborate depending on how important something is.

Resumes for Software Engineers: I'll talk specifically about this since I see tons of Software Engineering resumes.

  • A company like Google or Amazon, which does a lot of server / web work, will be most interested in projects you've done relating to the web or to scalable systems. Microsoft, however, might be more interested in client-side work. Again - customize!
  • Languages (Foreign & Programming): Many employers will expect you to actually be able to *use* the languages you list on your resume - that means if you list French, you should be able to speak french. If you list C++, you should be able to write in C++ - and they might just test you on it. A good thing to do is to list your languages like this:Proficient with: Java, C++ Previously worked with: C, C#, Javascript, HTML Oh, and this is just a pet peeve of mine that has to be said: if you've worked with C++ and C#, don't list them as "C++/C#". Yes, their names sound similar but the languages aren't. The same goes for Java/JavaScript
  • GPA: If your GPA isn't on your resume, the assumption is that it's below a 3.0. So, if you have a 3.2, list it! You can list either your in-major GPA or your total GPA, or both. Feel free to list which ever one's higher. Also, many universities have a policy that you can round your GPA to the nearest tenth. Check with your school, but if so, you should round that 3.67 to a 3.7. Every little bit helps, right?

The most important thing to remember is that all you get to show off your years and years of experience is about 15 seconds. Can you tell the employer enough in 15 seconds to make them pick up the phone and call?

How do you get the right skills?

Technology is a somewhat unique field - in my completely biased opinion - in that your raw skills are tangible and testable. That is to say, in an interview, there's typically less emphasis on "fluff" and more emphasis on what you can actually do. So, how do you build these raw skills?

Regardless of what position you're looking for, if you want to know how to get there, you should ask someone in the field. Think about where you want to be in the next few years. Find a person who is right now where you want to be and ask them (ask them what?) If you don't know anyone offhand, well, that's what Google is for. Find someone and email them. People are pretty willing to help - if you only ask!

That brings me to the specifics. I've been a software engineer at Google for the last two years, so people ask me pretty frequently how they can get a job at Google. The number one thing that I think is missing from applicants is real project experience.

If you're in school, you should study hard and all that good stuff. But, that's not enough. You need project experience - companies want to see what you can actually code. By the time you've graduated, aim to get at least three major software development projects under your belt. Here are a few ideas as to how to get those projects:

  • Many schools offer the ability to do an independent study. Think of an application that you want to build, pitch it to a professor, and maybe you can get credit for it by doing as an independent study.
  • Talk to professors that you know - or even ones that you don't - and ask them if you can help them out with research. If you want to be a software engineer, focus specifically on the projects where you'll be writing code in a language like C++ or Java (as opposed to, say, MatLab).
  • Check out the code to an open source project and build it. Take some time to learn the project architecture, then start coding. Start with fixing a few bugs, and then move into real feature work.
  • Enroll in courses which have large projects. Yeah, they're hard, but no pain no gain, right?

If you're not in school right now, you might be able to enroll in courses at a local university. But if not, you can still do projects on your own. Start with something small - like a Google Maps mashup listing your favorite restaurants - and go from there.

You'll learn a lot from coding on your own, but the benefits go beyond that - simply the fact that you did coding on your own rather than for work / school shows the passion and dedication that every company wants to see.

How to Get Your Dream Job

Every few weeks, I get an email from someone asking if I can get them a job at their favorite tech company. Sometimes I can get this process started for them, sometimes I can’t, but either way, the process of getting a job is about far more than just submitting your resume. So, here it is: getting a job in ten not-always-easy steps.  I’m going to write about each one of these in more detail.

  1. Build Raw Skills Think a few years out about what position you’d like. What do you need to do to get there?
  2. Prepare a *good* resume Great experience isn’t enough. You need to show this in your resume. Remember – a resume is not a timeline of everything you’ve done; it’s a proof of your skills.
  3. Picking the right companies To list just a few things to think about: company size, company culture, the role of someone in your position, how long the company has been around, what the company actually does, growth of the company, location, etc.
  4. Prepare a cover letter This is a company’s first introduction to you, so make it perfect.
  5. Apply! Getting your foot in the door at a company isn’t always easy, but there are a few tricks I’ve learned...
  6. Preparing for the interview Know what to expect and prepare accordingly. If you’re reading CareerCup, you’re probably off to a great start.
  7. Interview This is what it all comes down, and there’s a lot you can do to shape the outcome.
  8. Negotiate You can negotiate (almost) any offer – even if they say it’s "non-negotiable"
  9. Make a decision If you have several offers, you’re in a great spot. How do you pick the one that’s right for you?
  10. Accepting & Denying Accepting an offer is easy, but don’t forget – it’s important that you decline the offer the right way too.

Stay tuned – I’ll elaborate on each one of these in the upcoming weeks.