Tuesday, September 25, 2007

Ten Tips for a (Slightly) Less Awful Resume

Objective: Obtain a position at IBM
-- some idiot applying to Amazon.com

WARNING: These are my own *personal* opinions, not Google's or Amazon's or anyone else's. I do think you'll find that most resume screeners at tech companies — particularly tech companies that build their own software in-house, like Yahoo! or eBay or Amazon.com or Microsoft or Google — will agree with a lot of this stuff, on the whole. But experienced screeners disagree on lots of the little details, and in the end these are just my own opinions. These tips are not guaranteed to get you any better results. Your mileage may vary. Do not use these tips in a bathtub or when standing in a pool of water. Do not tap on the glass or the tips will be irritated. Do not feed the tips. Etc.

Today's scientific question is: why are the resumes of programmers so uniformly awful? And how do we fix them? The resumes, that is.

If you've spent more than approximately seventeen kiloseconds as an industry programmer, you've had to review bad tech resumes. It's just part of the job. Programmer resumes ultimately have to be gauged by programmers — it takes one to know one. So it winds up being a kind of karmic revenge on you for bad resumes that you've written. C'mon, you know you've done it. You even knew it was bad when you were writing it. Admit it! You listed HTML under programming languages, didn't you? Argh!

So why are tech resumes so bad? You know what I mean. You see the craziest stuff on resumes. Like the candidate who proudly lists every Windows API call she's ever used. Or the candidate who lists every course he took starting from junior high school. Or the one who lists college extension courses he took while doing time for armed robbery.

Or that really dumb guy who accidentally listed "work at IBM" as the objective on his Amazon resume. Ha, ha! What a dork!

Oh wait — that was me. D'oh. I sometimes refer to it as my "million dollar typo". It's kind of a painful story, especially for my eardrums, since whenever I tell it people predictably point at me and scream with hysterical girly laughter. Dammit. Not to mention the fact that it cost me a fortune in stock-option valuation because I applied before the IPO and was quite understandably ignored by Amazon recruiters until I re-applied long after the IPO, this time saying that haha, no hard feelings, my bad, I actually wanted to work for Amazon. Ahem.

But hey, I deserve what I got (in a word: "nothing"), because I was, if I may employ the common parlance, an idjit. I think almost everyone's been guilty at one time or another of idjicy when writing a tech resume, although maybe not quite as flagrant as mine was. And if almost everyone's guilty of it, then they must be hard to write.

I think there are multiple root causes. One is that nobody teaches us what companies are looking for. And we don't write resumes very often in our careers, so we don't get much practice at it.

Another root cause is that much of the advice on resume-writing from other industries doesn't necessarily carry over to tech resumes. I'll cover some of these mismatches in my tips below.

Another minor, yet oddly persistent problem is that many candidates are raving pathological liars. You'd be amazed at how many candidates tell me: "Oh, I just put that buzzword on there for the recruiters." Needless to say, this response leads directly to the time honored end-of-interview transmission code: DYHAQFM? ("Do you have any questions for me?")

In spite of all these problems I hold out hope that it might be possible to get at least some people to write better programmer resumes by giving a few free tips. You never know. After all, I can't ask my favorite phone-screen questions anymore – candidates tell me they've read my blog. So maybe someone will pay attention to these tips, too.

I'm just talking about software engineer resumes today, and specifically just the subset intended for applying to companies that build their own software. I have no idea how much (if at all) this stuff applies to resumes for other kinds of positions, or companies. Maybe not much. Sorry!

Anyway, here are my resume-writing tips, which I'm giving directly to you, free of charge, with no strings attached, because I care about you so much.

Tip #1: Nobody cares about you

Ha, ha! Saw that one coming, I'll bet.

Well, let's be a bit more precise: nobody cares about you yet. Not during resume screening, anyway.

Resume screening is just pattern matching. People are trying to figure out if you have the skills they're looking for. If they could do this reliably without human intervention, so much the better. Screeners will like your resume best if it's easy to scan visually, and stories about you and your fun-loving personality and fiercely loyal carnivorous parakeet and year-long hiking expedition in Tibet and blah Blah BLAH just don't scan.

The output of the resume screening step is a decision: should they proceed with you or decline you? Once that go/no-go decision is made and entered into the system, the screeners want to forget all about you. Seriously. They need their cache cleared for the next pattern-matching session. So anything you say about yourself — anything that differentiates you from a machine that can crank out beautiful code — is just an annoying and potentially harmful distraction. At best, the screener will ignore it. At worst, they'll get mad at you and start grading more harshly.

So your best strategy is to avoid talking about yourself. All your hopes, fears, goals, dreams, ambitions — DELETE. (Your resume's going to get a lot shorter from these tips, in case you were wondering.) Your cover letter? DELETE. Nobody cares! Your little clever in-joke in your objective? DELETE. Especially that one. Resumes are not a time to be funny. Believe me, your resume is probably already funny enough without any additional effort on your part.

But what about your precious hobbies section, which identifies you as a well-rounded and socially adjusted person of taste and culture? DELETE! Unless you have relevant hobbies, that is. If your resume is borderline, and you say you're a World Origami Federation grandmaster, then you obviously don't have enough time for programming, so it'll likely get eighty-sixed. If your hobby is writing code, or administering a website, or doing anything remotely computer-related, then it might tip the scales in your favor. Otherwise, just don't mention it!

Face it: all the traditional advice about trying to convince the hiring manager that you're a plucky, scrappy young individual from a farm in Alabama who's destined for greatness on account of your Uncle Ted having given you that pep talk after you fell off your horse when you were a kid — that advice may as well have come from the back end of your horse, because the hiring manager just wants to profile your current skill set. Mr. Plucky goes into the Round File.

Don't get all depressed about this tip. People will start caring more about you as a person in later phases of the recruiting process, particularly if you're one of those candidates who doesn't really like showering.

Tip #2: Use Plain Text

Your resume is going to go through a bunch of automated transformation tools and will be mangled horribly along the way. Any non-ASCII character, such as those nonstandard Microsoft Word bullets, or any accented character, or (heaven help you) Unicode will be turned into our old favorite, the question-mark character ("?").

You don't want your resume to look like this:

  Resum? for Bob?T???Moblin
1997?Present? Vice?F???**??didn?t?do?sh???for?ten?yea???

So write it in plain text. Yes. Text. You know. Like from a typewriter, or Windows Notepad. ABCs, not PDF.

Don't expect any whitespace to make it through except newlines and single spaces. And don't assume your resume will be viewed in a fixed-width font. If you make a nice pretty formatted table using tab characters, it will look like ascii-art smoke signals by the time a human being looks at it.

The maximum amount of ASCII art you can get away with, and even this is stretching it, is hyphenated lines and bullets. For instance, this might be OK:

* B.S. Computer Science, University of Wherever, 1997
* M.S. Resume Writing, 2003
– graduated .357 magnum

But I wouldn't overdo it.

If your name has accent characters in it, your best bet is to change your name. For instance, if your name is Pièrre l'Éléphant, think about whether you'd prefer to have it seen as "Pi?rre l'?l?phant" or "Pierre l'Elephant". Sure, your accented characters might make it through, but I'd play it safe.

HTML formatting usually makes it through safely because it's plain text. However, even if your tags are left alone by the automated mangler, there's no guarantee that your resume will be viewed from a browser, and nobody wants to read through a bunch of ugly markup while they're trying to assess your skills. So you shouldn't use HTML either.

Text! All the best resumes are plain text. Use text.

Tip #3: Check, please!

Attend to your basic hygiene: spell-check, grammar-check, style-check.

For starters, they have these wonderful programs called "spell checkers", and they even know some computer jargon. For God's sake, don't submit a resume without a spell-check. This is one bit of traditional advice that's still true for tech resumes. People care about your spelling, because if you're misspelling things it means you don't care enough about the quality of your job application to spend 30 seconds running it through a program that can find your mistakes for you. That's pretty damn lazy.

If you flat-out refuse to use a spell-checker, please at least refrain from misspelling Lisp as "Lips". You'd be amazed at how often people do this.

Don't misspell "Curriculum Vitae". The proper spelling is r-e-s-u-m-e, unless you have a Ph.D. or you're applying for a non-US company where "CV" is standardized. In the US, "curriculum vitae" is likely to be mistaken for a venereal disease.

Please, please, please learn the difference between "lead" and "led". It's one of the most common grammatical errors on resumes, and it annoys the hell out of many screeners. "Lead" is either the present-tense verb meaning "not doing any coding", or it's a metallic element that makes you sterile if you accidentally ingest it. "Led" is the past tense of "lead". Example:

 * 1995-1996: lead a team doing blah blah blah.  we were...

The date is long past, and rest of the paragraph is in the past tense, so this is clearly one of those people who don't know "lead" from "led". That, or she was trying to sterilize her team members. Either way, it doesn't look good.

Keeping the tense consistent between sentences in a paragraph is related to the important grammatical notion of "parallelism", in which you try to use the same structure for clauses in a sentence. For instance, you should never say: "Job responsibilities: pretty much doing nothing and pick my nose." Screeners will be much more impressed if you use the parallel gerund form, picking your nose.

None of this advice applies to blogs, of course. If you find spelling or grammatical errors in my blog, it's because I put 'em there on purpose. Pshaw.

To finish off our spiffy lead/led example, I should note that you can also use "lead" as a noun, as in "tech lead", but you risk having it interpreted as "wanker", so read tip 5 before you attempt it.

So! Spell check and grammar check. Gotta have 'em. What about style?

I could of course rant at length about style, but it's pretty open-ended: people constantly find clever new ways to be unclever. So I will restrict my stylistic remarks to the use of the word "utilize". "Utilize" has been scientifically demonstrated to be used only by stupid people, so if you use it you could easily be mistaken for one. A stupid person, that is, not a scientist. "Utilize" is one of the all-time classic Stupidity Indicators, right up there with saying "choo-choo-choo" out loud when you're thinking. Ever notice how only stupid people make train noises when they're thinking? "Oh gosh, lemme think, chsh chsh chsh... hmmm, choo choo choo..."

Yup. They sound like Winnie the Pooh, who as you may recall "thinks" by pounding his head and saying "think think think." DYHAQFM!

Tip #4: Avoid Weasel Words

Weasel Words are impressive-sounding verbs that make it sound like you did something useful, when in fact all you did was snork down chocolates from the big candy bowl in the conference room while other people did all the actual work.

"Participated" is the all-time champion Weasel Word. As an example of just how weaselly it is, consider this: I can say truthfully that I participated in the Gulf War. I even received a medal for it. The actual form of my participation involved watching it on CNN; I happened to be active duty Navy at the time but wasn't on tour. But I "participated" so I got a medal, despite the fact that I probably couldn't identify the Persian Gulf on a map.

Heck, I even "participated" in the election of George W. Bush, specifically by not voting for him. But it's true! I participated!

Given that you can participate in something without doing much or having any real impact, the word "participate" becomes a semantic sink: it sucks all meaning out of a paragraph, nullifying any deductions we can make about your actual contribution. If any form of "participated" appears in a paragraph describing something you did, experienced resume screeners will simply draw a big red line through that paragraph and move on.

"Proposed" is another Weasel Word, unless it's immediately followed by a claim of bona-fide work, such as "...and implemented". There's a certain type of candidate who drifts from job to job and produces nothing but proposals. This can mean that the person doesn't like to do real work, or that nobody ever listens to the person, but either way it's not good.

One big class of Weasel Words is the "stalker" category, including "analyzed", "studied", "learned", "observed", "watched" and their ilk. Nobody wants to hire you based on your extensive experience with observing work occurring. If all you did was analyze stuff, assuming it wasn't some sort of rigorous statistical analysis worth bragging about, then just take that whole item out of your tech resume.

Resume screeners keep an eye out for non-weasel words, aka Productivity Words. These are words that you can't weasel out of when someone asks you about them. The best are synonyms of "got real stuff done", including "coded", "implemented", "developed", "delivered", and "launched".

It's perfectly OK to use "designed", as long as you follow it up with a Productivity Word. If you design something without implementing it, then it's just a synonym for "Proposed". If you prefer to design things that other people ultimately implement, then you're quite possibly outstanding material for a company full of kneebiters. But a real tech company like Amazon or eBay or Microsoft or whoever isn't going to hire you, because they can find plenty of people who can both design things and implement them.

"Tech lead" is, sadly, another weasel word if you're applying for an individual contributor position, because it's all too easy for your tech skills to rust into oblivion if you spend long enough as a tech lead without helping with the coding. It's especially a red flag for college hires who are talking about their group projects; weaker programmers often gravitate towards the coordinator position on their project, and wind up not having any real knowledge to show for their effort. Hence, if you're applying for a programming position and you were a project leader of any kind, make sure to call out whether you did any coding on the project, or screeners will assume that you did none.

Tip #5: Avoid Wank Words

Wank Words are words that inflate your perceived importance (e.g. using "architected" rather than "designed"), or words that have simply become synonyms, such as "Rational UML Process", for the so-called work done by people who sit on their asses and don't know how to code anymore.

Wank Words are worse than just devoid of content; they're active indicators of total inactivity. Resume screeners either delete Wank Words or replace them with the word "wank" (e.g., "Certified Wank Master"), which makes the resume a lot easier to scan.

"Advocate" is a common wank word, when it refers to a title or position. If it's a verb then it's just a weasel word, but if you think it's your title, then you've inflated yourself into Wanker territory. Either way, if you're walking around advocating stuff, it means you're not working. Also, it means nobody listens to you, because if you possessed actual leadership, people would just do what you recommended and then you wouldn't need advocate it anymore. So "advocate" just means "wanker".

"Consultant" is often another absolutely outstanding synonym for "wanker". Now let me just add, before I get stabbed to death by eager members of the heavily armed Consultant Industry, that some consultants are great. The problem is that the odds are completely stacked against you in tech resume screening. It's like fast-food experience when applying to be a waiter at a fancy restaurant. It might have helped you hone your waiter skills, but the odds are against it, and a lot of the art of resume screening is about weighing odds.

The problem with "consultant" is that it has two meanings. It can either mean "person who was hired on a contract basis to fill a coding need in the organization", or it can mean "person hired to 'consult', aka 'wank', because the hiring organization is too clueless to solve their own problems and too incompetent to retain even one full-time staff member capable of helping them, so they turn to paid self-help." When you see the word on a resume, it can be hard to distinguish which kind it is.

The all-time worst Wank Word is probably "Methodologist". It will definitely get your resume circulated around at tech companies, but not for the reasons you were hoping. Any sort of amusing synonym for "Methodologist", such as Scrum Master, generally has the same effect.

Wank Words are a bit like the adjectives on restaurant menus — meaningless fluff words added in an attempt to make the dish sound tasty. You can get a much clearer idea of what the hell it is that you're contemplating eating if you take all the adjectives out, including nouns and noun-strings that serve as adjectives. For instance, House Cured Spice Rubbed Apple Smoked Line Caught Columbia River Coho Salmon, when all the Wank Words are removed, becomes "Salmon", which is of course the only part of the description that you're actually eating. Depending on how you feel about what that winds up being, you can replace all the adjectives with either "icky" or "yummy", e.g. "Yummy yummy yummy yummy yummy yummy yummy yummy Salmon", or "Icky icky icky icky icky icky icky icky Eggplant."

Hence, many wank-filled resumes wind up looking, after the screeners have marked them up a bit, like this: "Senior wanker wanking for the Wank-Wank Institute of Wankology on the wank wank wank project during which I wanked successfully with seven other wanky wankers."

Well, "senior" is also kind of a wank word, but you get the idea.

Tip #6: Don't be a Certified Loser

Don't ever, ever use the word "certified" your resume. It's far and away one of the most prominent red flags in resume screening, bordering on a dead-giveaway round-file 86-that-bad-boy no-review-required situation, if you know what I mean. (If you don't know what I mean, well, you know the old saying about not knowing who the sucker is at the poker table.)

Certification is for the weak. It's something that flags you as a technician when you really want to be an engineer. If you want to be a television repairman, you can become certified in TV repair. If you want to work for Sony and design their next big-screen TV, then you clearly don't need a busy-working-adults course on how to repair the fugging things.

Same goes for tech certification. It means you had to take a course to learn something you could have read in a book. If you know something, just say you know it, and then be prepared to answer questions about it during your phone screens and/or interviews. If you feel compelled to add that you're certified in said skill, it's just broadcasting that you lack confidence in your own self-assessments, which doesn't help you in the slightest.

Seriously. Take all mentions of certifications off your tech resume. It's actively hurting your chances of getting an interview.

Tip #7: Don't say "expert" unless you really mean it

The term "expert" makes experts' eyes glow red. It doesn't bother me personally, but I know enough interviewers who care vastly about it that I'm advising you to steer clear. If you say you're an expert in something, many interviewers take it to mean you claim to have a bigger penis than they do, metaphorically speaking of course, and they're going to pull out their still highly metaphorical measuring stick during the interview and size you up. I employ this metaphor in its most gender-neutral possible interpretation, needless to say.

A friend of mine at Amazon once told me that he takes resumes that list "expertise" and he tells the candidate something along these lines: "Wow! You don't often find true experts in fields like this. I feel like I've found a kindred spirit here. I don't often do this, but I'm going to pick one of these technologies you're an expert at, and we're doing to do an incredibly deep technical dive on the subject. But before I start, is there anything you want to take off the resume?"

He says it's like truth serum. (Hi, H.B.!)

Tip #8: Don't tip your hand

Resume writing is just like dating, or applying for a bank loan, in that nobody wants you if you're desperate. And there are dozens of sure-fire little ways to let it slip out accidentally that you are, in fact, desperate, such as (just as one example) using the word "desperate" on the actual resume. Don't do that.

Ideally you want to appear confident and competent. Regardless of your overall skill level, from "Magna Cum Laude" to "Platyhelminthes", you'll want to appear confident that you can function effectively at that level.

One way of sounding really desperate is to apply for 18 jobs in one sentence. "Objective: Highly personable, results-oriented programmer seeking opportunity to lead or contribute individually on projects or programs involving e-commerce, 3D multiplayer gaming, b2b, web programming or client/server networking with database or other persistence strategies while utilizing my broad background in problem-solving to do pretty much any menial job you'll give me oh please please please hire me, I'm d-d-des-desp-waaaaaaah!" Works like a charm!

You can apply for 18 jobs, but you should send 18 different resumes, each targeted at that job, and you shouldn't send them all at once.

Another really obvious sign of desperation is saying you're eager to learn. Never, ever say "eager to learn" on a resume. In the ancient and occult secret rosetta-stone decoder language of technical resume screeners everywhere, "eager to learn" means "unskilled labor". Let's face it: if you were really eager to learn, you'd have done it by now.

"Fast learner" — definitely another bad one. Doubly so, because it combines desperation with ignorance; you wouldn't need to call it out if you could demonstrate something concrete that you've already learned. If you have some true demonstration that you're a fast learner, such as entering college at age 14, then sure, call it out. But the phrase "fast learner" is a fast track to the Big Resume Bin in the Sky.

"Motivated" is another resume-screening synonym for "desperate". Don't say you're motivated. It's like wearing a suit to the interview. It'll turn people off, guaranteed.

The best way to sound non-desperate is to be non-desperate. You can do that by lowering your expectations, tightening your belt, and not applying for that job you know you're not qualified for. Failing that, just make a nice clean resume that sticks the bare facts about your skills and accomplishments.

Tip #9: Don't bore us to death

Consider this resume statement:

  * designed and developed runtime library code to emulate
MS-DOS and BIOS calls on a variety of Unix platforms. This
enables binary-ported DOS application programs such as Quicken
and Microsoft Word to run under a commercial emulator on Unix
platforms. This enables users who do not currently have access
to a DOS machine, but who have blah blah BLAH lather rinse repeat.

All it needs is the first sentence; we can deduce the rest.

Incidentally, if you're cleverly thinking of commenting that I need to follow Tip #9 in my blogs, well, just remember this: if you ever write well enough to attract commenters, they'll hate you too. So there!

Seriously, take a close look at your resume and delete anything that seems obvious. If you worked at a company that everyone in the world has heard of, such as Microsoft or Amazon, then don't spend time explaining to us what they do.

Be as specific as possible. Don't say "managed several small projects and one medium-sized one." That's useless. If the projects were too small to detail, then don't mention them at all.

Don't repeat information from section to section. That happens a lot. Candidates seem to think that screeners might miss something important on the resume, so they wind up saying the same thing over and over. This copy-and-paste strategy has two major downsides. The first is that the screener will be irked that you're repeating yourself, causing them to start grading more harshly. The second is that if you're repeating something the screener finds comical, such as "Senior Agile Methodologist" or "Certified J2EE Consultant", you're not exactly helping by repeatedly honking it out like a wounded seagull.

Resumes aren't a time for storytelling. Your goal, as a resume writer, should be to cover your entire academic and professional career in a way that makes it as easy as possible for screeners to match up your skills and accomplishments with things they recognize. It's basically a checklist.

Don't go overboard on me and make a resume with so little information that nobody can figure out what the heck you did on any of your projects — I've seen that too. When in doubt, provide more information, not less. There's nothing wrong with a long-ish resume, despite what you might have heard from other industries. Just try to leave out stuff that can be found through a search engine.

Tip #10: Don't be a lying scumbag

See, it's like this: you'll get caught. I'm still amazed at how many candidates think that the resume game is some variant of bingo, wherein all the words on your resume have optional invisible stars indicating whether you actually know something about that word, and you just cross your fingers hope the interviewer shouts out Bingo! after randomly selecting five starred words.

The weird thing is that so many people do it. Maybe they had to write a 10-line program in Forth back in approximately fourth grade, so they shrug and list "Forth" in their programming languages section, squeezed in at the end right between "HTML" and "English", in the hope that it looks good but won't be selected for Interview Bingo. That, folks, is tantamount to lying.

I do realize that "lying" is a rather harsh criticism, so I'm willing chalk it up to a gentlemanly misunderstanding over the definition of the number "five". Many people who rate themselves in some skill as being "average", or "intermediate", or "passably fair to middling", or 4 through 6 on a 1-10, have redefined those terms to mean "have been briefly exposed to the concept, but don't remember a single thing about it now except the name." Really. I'm not making this up.

Seeing as candidates are redefining the number five to mean "one", I figure I can redefine "grossly exaggerating" to mean "lying". Fair enough?

If you lie on a tech resume, you'll get caught. Of course one of the interviewers is going to be a passionate closet Forth user (as if there's any other kind), and they'll get all excited and ask about it, which sends the candidate into a pants-crapping frenzy of lost-at-Bingo smoke-screen tactics, which include hemming and hawing and saying "oh gosh it's been a long time" and all those other things that so endear them with interviewers.

What were they thinking?

Incidentally, I know this is supposed to be about resume writing and not interviewing, but let me just state for the record that I remember my college courses from nearly 20 years ago as if they were last week. If I'm interviewing you and I ask about your OS course and you say "oh gosh, it's been a long time, lemme think, choo choo choo, I can't remember" and then I look at your transcript and you took it 2 years ago, well, DYHAQFM?

Here's your absolute bestest-best winning strategy: don't lie and don't exaggerate. Everyone's had brief exposure to programming languages they didn't like and didn't understand, and there's nothing to be gained by listing them on a resume. Do your best to give a qualitative estimate of proficiency for every skill on your resume (the acceptable levels being "novice", "amateur", "tyro", "newbie", and "invented it" if you want extra insurance towards Tip #7).


Resume writing is a fine art, and everyone has their own cherished opinions about it, and no doubt I've angered even more than the usual number of certified agile consultants. But I estimate that I've screened well over five thousand tech resumes, and I've interviewed or phone-screened over 1200 candidates in my 18-year career, and I've worked with people who've got those numbers beat by a wide margin. Despite broad philosophical differences in opinion about how to conduct technical interviews, all the engineers I've talked to over the years pretty much look for the same things in resumes.

At the risk of boring you to death, I'll reiterate that I'm not speaking for Google here. It's not actually possible to speak for a whole company on a subject as diverse and opinionated as resume writing (or screening), but even if it were possible, I wouldn't be doing it.

This concludes today's little set of free, personal tips on writing programmer resumes. Thanks for reading!