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
  • 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?